Есть ли фундаментальная ошибка в API Win32, когда дело доходит до неправильного звукового сигнала в окне сообщений?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Есть ли фундаментальная ошибка в API Win32, когда дело доходит до неправильного звукового сигнала в окне сообщений?

Сообщение Anonymous »

Я экспериментировал с появлением окна сообщения об ошибке при нажатии клавиши Enter в текстовом поле, и мне кажется, что я столкнулся с очень низкоуровневой ошибкой Win32. Учитывая очень минималистскую программу WinForms на C# .NET 9, два файла ниже составляют единственную форму Form1.
Когда я нажимаю кнопку button1, я получаю Окно сообщения об ошибке с правильным звуковым сигналом «ошибка». Когда я печатаю символ в textBox1, я также получаю окно сообщения об ошибке с правильным звуковым сигналом «ошибка». Однако когда я нажимаю Enter в textBox2, я получаю окно сообщения об ошибке с неправильным «нормальным» звуковым сигналом Windows. Странно то, что если я просто использую e.SuppressKeyPress = true;, я получаю тишину, но если я действительно отображаю окно сообщения, он издает неправильный звуковой сигнал. Это похоже на то, что Win32 API каким-то образом обнаруживает, что был нажат Enter, и использует это, чтобы определить, какой звуковой сигнал воспроизвести, вместо использования переданного MessageBoxIcon.Error, который обычно используется.Это фундаментальная проблема Win32, которую невозможно обойти? Или есть какой-то способ заставить его воспроизводить правильный звуковой сигнал «ошибка», когда вы нажимаете Enter в textBox2?
Код:
Form1.cs
namespace SoundTest
{
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e) {
MessageBox.Show("Test error", "Test error caption", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

private void textBox1_TextChanged(object sender, EventArgs e) {
MessageBox.Show("Test error", "Test error caption", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

private void textBox2_KeyDown(object sender, KeyEventArgs e) {
MessageBox.Show("Test error", "Test error caption", MessageBoxButtons.OK, MessageBoxIcon.Error);
// ^ commenting this out makes things silent. but having the message box makes it play the wrong beep
e.SuppressKeyPress = true;
}
}
}

Form1.Designer.cs
namespace SoundTest
{
partial class Form1
{
///
/// Required designer variable.
///
private System.ComponentModel.IContainer components = null;

///
/// Clean up any resources being used.
///
/// true if managed resources should be disposed; otherwise, false.
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}

#region Windows Form Designer generated code

///
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
///
private void InitializeComponent() {
button1 = new Button();
textBox1 = new TextBox();
textBox2 = new TextBox();
SuspendLayout();
//
// button1
//
button1.Location = new Point(331, 46);
button1.Name = "button1";
button1.Size = new Size(75, 23);
button1.TabIndex = 0;
button1.Text = "button1";
button1.UseVisualStyleBackColor = true;
button1.Click += button1_Click;
//
// textBox1
//
textBox1.Location = new Point(334, 213);
textBox1.Name = "textBox1";
textBox1.Size = new Size(100, 23);
textBox1.TabIndex = 1;
textBox1.TextChanged += textBox1_TextChanged;
//
// textBox2
//
textBox2.Location = new Point(401, 333);
textBox2.Name = "textBox2";
textBox2.Size = new Size(100, 23);
textBox2.TabIndex = 2;
textBox2.KeyDown += textBox2_KeyDown;
//
// Form1
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(800, 450);
Controls.Add(textBox2);
Controls.Add(textBox1);
Controls.Add(button1);
Name = "Form1";
Text = "Form1";
ResumeLayout(false);
PerformLayout();
}

#endregion

private Button button1;
private TextBox textBox1;
private TextBox textBox2;
}
}


Подробнее здесь: https://stackoverflow.com/questions/792 ... -the-wrong
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»