#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
}