2011-06-18 40 views
0

我的問題似乎有點漫長,但我知道解決辦法是輕微的修正,我code.I我在我的表格1調用鼠標事件並給消息框提供輸入的問題!

pictureBox1_MouseDown, pictureBox1_MouseMove, pictureBox1_Paint實施的3個鼠標事件序列和油漆事件, pictureBox1_MouseUp。

代碼應該以這種方式工作:當我點擊鼠標並拖動它,並釋放按鈕在所需的位置,那麼應該出現一個自定義消息框,它將輸入values.so我構造了一個窗體(form2)作爲消息框。這裏是我的表單1的代碼,您可以在看到代碼後瞭解問題。

Form1中:

 private void pictureBox1_MouseDown(object sender, MouseEventArgs e) 
    { 
     // "e.X" and "e.Y" are used to get MousePositionX and MousePositionY 
     rect = new Rectangle(0, 0, e.X, e.Y); 
     pictureBox1.Invalidate(); 
    } 
    private void pictureBox1_MouseMove(object sender, MouseEventArgs e) 
    { 
     // This makes sure that the left mouse button is pressed. 
     if (e.Button == MouseButtons.Left) 
     { 
      // Draws the rectangle as the mouse moves 

      rect.Width = e.X; 
      rect.Height = e.Y; 
     } 
     pictureBox1.Invalidate(); 
    } 

    private void pictureBox1_Paint(object sender, PaintEventArgs e) 
    { 

     using (Pen pen = new Pen(Color.Red, 2)) 
     { 
      e.Graphics.DrawRectangle(pen, rect); 
     } 
    } 


    private WindowsFormsApplication2.Form2 _form2 = new WindowsFormsApplication2.Form2(); 

    private void pictureBox1_MouseUp(object sender, MouseEventArgs e) 
    { 
     DialogResult dialogresult = _form2.ShowDialog(this); 


     if (dialogresult == DialogResult.OK) 
     { 
      try 
      { 
       for (int i = 0; i < 2; i++) 
       { 
        l[i] = e.X; 
        m[i] = e.Y; 
       } 
      } 
      catch (Exception ex) 
      { 
      } 
     } 
    } 

在這裏的問題是:

1)根據當我們拖動出現一個矩形鼠標和我們離開鼠標按鈕顯示一個消息框的位置代碼,現在這個消息框(form2)無法讀取輸入值,因爲我不知道如何將form2的OK和CANCEl按鈕與form1連接起來。輸入輸入後,按下OK,矩形會消失,但這裏沒有發生。

2)我只需要給輸入只有兩次,即我執行前面的動作序列(所有的鼠標事件和繪圖事件)只有兩次,所以我寫FOR循環相應。但問題是消息box(form2)每次被觸發,我釋放鼠標按鈕。這是一個嚴重的問題,因爲我必須在給出兩個輸入後執行mousedoubleclick事件。

任何請給我說必要的更正,我必須作出。 在此先感謝。

+0

很難猜測這段代碼試圖做什麼。什麼是l []和m []?爲什麼在對話框顯示之前將它們分配到鼠標所在的位置?我懷疑你想用* rect *做些什麼。 –

+0

我想將鼠標指針的座標轉換爲l []和m [],並且不確定它們的聲明是否正確。我必須給兩次輸入,所以我的FOR循環運行了兩次,所以這些鼠標指針值將被存儲在這些數組中,以便進一步計算我必須做的! – raghu

回答

1

我不確定「連接form2的確定和取消按鈕與form1」是什麼意思?

你不必「連接」任何東西。所有你需要的是Form2(確定和取消)上的兩個按鈕,並且在每個_click方法中,您需要this.DialogResult = DialogResult.OK;(確定)和this.DialogResult = DialogResult.Cancel;(取消)。

然後你繼續你的「如果」表格1

private void pictureBox1_MouseUp(object sender, MouseEventArgs e) 
     { 
      DialogResult dialogresult = _form2.ShowDialog(this); 

      if (dialogresult == DialogResult.OK) 
      {     
       rect.Width = 0; 
       rect.Height = 0; 
       pictureBox1.Invalidate(); 
      } 
     } 

,將刪除矩形。我不知道這是否是一個很好的解決方案,但它的工作原理。

你的循環內的方法不能按你想要的方式工作:每次你呼叫pictureBox1_MouseUp並達到for循環'我'將被設置爲'0',然後循環開始。
您需要在Form1的構造函數中使用int TwoClicks = 0。而且你必須相應地改變pictureBox1_MouseUp

private void pictureBox1_MouseUp(object sender, MouseEventArgs e) 
     { 
      if (TwoClicks < 2) 
      { 
      TwoClicks++; 
      DialogResult dialogresult = _form2.ShowDialog(this); 

      if (dialogresult == DialogResult.OK) 
      {     
       rect.Width = 0; 
       rect.Height = 0; 
       pictureBox1.Invalidate(); 
      } 
      } 
     } 

隨意問任何問題(和描述你的第一個問題,如果我沒有得到它的權利)。

+0

非常感謝!你以正確的方式抓住了我的意圖!當我按下按鈕時,他們應按照您所說的方式工作,如果它確定必須採用給定的值,並且如果取消,則必須再次詢問輸入,但TwoClicks在該點不應遞增。 – raghu

+0

在給出兩個輸入後,當我雙擊圖片框然後矩形不應該出現,但它仍然出現。 – raghu

+0

@raghu:你必須用mousedown中的「if(TwoClicks <2)」(也可能是mousemove)來做同樣的伎倆。這應該工作。 – Zeus