2017-01-07 7 views
1

Я использую следующий код для создания MessageBox с диалогом. По умолчанию кнопка «Да» имеет фокус. Если я случайно нажимаю клавишу пробела, в диалоговом окне понимается, что я выбрал Да. Я хочу, чтобы это было, только если я нажимаю клавишу возврата, чтобы вызвать событие. Есть ли способ отключить клавишу «Пробел» от отправки ответа?DialogResult MessageBox отключить пробел (пробел) от отправки ответа

DialogResult dialogResult = MessageBox.Show(sMsg, "Title", MessageBoxButtons.YesNo); 
if(dialogResult == DialogResult.Yes) 
{ 
    // do something 
} 
else if (dialogResult == DialogResult.No) 
{ 
    // do something else 
}       

ответ

0

Visual Vincent пояснил, что лучше создать свою собственную диалоговую форму, вместо того чтобы полагаться на MessageBox.Show().

1

Попробуйте это:

MessageBox.Show(this, "MessageText", "MessageCaption", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No, MessageBoxOptions.None); 

параметр "MessageBoxResult.No" является значение результата диалога по умолчанию.

+0

Спасибо, Дэвид. Я использовал MessageBox.Show (sMsg, sTitle, MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2, MessageBoxOptions.ServiceNotification, false); и это изменило кнопку по умолчанию от «Да» до «Нет». Однако мне интересно отключить клавишу пробела от отправки какого-либо ответа. Я мог бы сделать другую форму только для этого MessageBox и обрабатывать ключевые события для каждой кнопки, но это кажется мне расточительным. –

+0

@Nick_F: Это проще сделать, чем создать глобальный крючок клавиатуры, чтобы перехватить клавишу пробела (что является другим, но сложнее). –

+1

@Nick_F: Я видел много вопросов на разных форумах на протяжении многих лет, когда они хотят изменить поведение диалогов Windows. Ответ просто: это невозможно (или, может быть, более правильно: слишком сложно для обычного разработчика). Поэтому всегда лучше создавать свой собственный диалог, если вам нужно другое поведение/внешний вид. –