Как создать кнопку, которая может отправлять ключи на консоль без потери фокуса - Виртуальная клавиатура
779 просмотра
1 ответ
Как сделать кнопку, которая может отправить ключи в сетку данных (поэтому мне нужно как-то вернуть сетку данных в ее состояние до того, как она потеряет фокус)
Я объясню проблему
У меня есть форма с сеткой данных и некоторыми кнопками
Я могу нажать на кнопку, и она введет соответствующую букву,
dataGridView1.Focus();
SendKeys.Send("a"); //or m or z, depending on the text of the button.
Кнопка предназначена для ввода данных в просмотр данных. Я мог бы сделать так, чтобы он был включен только при вызове метода ввода datagridview. Когда кнопка нажата, то сетка данных теряет фокус, поэтому я должен снова сфокусировать ее перед отправкой ключа. Отсюда две строчки выше.
Я хочу, чтобы пользователь мог использовать кнопки для ввода данных в сетку данных.
Проблема, скажем, в том, что я хочу, чтобы пользователь мог вводить текст "maz", но я не могу этого сделать. Я получаю только человека а или м или я. И даже если бы я мог вернуть ячейку обратно в редактируемый режим, мне нужно было бы вспомнить, где находился курсор. Так что, если бы кто-нибудь набрал в ячейке asdf и поместил курсор между d и f и нажал m, я бы хотел это сказать asdmf.
Я не знаю, как этого добиться.
У меня есть идея ... что, возможно, если бы был способ зарегистрировать, что мышь была над кнопкой, и щелчок был нажат, но без потери фокуса на просмотре данных, это был бы один из способов сделать это. Хотя я не знаю, как это сделать, и меня интересуют разные способы.
Автор: barlop Источник Размещён: 13.11.2019 11:35Ответы (1)
5 плюса
Невыбираемая кнопка для отправки ключа, как виртуальная клавиатура
Достаточно сделать невыбираемую кнопку, а затем обработать событие щелчка и отправить ключ. Таким образом, эти кнопки могут работать как клавиши виртуальной клавиатуры, и фокус останется на элементе управления, который имеет фокус, в то время как он отправляет ключ на элемент управления с фокусом.
public class ExButton:Button
{
public ExButton()
{
SetStyle(ControlStyles.Selectable, false);
}
}
Затем обработайте событие клика и отправьте ключ:
private void exButton1_Click(object sender, EventArgs e)
{
SendKeys.SendWait("A");
}
Метод расширения SetStyle для элемента управления
Есть ли способ вызова
SetStyle
наControl
без использования наследования?
Да, используя Reflection , есть. Создайте этот метод расширения:
public static class Extensions
{
public static void SetStyle(this Control control, ControlStyles flags, bool value)
{
Type type = control.GetType();
BindingFlags bindingFlags = BindingFlags.NonPublic | BindingFlags.Instance;
MethodInfo method = type.GetMethod("SetStyle", bindingFlags);
if (method != null)
{
object[] param = { flags, value };
method.Invoke(control, param);
}
}
}
Затем используйте это таким образом, в вашей форме Load
события:
this.button1.SetStyle(ControlStyles.Selectable, false);
Тогда button1 будет недоступен для выбора без наследования.
Автор: Reza Aghaei Размещён: 21.04.2016 03:04Вопросы из категории :
- c# Преобразовать десятичную в двойную?
- c# Как рассчитать чей-то возраст в C #?
- c# Как вы сортируете словарь по значению?
- c# В чем разница между int и Integer в Java и C #?
- c# Как создать новый экземпляр объекта из Типа
- .net Действительно ли опечатанные классы действительно предлагают преимущества?
- .net Setting Objects to Null/Nothing after use in .NET
- winforms Как заставить кнопку выглядеть так, как будто она нажата?
- winforms Лучший способ получить доступ к элементу управления в другой форме в Windows Forms?
- winforms Можете ли вы использовать общие формы в C #?
- winforms Как отключить Alt + F4 закрытие формы?
- winforms Привязка данных WinForms и отношения внешних ключей
- datagridview DataGridViewComboBoxColumn добавляет разные элементы в каждую строку.
- datagridview DataGridView ToolTipText не отображается
- datagridview Is it possible to switch rows and columns in a datagridview?
- datagridview Столбец флажка DataGridView - значение и функциональность
- datagridview Как я могу обновить только видимые строки данных, связанных DataGridView?