Не задаётся программно AcceptButton
От: svmich Россия  
Дата: 09.02.11 12:15
Оценка:
Кто-нибудь знает, чего я тут делаю не так?
Назначаю в коде (ниже) свойство AcceptButton в конце конструктора модального диалога (наследник Form, по которому вызывается ShowDialog()), а реально при нажатии получаю DialogResult, соответствующий нажатию другой из двух кнопок диалога...


    public partial class Form1 : Form
    {
        public Form1()
        {
            const int
                horizontalMargin = 10,
                verticalMargin = 10;

            SuspendLayout();

            InitializeComponent();

            btnRight = new Button();
            btnRight.Parent = this;
            btnRight.Location = new Point(ClientSize.Width - horizontalMargin - btnRight.Width, ClientSize.Height - verticalMargin - btnRight.Height);
            btnRight.Text = "Right";
            btnRight.DialogResult = System.Windows.Forms.DialogResult.No;

            btnLeft = new Button();
            btnLeft.Parent = this;
            btnLeft.Location = new Point(btnRight.Left - horizontalMargin - btnLeft.Width, ClientSize.Height - verticalMargin - btnLeft.Height);
            btnLeft.Text = "Left";
            btnLeft.DialogResult = System.Windows.Forms.DialogResult.Yes;

            AcceptButton = btnLeft;
            CancelButton = btnRight;

            ResumeLayout(true);
        }

        private Button btnLeft, btnRight;
    }


В результате при нажатии Enter моя переменная result
DialogResult result = form.ShowDialog();

получает DialogResult.No, соответствующий не той кнопке, которая назначена как AcceptButton, а другой.

Кто-нибудь понимает, в чём тут дело?
Re: Не задаётся программно AcceptButton
От: svmich Россия  
Дата: 09.02.11 12:39
Оценка:
Эксперимент показал, что нажатие Enter соответствует той кнопке, у которой TabIndex = 0. Поменял у них TabIndex — всё стало как мне нужно.
Странно это всё...
Re[2]: Не задаётся программно AcceptButton
От: Sergey_BG Россия  
Дата: 10.02.11 15:29
Оценка:
Здравствуйте, svmich, Вы писали:

S>Эксперимент показал, что нажатие Enter соответствует той кнопке, у которой TabIndex = 0. Поменял у них TabIndex — всё стало как мне нужно.

S>Странно это всё...

Кнопка "Принять" может не активироваться, если выбранный в текущий момент элемент управления на форме перехватывает клавишу ВВОД и обрабатывает ее. Например, элемент управления многострочного текстового поля допускает нажатие клавиши ВВОД, если она выбрана для вставки нового строкового символа в элемент управления.


Я думаю, что просто другая кнопка в этот момент была в фокусе.
Сергей
Re: Не задаётся программно AcceptButton
От: notacat  
Дата: 11.02.11 05:01
Оценка:
не хватает btnLeft.IsDefault = true;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.