Нажатие кнопки по умолчанию в окнах форм (пытается найти лучшее решение) - PullRequest
8 голосов
/ 15 января 2009

Вопрос в том, как сделать так, чтобы кнопка по умолчанию была сфокусирована на фокусе формы и ответе на нажатие клавиши «Ввод», но не фокусировалась, когда каретка находится в текстовом поле с многострочным свойством, например, для true? сделать некоторые исключения в коде, но, возможно, есть некоторые "лучшие практики", которые я пока не знаю :( спасибо

Ответы [ 6 ]

14 голосов
/ 15 января 2009

Возможно, я вас неправильно понял, но я бы сделал следующее:

  1. Установите «AcceptButton» формы на кнопку, на которую вы хотите ответить "Enter"
  2. Установите «AcceptsReturn» из текстовое поле с многострочным в true

и вуаля

5 голосов
/ 15 января 2009

(изменить - ответ здесь очень хорошо подходит для TextBox; этот шаблон может быть полезен для других элементов управления, в которых отсутствует AcceptsReturn или эквивалентный)

Вы можете использовать события GotFocus и LostFocus, чтобы довольно легко изменить AcceptButton, например:

[STAThread]
static void Main()
{
    Application.EnableVisualStyles();
    TextBox multi, single;
    Button btn;
    using(Form form = new Form {
            Controls = {
                (multi= new TextBox { Multiline = true, Dock = DockStyle.Fill}),
                (btn = new Button { Text = "OK", Dock = DockStyle.Bottom,
                    DialogResult = DialogResult.OK}),
                (single = new TextBox { Multiline = false, Dock = DockStyle.Top}),
            }, AcceptButton = btn                
        })
    {
        multi.GotFocus += delegate { form.AcceptButton = null; };
        multi.LostFocus += delegate { form.AcceptButton = btn; };
        btn.Click += delegate { form.Close(); };
        Application.Run(form);
    }
}
4 голосов
/ 15 января 2009

Форма Windows имеет два свойства: AcceptButton и CancelButton. Вы можете установить их так, чтобы они ссылались на кнопки управления в вашей форме. AcceptButton сообщает, какая кнопка должна быть нажата, когда пользователь нажимает клавишу ввода, а кнопка Отмена сообщает, какую кнопку следует нажать, когда пользователь нажимает клавишу выхода.

Часто вы устанавливаете DialogResult для AcceptButton в DialogResult.OK или DialogResult.Yes и DialogResult.Cancel или DialogResult.No для кнопки отмены. Это гарантирует, что вы можете легко проверить, какая кнопка была нажата, если вы выводите форму модально.

1 голос
/ 15 января 2009

или вы можете сделать это в событии de focus вашего текстового поля, как в

_targetForm.AcceptButton = _targetForm.btnAccept;

, а затем уберите его в другом текстовом поле с помощью мультилинии

0 голосов
/ 15 декабря 2014

Выполните следующие действия:

private void Login_Load(object sender, EventArgs e)
{
    this.AcceptButton = btnLogin;
}
0 голосов
/ 02 сентября 2013

в Form_Load, установите

this.AcceptButton = buttonName;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...