0

我有一个奇怪的问题......我有两个表格(Form1 和 Form2)。Form1 使用旧名称(字符串)调用,用户在 Form2 中输入新名称(textbox1),该名称返回给 Form1。如果他们输入一个值或取消,一切都会正常工作......但是我想进行错误检查以确保他们输入一个值等等。错误检查工作正常,但在错误之后,当输入正确的值时,form2 关闭但没有任何反应。我设置了一些断点,Form1 似乎保留了 using(form2 ...) 语句,等待 Form2 完成,但在触发错误消息后,什么也没有发生。如果我删除 ... Form2 F2 = new Form2 ... Form2 将关闭并返回到 Formr1。理想情况下,我想留在 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();
    }
}
4

1 回答 1

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);
}
于 2016-04-15T00:19:24.753 回答