C#如果按下插入键,在单击按钮后如何获取鼠标位置?

C#如果按下插入键,在单击按钮后如何获取鼠标位置?,c#,keypress,C#,Keypress,我需要知道如何获得鼠标位置时,我按下一个键(插入) 这就是我想做的: 我有一个有一个buuton的form1,当你按下那个按钮时,它会调用另一个form。但是在调用form2之前,我需要从外部应用程序获取鼠标位置。为此,用户必须将光标悬停在请求的位置上,然后按“插入” public partial class _CalibrateGeneralStep2 : Form { public _CalibrateGeneralStep2() { InitializeCo

我需要知道如何获得鼠标位置时,我按下一个键(插入)

这就是我想做的:

我有一个有一个buuton的form1,当你按下那个按钮时,它会调用另一个form。但是在调用form2之前,我需要从外部应用程序获取鼠标位置。为此,用户必须将光标悬停在请求的位置上,然后按“插入”

public partial class _CalibrateGeneralStep2 : Form
{
    public _CalibrateGeneralStep2()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Application.Restart();
    }

    private void button2_Click(object sender, EventArgs e)
    {
        this.Hide();      

        ///// HERE I NEED TO WAIT UNTIL USER PRESS 'INSERT' KEY BEFORE CALL  _CalibrateGeneralStep3 /////   

        _CalibrateGeneralStep3 frm = new _CalibrateGeneralStep3();
        frm.Show();
    }
}
我试着用按键和按键,但我不知道如何使用它

谢谢。。。对不起,如果我的英语不好…

你可以用

:“它表示屏幕坐标中的当前光标位置”

注意:请参考示例了解其工作原理

您可以使用

:“它表示屏幕坐标中的当前光标位置”

注意:请参考示例了解其工作原理

您可以使用

:“它表示屏幕坐标中的当前光标位置”

注意:请参考示例了解其工作原理

您可以使用

:“它表示屏幕坐标中的当前光标位置”


注意:请参考示例了解其工作原理

您可以使用表单的
按键事件(您可以从设计器中添加它,以确保其连接正确)

由于您不能在按钮2_单击中等待按键事件,因此我使用了一个私有字段来存储按钮已被按下的事实。现在,每次用户按Insert时,您都会检查按钮是否已按下以及光标位置。如果两者都正确,则生成新表单

我已经用类顶部的2个常量定义了所需的光标位置,您还应该根据您的业务上下文为“hasButton2BeenClicked”选择一个更好的名称

public partial class _CalibrateGeneralStep2 : Form
{
    private const int NEEDED_X_POSITION = 0;
    private const int NEEDED_Y_POSITION = 0;

    private bool hasButton2BeenClicked = false;

    public _CalibrateGeneralStep2()
    {
        InitializeComponent();
        KeyPreview = true;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Application.Restart();
    }

    private void button2_Click(object sender, EventArgs e)
    {      
        hasButton2BeenClicked = true;  
    }

    private void OnKeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Insert && IsCursorAtTheCorrectPosition() && hasButton2BeenClicked)
        {
            GoToNextStep();
        }
    }

    private bool IsCursorAtTheCorrectPosition()
    {
        return Cursor.Position.X == NEEDED_X_POSITION && Cursor.Position.Y == NEEDED_Y_POSITION;
    }

    private void GoToNextStep()
    {
        this.Hide();
        new _CalibrateGeneralStep3().Show();
    }
}

您可以使用表单的
KeyDown
事件(您可以从设计器中添加它,以确保它已正确连接)

由于您不能在按钮2_单击中等待按键事件,因此我使用了一个私有字段来存储按钮已被按下的事实。现在,每次用户按Insert时,您都会检查按钮是否已按下以及光标位置。如果两者都正确,则生成新表单

我已经用类顶部的2个常量定义了所需的光标位置,您还应该根据您的业务上下文为“hasButton2BeenClicked”选择一个更好的名称

public partial class _CalibrateGeneralStep2 : Form
{
    private const int NEEDED_X_POSITION = 0;
    private const int NEEDED_Y_POSITION = 0;

    private bool hasButton2BeenClicked = false;

    public _CalibrateGeneralStep2()
    {
        InitializeComponent();
        KeyPreview = true;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Application.Restart();
    }

    private void button2_Click(object sender, EventArgs e)
    {      
        hasButton2BeenClicked = true;  
    }

    private void OnKeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Insert && IsCursorAtTheCorrectPosition() && hasButton2BeenClicked)
        {
            GoToNextStep();
        }
    }

    private bool IsCursorAtTheCorrectPosition()
    {
        return Cursor.Position.X == NEEDED_X_POSITION && Cursor.Position.Y == NEEDED_Y_POSITION;
    }

    private void GoToNextStep()
    {
        this.Hide();
        new _CalibrateGeneralStep3().Show();
    }
}

