2016-04-15 56 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