将鼠标指针移动到选项卡按钮带您的位置 C#

Col*_*lin 5 c# winforms

这是我的第一篇文章,我尝试寻找解决方案,但无济于事。

我试图通过按下选项卡按钮来移动鼠标指针。IE。tab 选择下一个可选字段,我希望我的鼠标位于该可选字段上,以便鼠标通过点击 tab 在页面上移动。

否则,一种获取所选项目坐标并将其分配给鼠标的方法。

-更新信息被遗漏-

我的程序打开了另一个程序,我不确定如何引用该程序中出现问题的所选项目。

谢谢。

Lem*_*eed 4

将此事件处理程序添加到您的表单中:

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)