bar*_*lop 4 .net c# datagridview winforms
如何创建一个可以将密钥发送到datagridview的按钮(所以我需要以某种方式将datagridview返回到它失去焦点之前的状态)
我会解释这个问题
我有一个带有datagridview和一些按钮的表单
我可以点击按钮,它会输入相应的字母,
dataGridView1.Focus();
SendKeys.Send("a"); //or m or z, depending on the text of the button.
Run Code Online (Sandbox Code Playgroud)
该按钮用于将数据输入datagridview.我可以这样做,只有在调用datagridview的enter方法时才启用它.单击该按钮时,datagridview失去焦点,因此我必须在发送密钥之前再次给它焦点.因此上面两行.
我希望用户能够使用按钮将数据输入到datagrid中.
问题是,假设我希望用户能够输入文本"maz"我无法做到.我只得到个人a或m或z.即使我可以将单元格放回可编辑模式,我也需要记住光标所在的位置.所以如果有人将asdf键入单元格并将光标放在d和f之间,然后单击m,我想要它说asdmf.
我不知道如何做到这一点.
我有一个想法..也许如果有一种方法可以注册鼠标在按钮上并且按下了点击,但不会失去对datagridview的关注,那么这将是一种可以完成的方式.我不知道怎么做,我对不同的方式感兴趣.
它足以制作一个不可选择的按钮,然后处理它的点击事件和发送密钥.这样,这些按钮可以像虚拟键盘键一样工作,并且焦点将保留在具有焦点的控件上,同时它将键发送到聚焦控件.
public class ExButton:Button
{
public ExButton()
{
SetStyle(ControlStyles.Selectable, false);
}
}
Run Code Online (Sandbox Code Playgroud)
然后处理点击事件并发送密钥:
private void exButton1_Click(object sender, EventArgs e)
{
SendKeys.SendWait("A");
}
Run Code Online (Sandbox Code Playgroud)
有没有办法
SetStyle
在Control
不使用继承的情况下调用它?
就在这里.创建此扩展方法:
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后在表单Load
事件中以这种方式使用它:
this.button1.SetStyle(ControlStyles.Selectable, false);
Run Code Online (Sandbox Code Playgroud)
然后button1将不可继承而不可选.
归档时间: |
|
查看次数: |
784 次 |
最近记录: |