这是我的第一篇文章,我尝试寻找解决方案,但无济于事。
我试图通过按下选项卡按钮来移动鼠标指针。IE。tab 选择下一个可选字段,我希望我的鼠标位于该可选字段上,以便鼠标通过点击 tab 在页面上移动。
否则,一种获取所选项目坐标并将其分配给鼠标的方法。
-更新信息被遗漏-
我的程序打开了另一个程序,我不确定如何引用该程序中出现问题的所选项目。
谢谢。
将此事件处理程序添加到您的表单中:
private void control_Enter(object sender, EventArgs e)
{
if (sender is Control)
{
var control = (Control)sender;
Cursor.Position = control.PointToScreen(new Point()
{
X = control.Width / 2,
Y = control.Height / 2
});
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以订阅多个控件,您需要将光标“移动”到这些控件的中心,例如:
button1.Enter += control_Enter;
Run Code Online (Sandbox Code Playgroud)
或者您可以使用设计器中的属性网格进行分配。
这种方法有一个警告,即如果用户用鼠标单击控件,光标也会居中。这对您来说可能是也可能不是理想的行为,具体取决于您的应用程序。
根据问题的新要求进行更新:
由于您可能无权修改相关表单的源代码,因此您可以将对正在显示的表单的引用传递给函数:
void SubscribeControlsOnEnter(Form form)
{
foreach (Control control in form.Controls)
{
control.Enter += control_Enter;
}
}
Run Code Online (Sandbox Code Playgroud)
或类似的,它可以迭代表单上包含的控件。如果您的表单具有嵌套在容器中的控件,则您将需要使用递归,但仍然可以使用此模式。
对于嵌套方法,订阅控件的函数可能如下所示(请记住,Form派生自Control):
void SubscribeNestedControlsOnEnter(Control container)
{
foreach (Control control in container.Controls)
{
if (control.Controls.Count > 0)
{
SubscribeNestedControlsOnEnter(control);
}
else control.Enter += control_Enter;
}
}
Run Code Online (Sandbox Code Playgroud)
这样当显示您的表单时,您可以通过以下方式调用:
Form1 form = new Form1();
SubscribeNestedControlsOnEnter(form);
form.Show();
Run Code Online (Sandbox Code Playgroud)