2011-07-07 142 views
-2

我正在實現一個彈出式窗口,它接受輸入。所以它包含一個OK按鈕(提交按鈕),也取消按鈕。所以,當我按下確定按鈕時,它將採取輸入值,如果我按取消按鈕它不應該採取輸入,但應該使價值減少1.我會明確解釋你爲什麼如此。這裏是彈出窗體的代碼。設置POPUP窗口的取消按鈕!

public partial class PopUp : Form { 

    public PopUp() 
    { 
     InitializeComponent(); 
    } 

    private void OK_Click(object sender, EventArgs e) 
    { 
     ((Scrollbar.Form1)this.Owner).OK_Click(textBox1.Text,textBox2.Text,textBox3.Text,textBox4.Text); 
     this.Close(); 
    } 

    private void Cancel_Click(object sender, EventArgs e) 
    { 

     ((Scrollbar.Form1)this.Owner).Cancel_Click(); 
     this.Close(); 
    } 
} 

和我的主窗體中的OK_click和cancel_click函數。

public void OK_Click(string tbox1, string tbox2, string tbox3, string tbox4) 
{ 
    g[b] = Int32.Parse(tbox1); 
    h[b] = Int32.Parse(tbox2); 
    i[b] = Int32.Parse(tbox3); 
    j[b] = Int32.Parse(tbox4); 
    b++; 
} 

public void Cancel_Click() 
{ 

} 


Form ChildForm = null; 
private void pictureBox1_MouseUp(object sender, MouseEventArgs e) 
{ 
    if (a < 2) 
    { 
     ChildForm = new PopUp(); 
     ChildForm.ShowDialog(this); 
     l[a] = e.X; 
     m[a] = e.Y; 
     a++; 
    } 

} 

MouseUp事件應該只發生兩次,每次我按下OK按鈕的「A」增量值的一個,所以當我按下取消按鈕,即使「一」遞增一,在這種情況下,我只能輸入一次值,所以當我按下取消按鈕時,'a'的值應該減1。請提出我的方式,即使點擊取消按鈕後,我如何才能實現鼠標移動事件兩次。

+0

您的格式是壞 –

+0

雅我同意,請再次閱讀問題!我做了一些改動 – raghu

+1

你的改變並不明顯。你的格式不好。 –

回答

0

你的彈出窗口是從窗體派生的,就像我看到的那樣。該simpliest solutionto防止形式從收盤取消單擊第一次做別的東西,如果我的理解對不對你的問題,是重寫窗體的OnClosing事件,像這樣:

protected override void OnClosing(CancelEventArgs e) 
    { 
     // some decisional logic here 
     if(..condition...) 
      e.Cancel =true; //this will prevent the form from closing 
     base.OnClosing(e); 
    } 

不要發明雙事件或somethign儘可能地儘可能多的,因爲這是第一次傳遞混亂。

使用您使用框架的「自然」可能性。我想你需要重新安排一點你的代碼來支持這個。

如果這不是你要求的,請更好地解釋。 此致敬禮。

+0

對不起,我提出了一個打字錯誤,它改變了它的完整含義,請再次檢查這個問題 – raghu

+0

「即使點擊取消按鈕後,我怎麼才能實現鼠標移動事件兩次」,我認爲解決方案已經是可寫的了。在OnClosing覆蓋中處理這些東西。 – Tigran

1

您正在實現彈出對話框全部錯誤。基地Form對象具有DialogResult屬性。您應該使用它來確定您的MainForm中的邏輯。

首先,MyPopup:

// Set properties on your buttons either in VS Designer or programmatically 
this.button1.DialogResult = System.Windows.Forms.DialogResult.OK; 
// other properties 

this.button2.DialogResult = System.Windows.Forms.DialogResult.Cancel; 
// other properties 

然後,在你的MainForm:

// Display popup expecting a DialogResult.OK or DialogResult.Cancel 
void ShowPopup () 
{ 
    MyPopup popup = new MyPopup (); 

    if (popup.ShowDialog() == DialogResult.OK) 
    { 
     // process popup textbox text values 
    } 
    else 
    { 
     // process popup cancel action 
    } 
} 
相關問題