每当两个单选按钮都未选中时,我想重新加载当前表单(不是主表单)。我做到了这一点,但它没有工作。
StreamWriter sw;
using (sw = File.CreateText(path))
{
if (OnewayRadio.Checked == true)
{
sw.WriteLine("One Way Ticket");
}
else if (RoundRadio.Checked == true)
{
sw.WriteLine("Round Trip");
}
else
{
MessageBox.Show("You have not selected your type of trip!", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
sw.Close();
File.Delete(path);
sw = File.CreateText(path);
}
sw.WriteLine("Name: " + name.Text);
sw.WriteLine("Number: " + number.Text);
}
答案 0 :(得分:0)
通常的做法是使用ShowDialog
当表单中的代码完成执行时,它将设置公开DialogResult
然后,来电者可以阅读DialogResult
并采取任何必要的行动。
在您的情况下,您可以为此特定实例设置DialogResult
至Retry
。然后,开启者可以运行循环并在ShowDialog() == DialogResult.Retry
Form2 testDialog = new Form2();
// Show testDialog as a modal dialog and determine if DialogResult = OK.
while (testDialog.ShowDialog() == DialogResult. Retry)
{
testDialog.Dispose();
testDialog = null;
testDialog = new Form2();
}
答案 1 :(得分:0)
这里的答案假设重新打开的表单是模态的。并非总是如此。在将表单设为非模式而不是模式时遇到了这个问题。
使用.Hide()代替.Close()。
像这样将Hide放置在FormClosing()事件中,
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
Hide();
e.Cancel = true;
}
以这种方式“关闭”表单后,对Show()的下一次调用将没有问题。
对于我来说,关闭表单后必须执行一些操作。如果您通常以Modal状态打开,则关闭窗体后,ShowDialog()将返回,就像这样
{
// ..
form1.ShowDialog();
OperationsAfterClose(form1);
// ..
}
非模式调用形式。Show()将立即返回。因此,像我的OperationsAfterClose()这样的任何结尾都将立即被调用。
我使用委托来移动动作,如下所示,
public delegate void OnFormHide(FrmMapFerryAnalysisSpec2 f);
public partial class Form1 : Form
{
public OnFormHide OnForm1Hide = null;
// ..
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (OnForm1Hide!=null) OnForm1Hide (this); // call the delegate
Hide();
e.Cancel = true;
}
// ..
}
在调用表单中,我现在可以将OperationsAfterClose()作为委托传递,
{
// ..
form1.Show();
form1.OnForm1Hide = OperationsAfterClose; // set the delegate
// ..
}
注意:
为了安全地使用它,form1句柄应该存在并且不能多次创建!
在大多数应用程序中,该表单也只能打开一次。为此,最简单的方法是在调用表单中引入一个IsOpenForm1布尔值。