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,但我不知道如何使用它。
谢谢...对不起,如果我的英语不是很好......
答
您可以使用表格的事件(您可以从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();
}
}
我使用你的代码,但是当我点击按钮什么都没有发生时,只是隐藏窗体。 – user2888904
您必须使用Insert键并将光标位置设置在正确的位置。与我所做的位置检查值不同,使用区域将是一个好主意。此外,忘记启用“KeyPreview”属性来获取表单上的按键,修正了该问题。 –
@ user2888904哦,忽略了你隐藏了当前的表单。如果它隐藏,您将无法捕获键输入;我已经将它移动到Insert键并将光标放在正确的位置上。如果你真的需要截取你的应用程序外的按键,你将需要用全局键盘钩子来替换KeyPressed(谷歌有很多关于这方面的信息)。 –