Я экспериментировал с появлением окна сообщения об ошибке при нажатии клавиши 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
Есть ли фундаментальная ошибка в API Win32, когда дело доходит до неправильного звукового сигнала в окне сообщений? ⇐ C#
Место общения программистов C#
1732840546
Anonymous
Я экспериментировал с появлением окна сообщения об ошибке при нажатии клавиши Enter в текстовом поле, и мне кажется, что я столкнулся с очень низкоуровневой ошибкой Win32. Учитывая очень минималистскую программу WinForms на C# .NET 9, два файла ниже составляют единственную форму Form1.
Когда я нажимаю кнопку button1, я получаю Окно сообщения об ошибке с правильным звуковым сигналом «ошибка». Когда я печатаю символ в textBox1, я также получаю окно сообщения об ошибке с правильным звуковым сигналом «ошибка». Однако когда я нажимаю Enter в textBox2, я получаю окно сообщения об ошибке с неправильным «нормальным» звуковым сигналом Windows. Странно то, что если я просто использую e.SuppressKeyPress = true;, я получаю тишину, но если я действительно отображаю окно сообщения, он издает неправильный звуковой сигнал. Это похоже на то, что Win32 API каким-то образом обнаруживает, что был нажат Enter, и использует это, чтобы определить, какой звуковой сигнал воспроизвести, вместо использования переданного MessageBoxIcon.Error, который обычно используется.Это фундаментальная проблема Win32, которую невозможно обойти? Или есть какой-то способ заставить его воспроизводить правильный звуковой сигнал «ошибка», когда вы нажимаете Enter в textBox2?
[b]Код:[/b]
[b]Form1.cs[/b]
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;
}
}
}
[b]Form1.Designer.cs[/b]
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;
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79235587/is-there-a-fundamental-bug-in-the-win32-api-when-it-comes-to-producing-the-wrong[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия