C#如何按下按钮后单击按钮后,如何获得鼠标位置后?

问题描述:

当我按下某个键(插入)时,我需要知道如何获取鼠标位置。C#如何按下按钮后单击按钮后,如何获得鼠标位置后?

这是我要做的:

我有一个buuton一个Form1中,当您按下该按钮调用它的另一种形式。但在调用form2之前,我需要从外部应用程序获取鼠标位置。为此,用户必须将光标悬停在请求的位置上并按下“INSERT”。

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(); 
    } 
} 

我尝试使用按键和keydown,但我不知道如何使用它。

谢谢...对不起,如果我的英语不是很好......

您可以使用

System.Windows.Forms.Cursor.Position:“它代表在屏幕坐标当前光标所在位置”

注:请参考示例以了解它是如何工作的

您可以使用表格的事件(您可以从Designer中添加它以确保它是有线的支撑erly)

由于您不能等待button2_Click内部的按键事件,因此我使用私人字段来存储按钮已被按下的事实。现在,每次用户按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(); 
    } 
} 
+0

我使用你的代码,但是当我点击按钮什么都没有发生时,只是隐藏窗体。 – user2888904

+0

您必须使用Insert键并将光标位置设置在正确的位置。与我所做的位置检查值不同,使用区域将是一个好主意。此外,忘记启用“KeyPreview”属性来获取表单上的按键,修正了该问题。 –

+0

@ user2888904哦,忽略了你隐藏了当前的表单。如果它隐藏,您将无法捕获键输入;我已经将它移动到Insert键并将光标放在正确的位置上。如果你真的需要截取你的应用程序外的按键,你将需要用全局键盘钩子来替换KeyPressed(谷歌有很多关于这方面的信息)。 –