您可以使用表单的
KeyDown
事件(您可以从设计器中添加它,以确保它已正确连接)

由于您不能在按钮2_单击中等待按键事件,因此我使用了一个私有字段来存储按钮已被按下的事实。现在,每次用户按Insert时,您都会检查按钮是否已按下以及光标位置。如果两者都正确,则生成新表单

我已经用类顶部的2个常量定义了所需的光标位置,您还应该根据您的业务上下文为“hasButton2BeenClicked”选择一个更好的名称

public partial class _CalibrateGeneralStep2 : Form
{
    private const int NEEDED_X_POSITION = 0;
    private const int NEEDED_Y_POSITION = 0;

    private bool hasButton2BeenClicked = false;

    public _CalibrateGeneralStep2()
    {
        InitializeComponent();
        KeyPreview = true;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Application.Restart();
    }

    private void button2_Click(object sender, EventArgs e)
    {      
        hasButton2BeenClicked = true;  
    }

    private void OnKeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Insert && IsCursorAtTheCorrectPosition() && hasButton2BeenClicked)
        {
            GoToNextStep();
        }
    }

    private bool IsCursorAtTheCorrectPosition()
    {
        return Cursor.Position.X == NEEDED_X_POSITION && Cursor.Position.Y == NEEDED_Y_POSITION;
    }

    private void GoToNextStep()
    {
        this.Hide();
        new _CalibrateGeneralStep3().Show();
    }
}

您可以使用表单的
KeyDown
事件(您可以从设计器中添加它,以确保它已正确连接)

由于您不能在按钮2_单击中等待按键事件,因此我使用了一个私有字段来存储按钮已被按下的事实。现在,每次用户按Insert时,您都会检查按钮是否已按下以及光标位置。如果两者都正确,则生成新表单

我已经用类顶部的2个常量定义了所需的光标位置,您还应该根据您的业务上下文为“hasButton2BeenClicked”选择一个更好的名称

public partial class _CalibrateGeneralStep2 : Form
{
    private const int NEEDED_X_POSITION = 0;
    private const int NEEDED_Y_POSITION = 0;

    private bool hasButton2BeenClicked = false;

    public _CalibrateGeneralStep2()
    {
        InitializeComponent();
        KeyPreview = true;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Application.Restart();
    }

    private void button2_Click(object sender, EventArgs e)
    {      
        hasButton2BeenClicked = true;  
    }

    private void OnKeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Insert && IsCursorAtTheCorrectPosition() && hasButton2BeenClicked)
        {
            GoToNextStep();
        }
    }

    private bool IsCursorAtTheCorrectPosition()
    {
        return Cursor.Position.X == NEEDED_X_POSITION && Cursor.Position.Y == NEEDED_Y_POSITION;
    }

    private void GoToNextStep()
    {
        this.Hide();
        new _CalibrateGeneralStep3().Show();
    }
}


我使用您的代码,但当我单击按钮时,什么也没有发生,只需隐藏表单。您必须使用插入键并将光标位置设置在正确的位置。与我所做的位置检查的平面值不同,使用区域将是一个好主意。另外,忘记启用“KeyPreview”属性来获取表单上的按键,修复了这个问题。@user2888904哦,你隐藏了当前表单。如果密钥输入被隐藏,您将无法捕获它;我将其移动到插入键之后,光标位于正确的位置。如果你真的需要在你的应用程序之外拦截按键,你需要用一个全局键盘挂钩(谷歌有很多关于这个的信息)来替换按键。这很有帮助,但它没有起作用,当我按下按钮,然后按下insert key nothing时happens@user2888904进入调试模式,看看发生了什么,这里的行为还可以。注意事项:您的活动是否正确连接?表单是否有焦点(如果不是这样,则需要键盘挂钩)?光标是否位于正确的位置?是否启用了KeyPreview?我使用您的代码,但当我单击按钮时,什么也没有发生,只需隐藏表单。您必须使用Insert键,并将光标位置设置在正确的位置。与我所做的位置检查的平面值不同,使用区域将是一个好主意。另外,忘记启用“KeyPreview”属性来获取表单上的按键,修复了这个问题。@user2888904哦,你隐藏了当前表单。如果密钥输入被隐藏,您将无法捕获它;我将其移动到插入键之后,光标位于正确的位置。如果你真的需要在你的应用程序之外拦截按键,你需要用一个全局键盘挂钩(谷歌有很多关于这个的信息)来替换按键。这很有帮助,但它没有起作用,当我按下按钮,然后按下insert key nothing时happens@user2888904进入调试模式,看看发生了什么,这里的行为还可以。注意事项:您的活动是否正确连接?表单是否有焦点(如果没有,则需要键盘挂钩)