首页 > 解决方案 > 单击winforms(C#)中的按钮后,如何将“SendKeys”发送到最后一个活动输入文本框?

问题描述

单击winforms(C#)中的按钮后如何进入SendKeys最后一个活动输入?TextBox我是 C# 新手,我正在尝试使用屏幕键盘创建一个 winforms 应用程序,并且我有多个文本框。

我已经搜索并尝试了我找到的指南,这是迄今为止有效的示例。

当我将光标聚焦在我的 winforms 应用程序外部(记事本等)时,下面的代码正在工作,但是当我单击我TextBox在 winforms 应用程序中创建的然后单击按钮到SendKeysTextBox,光标正在被删除并且焦点位于按钮上我点击了,这使得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

标签: c#winformskeyboard

解决方案


称呼

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

推荐阅读