2013-10-17 24 views
0

當我按下某個鍵(插入)時,我需要知道如何獲取鼠標位置。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,但我不知道如何使用它。

謝謝...對不起,如果我的英語不是很好......

回答

1

您可以使用表格的事件(您可以從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(谷歌有很多關於這方面的信息)。 –