Кнопка "Принять" не работает

У меня проблема с кнопкой принятия внутри формы Windows. Форма содержит две кнопки (ОК и Отмена). Внутри формы я установил свойства кнопки отмены и принятия для определенных кнопок. В дополнение к этому я также создал простое событие Click - Event для обеих кнопок. Но когда я запускаю приложение и нажимаю Enter, точка останова внутри моего Click-Method не срабатывает и ничего не происходит. С другой стороны, кнопка отмены работает нормально. Даже если я переключаю кнопки принятия и отмены, кнопка принятия не работает, и приложение, кажется, игнорирует ввод-ввод. Я несколько раз искал дизайнера, но не нашел ничего, что могло бы привести к такому поведению. Само событие Click также отлично работает при нажатии кнопки, это просто ввод-ввод. Итак, мой вопрос: есть ли у кого-нибудь ключ к разгадке, откуда взялось такое странное поведение?

Designer:
// 
// SearchForm
// 
this.AcceptButton = this.BtnSearch;
this.CancelButton = this.BtnCancel;
//
//BtnSearch
//
this.BtnSearch.DialogResult = System.Windows.Forms.DialogResult.OK;
this.BtnSearch.Location = new System.Drawing.Point(12, 60);
this.BtnSearch.Name = "BtnSearch";
this.BtnSearch.Size = new System.Drawing.Size(75, 23);
this.BtnSearch.TabIndex = 1;
this.BtnSearch.Text = "Search";
this.BtnSearch.Click += new System.EventHandler(this.BtnSearch_Click);    
// 
// BtnCancel
// 
this.BtnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.BtnCancel.Location = new System.Drawing.Point(108, 60);
this.BtnCancel.Name = "BtnCancel";
this.BtnCancel.Size = new System.Drawing.Size(75, 23);
this.BtnCancel.TabIndex = 5;
this.BtnCancel.Text = "Cancel";
this.BtnCancel.Click += new System.EventHandler(this.BtnCancel_Click);




Form:
private void BtnCancel_Click(object sender, EventArgs e)
{
   this.Close();
}

private void BtnSearch_Click(object sender, EventArgs e)
{
   //DoStuff
}

person user3887184    schedule 29.07.2014    source источник
comment
Какой элемент управления имеет фокус при нажатии Enter? Ключевым моментом здесь является создание небольшой выборки, которая воссоздает проблему. Начните с двух кнопок и восстанавливайте элементы управления, пока проблема не появится снова. Например, у вас есть TextBox с AcceptsReturn = true?   -  person CodeCaster    schedule 29.07.2014


Ответы (2)


Проверьте, какой элемент управления находится в фокусе, когда вы нажимаете Enter. Если это кнопка, то нажатие на нее произойдет нажатием клавиши, а не AcceptButton.

Это делает AcceptButton довольно неубедительным свойством для диалогов, в которых есть больше, чем клавиши ОК и Отмена. Лучше сделать это так:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
    if (keyData == Keys.Enter) {
        btnSearch.PerformClick();
        return true;
    }
    return base.ProcessCmdKey(ref msg, keyData);
}
person Hans Passant    schedule 29.07.2014
comment
Спасибо за ваш быстрый ответ! Фокус находится в текстовом поле ... само текстовое поле имеет свойство AcceptReturn - False, я думаю, это должно быть нормально. Я попробую, обработав ввод как событие нажатия клавиши .... но все же это сводит меня с ума! ^ - person user3887184; 29.07.2014
comment
Это старый вопрос, но у меня точно такая же проблема. Мои пользователи жалуются, что нажатие Enter не закрывает диалоговое окно. Так как в большинстве диалогов есть несколько кнопок, это спасло меня! - person ScruffyDuck; 19.10.2014

Вы показываете форму как модальный диалог? Я думаю, что кнопки принятия и отмены работают только для модального диалога. Пример, приведенный в В статье MSDN показан модальный диалог.

person Piyush Thacker    schedule 29.07.2014
comment
Я использую немодальный диалог (используя Show () вместо ShowDialog ()), но странно то, что кнопка отмены работает нормально, а нажатие Enter, похоже, игнорируется. - person user3887184; 29.07.2014