我想在某些事件上按Shift + Tab,我为此目的使用System.Windows.Forms.SendKeys.Send
但它无法正常工作,我尝试了以下方法来调用该函数。
System.Windows.Forms.Application.DoEvents();
SendKeys.Send("{+(Tab)}");
System.Windows.Forms.Application.DoEvents();
SendKeys.Send("+{Tab}");
System.Windows.Forms.Application.DoEvents();
SendKeys.Send("{+}{Tab}");
System.Windows.Forms.Application.DoEvents();
SendKeys.Send("+{Tab 1}");
有人能告诉我什么是正确的方法吗?
答案 0 :(得分:2)
正确的语法是:
SendKeys.Send("+{Tab}");
根据您的评论,您试图按Shift+Tab
来控制字段之间的循环,请注意,这可以更加可靠地完成,而无需模拟密钥。这避免了例如另一个窗口具有焦点的问题。
<击> 以下方法将模拟Shift_Tab的行为,以相反的顺序循环切换制表位:
void EmulateShiftTab()
{
// get all form elements that can be focused
var tabcontrols = this.Controls.Cast<Control>()
.Where(a => a.CanFocus)
.OrderBy(a => a.TabIndex);
// get the last control before the current focused element
var lastcontrol =
tabcontrols
.TakeWhile(a => !a.Focused)
.LastOrDefault(a => a.TabStop);
// if no control or the first control on the page is focused,
// select the last control on the page
if (lastcontrol == null)
lastcontrol = tabcontrols.LastOrDefault();
// change focus to the proper control
if (lastcontrol != null)
lastcontrol.Focus();
}
击> <击> 撞击>
修改强>
删除的文本将以相反的顺序循环控制(模拟shift + Tab),但使用内置的Form.SelectNextControl
方法可以更好地完成此操作。以下方法将模拟Shift_Tab的行为,以相反的顺序循环切换制表符。
void EmulateShiftTab()
{
this.SelectNextControl(
ActiveControl,
forward: false,
tabStopOnly:true,
nested: true,
wrap:true);
}
答案 1 :(得分:0)
它不执行任何操作或将输入发送到您不想编辑的控件中吗?检查是否首先调用此代码,并且不要忘记在SendKeys之前手动关注目标控件,以确保它将收到您的密钥。