2016-04-15 40 views
0

我有一個奇怪的問題...我有兩種形式(Form1 & Form2)。 Form1調用具有舊名稱(字符串)和用戶在Form2中輸入一個新名稱(textbox1)返回到Form1。一切工作正常,如果他們輸入一個值或取消...但是我想要進行錯誤檢查,以確保他們輸入一個值等等。錯誤檢查工作正常,但錯誤後,當輸入正確的值時,form2關閉,但沒有任何反應。 我放了一些斷點和Form1似乎堅持使用(form2 ...)語句,等待Form2完成,但發射錯誤消息後,沒有任何反應。 如果我刪除... Form2 F2 =新的Form2 ... Form2剛剛關閉並返回到Fomr1。理想情況下,我想留在Form2上,直到輸入值或用戶取消。 我錯過了什麼?C#DialogResult錯誤檢查

// Form1 
using(Form2 F5 = new Form2(SelNm)) 
{ 
    if(F5.ShowDialog()== DialogResult.OK) 
    { 
     //Do stuff 
    } 
} 

// Form2 
public string newName { get; set; } 
public string oldName { get; set; } 

public Form2(string oldNm) 
{ 
    InitializeComponent(); 
    oldName = oldNm;  
} 

private void btnOK_Click(object sender, EventArgs e) 
{ 
    if (textbox1.Text.Length > 0) 
    { 
     newName = textbox1.Text; 
     DialogResult = DialogResult.OK; 
     Close(); 
    } 
    else 
    { 
     MessageBox.Show("ERROR: Must enter a new name."); 
     DialogResult = DialogResult.Cancel; 
     Form2 f2 = new Form2(oldName); 
     f2.Show(); 
     Close(); 
    } 
} 

回答

2

原因是您在顯示錯誤對話框後調用了新的Form2。這不是Form1正在等待的Form2的實例。而不是調用一個新的Form2,爲什麼不重新使用當前的Form2?

取而代之的是:

MessageBox.Show("ERROR: Must enter a new name."); 
    DialogResult = DialogResult.Cancel; 
    Form2 f2 = new Form2(oldName); 
    f2.Show(); 
    Close(); 

爲什麼不呢?

MessageBox.Show("ERROR: Must enter a new name."); 
    // Do not close the form so the user can 
    // input again 

更新:

至於建議的意見..

private void textbox1_TextChanged(object sender, RoutedEventArgs e) 
{ 
    btnOK.Enabled = !string.IsNullOrWhiteSpace(textbox1.Text); 
} 
+0

此外,我想有一個檢查禁用OK按鈕,如果文本是無效的。此檢查進入文本框的TextChanged處理程序,以及表單的顯示處理程序。 – smead

+0

這將是一個更好的方法,這是最常見的網頁。 @ ArtR45注意到這一點。 –

+0

謝謝...我通常只是有消息框...但是當我第一次設置這個時,我使用屬性'DialogResult'而不是手動設置它。在任何情況下,現在工作很好。再次感謝。快速的問題,我喜歡你的'禁用OK按鈕的想法',你能提供一個代碼片段嗎?我試圖在加載表單時使其'false',然後在textbox1_TextChanged事件中'true'...但沒有任何反應。 – ArtR45