c# - 单击winforms(C#)中的按钮后,如何将“SendKeys”发送到最后一个活动输入文本框?
问题描述
单击winforms(C#)中的按钮后如何进入SendKeys
最后一个活动输入?TextBox
我是 C# 新手,我正在尝试使用屏幕键盘创建一个 winforms 应用程序,并且我有多个文本框。
我已经搜索并尝试了我找到的指南,这是迄今为止有效的示例。
当我将光标聚焦在我的 winforms 应用程序外部(记事本等)时,下面的代码正在工作,但是当我单击我TextBox
在 winforms 应用程序中创建的然后单击按钮到SendKeys
时TextBox
,光标正在被删除并且焦点位于按钮上我点击了,这使得TextBox
注意力不集中。
const uint WS_EX_NOACTIVATE = 0x08000000;
const uint WS_EX_TOPMOST = 0x00000008;
protected override CreateParams CreateParams
{
get
{
CreateParams param = base.CreateParams;
param.ExStyle |= (int)(WS_EX_NOACTIVATE | WS_EX_TOPMOST);
return param;
}
}
private void btnA_Click(object sender, EventArgs e)
{
SendKeys.Send("A");
}
TextBox
当我单击按钮到SendKeys
?时,如何将光标焦点返回到最后一个活动状态TextBox
。
解决方案
称呼
_recentTextbox.Select();
在你做你的sendkeys之前。还有另一种方法可以类似地工作(Focus()
),但主要用于创建自定义控件的人
如果您有许多文本框并且您需要知道最近哪个文本框失去了焦点到您的按钮,请将相同的 Leave(或 LostFocus)事件处理程序附加到所有文本框:
private void Leave(object sender, EventArgs e){
_recentTextbox = (TextBox)sender; //_recentTextbox is a class wide TextBox variable
}
private void btnA_Click(object sender, EventArgs e)
{
if(_recentTextbox == null)
return;
_recentTextbox.Select();
SendKeys.Send("A");
_recentTextbox = null; //will be set again when a textbox loses focus
}
推荐阅读
- java - 如何从命令行合并两个dex文件
- unity3d - Unity3d中的灯光问题
- pytorch - 训练 opennmt 时出错 - 找不到 caffe2_detectron_ops.dll
- python - 将数据框列与列表中的一个因子相乘,该因子是基于另一列选择的
- python - 使用 AutoDesk API 时出现 401(未经授权)错误
- java - 为什么在junit断言中具有相同字段的两个Spark数据帧模式不相等?
- mysql - 如何获得新的。在 MySQL 触发器/插入后动态值?
- cassandra - Cassandra cqlsh 连接和通过复制命令插入数据?
- ember.js - 在 MacOS 上安装 Ember.js
- android - 当应用程序进入后台时片段销毁