Изменение AcceptButton в зависимости от активного элемента управления - PullRequest
1 голос
/ 02 марта 2009

У меня есть работающая WinForm, которая обрабатывает функции поиска в моей базе данных клиентов. Он содержит следующие элементы управления:

  • Текстовое поле, где вы вводите строку поиска (A)
  • Кнопка «поиск» (B)
  • DataGridView (C), который возвращает результат поиска
  • Кнопка «ОК» (D) и кнопка «Отмена» (E)

То, что я пытаюсь получить, следующее:

  1. Когда A активен, кнопка AcceptButton (ввод) должна быть связана с B
  2. Когда B или Enter нажаты, C должен стать активным
  3. Когда C активен, кнопка AcceptButton должна быть связана с D

Я понимаю, что это довольно большой вопрос, поэтому не стесняйтесь ответить только на один из маркеров, если вы знаете ответ.

РЕДАКТИРОВАТЬ: Я решил выполнение требований 1 и 3 выше, но я все еще ищу ответ на второй. Чтобы уточнить, когда начинается поиск (то есть, я нажал клавишу ввода на клавиатуре или кнопку поиска с помощью мыши), я хочу, чтобы фокус переместился на первую строку в DataGridView.

Ответы [ 4 ]

3 голосов
/ 02 марта 2009

Когда вы получаете событие изменения текста для textBox, установите AcceptButton равным «Поиск»:

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        this.AcceptButton = SearchButton;
    }

Возможно, здесь будет больше кода, проверяющего длину строки и т. Д.

Затем, выполнив поиск и заполнив DataGridView, вы можете установить AcceptButton на «ОК».

    private void dataGridView1_DataMemberChanged(object sender, EventArgs e)
    {
        this.AcceptButton = OKButton;
    }

Хотя вы, вероятно, не захотите использовать это событие.

«Отмена» - это всегда кнопка «Отмена».

РЕДАКТИРОВАТЬ: ОК для части 2, вы хотите следующий код:

    private void SearchButton_Click(object sender, EventArgs e)
    {
        dataGridView1.Focus();
    }

Это сделает его активным, как только будет нажата кнопка поиска, но вы, вероятно, захотите сделать это, когда заполнен DataGridView - на случай, если поиск не дал результатов.

1 голос
/ 03 марта 2009

Вы должны реализовать прослушиватель событий для DataGridViewBindingCompleteEventHandler. В этом случае вы можете добавить следующий код:

{
    if(grid.Rows.Count > 0)
    {
        grid.ClearSelection();
        grid.Rows[0].Selected = true;
    }
    grid.Focus();
}
1 голос
/ 02 марта 2009
private void WhateverControl_Enter(...)
{
    this.AcceptButton = myButton;
}
1 голос
/ 02 марта 2009

Настройка обработчиков для отслеживания события Control.Enter для определенных элементов управления. Когда вход достигнут, попробуйте:

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