我有一个奇怪的问题......我有两种形式(Form1和Form2)。 Form1调用旧名称(字符串),用户在Form2中输入一个新名称(textbox1),返回到Form1。如果他们输入值或取消,一切正常......但是我想进行错误检查以确保他们输入值等等。错误检查工作正常,但在错误之后,当输入正确的值时,form2关闭但没有任何反应。 我输入了一些断点,Form1似乎持有using(form2 ...)语句,等待Form2完成,但在触发错误消息后,没有任何反应。 如果我删除... Form2 F2 = new Form2 ... Form2刚关闭并返回Fomr1。理想情况下,我希望保留在Form2上,直到输入值或用户取消。 我错过了什么?
// 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();
}
}
答案 0 :(得分: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);
}