C #, WinForms — Запуск процесса поиска кнопкой «ENTER»

#c# #winforms #search #button #enter

#c# #winforms #Поиск #кнопка #введите

Вопрос:

Я ищу функцию, которая дает мне возможность начать поиск в моем DGV, не нажимая на мою кнопку «Поиск». Для этого я создал кнопку поиска, которая запускает процесс поиска по щелчку:

 private int SearchValueRowIndex()
        {
            string searchValue = textBox1.Text;

            foreach (DataGridViewRow row in dataGridView1.Rows)
            {
                foreach (DataGridViewCell cell in row.Cells)
                {
                    if (cell.Value != null amp;amp; cell.Value.ToString() == searchValue)
                    {
                        return cell.RowIndex;
                    }
                }
            }
            // Not found
            return -1;
        }
  

SearchValueRowIndex :

     private int SearchValueRowIndex()
    {
        string searchValue = textBox1.Text;

        foreach (DataGridViewRow row in dataGridView1.Rows)
        {
            foreach (DataGridViewCell cell in row.Cells)
            {
                if (cell.Value != null amp;amp; cell.Value.ToString() == searchValue)
                {
                    return cell.RowIndex;
                }
            }
        }
  

Теперь я попытался открыть новый класс для активации SearchButton без необходимости нажимать на него:

  private void button1_KeyPress(object sender, KeyEventArgs e)
    {
        if (e.KeyValue.ToString() == Keys.Enter.ToString())
        {
            button1.PerformClick();
        }
    }
  

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

Комментарии:

1. Находится ли кнопка в фокусе при нажатии клавиши? Если нет, то он не будет захватывать клавиатуру. Кроме того, в этом нет необходимости, поскольку событие нажатия клавиши произойдет только тогда, когда фокус будет установлен на кнопку, оно вызовет событие click, если вы нажмете клавишу enter.

2. и как тогда добавить фокус для ключа?

3. вам действительно нужна кнопка? Я имею в виду, что для свойства KeyPreview формы может быть установлено значение true, и тогда она получит любое нажатие клавиши.

4. Хм, нет. Я думаю, что я перевел ваш ответ в неправильном направлении. Я пытаюсь установить для KeyPreview значение true. Пока не могу его найти. Есть ли вероятность, что к нему невозможно получить доступ?

5. Нет, но это свойство находится в форме, а не на кнопке, возможно, именно поэтому вы не можете его найти.

Ответ №1:

Кажется, что вы вводите поисковый запрос в текстовом поле поиска. Затем вы можете напрямую подключить textbox.Событие нажатия клавиши для получения требуемого результата.

     private void SearchTextBox_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {
            //Perform search
        }
    }
  

Ответ №2:

Вам нужно установить для KeyPreview -свойства вашей формы значение true . Затем вы можете реализовать KeyDown -Event для всех элементов управления в вашей форме следующим образом:

 private void button1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter) this.button1_Click(sender, e);
}

private void txt_search_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter) this.button1_Click(sender, e);
}
...
  

Комментарии:

1. Выполнял поиск с помощью STRG F, ничего не нашел. Куда его добавить?

2. В режиме конструктора вашей формы в окне свойств есть свойство, называемое KeyPreview.

3. Не нашел. Выполните поиск по ней и откройте каждую вложенную кнопку, которую она могла скрыть ниже.

4. Вы также можете установить свойство в конструкторе вашей формы, написав это. KeyPreview = true;

Ответ №3:

для формы существует свойство, называемое AcceptButton. Это вызывается при нажатии клавиши enter. Возможно, вы можете установить это для своей кнопки поиска.

 public Form1()
        {
            InitializeComponent();
            this.AcceptButton = button1;// button1 name of your button
        }