我有一个将Form2显示为模式表单的表单Form1。在Form2中,我对不同的值集执行各种编辑和删除操作,这些操作应该在关闭Form2之后反映在Form1中。所以我要做的是在关闭Form2之后执行RePopulateControls_in_Form1()。因为RePopulateControls_in_Form1()是一个很长进程,所以我只想在Form2中发生某些修改(编辑、添加、删除)时才执行该方法,而不是在Form2刚刚打开和关闭时执行。
这就是我在Form1中尝试做的事情
Form2 f = new Form2();
if (f.ShowDialog(this) == DialogResult.Something)
RePopulateControls_in_Form1()然后在Form2中,我做到了,
private void bntEdit()
{
//If Edit?
this.DialogResult = DialogResult.Something;
}
private void bntAdd()
{
//If Add?
this.DialogResult = DialogResult.Something;
}
private void bntDelete()
{
//If Delete?
this.DialogResult = DialogResult.Something;
}但我的问题是.Something。如果它不是.None,Form2就会被关闭。我不想让Form2自己简单地关闭它,除非用户关闭它。
如果我这样做:
//in Form1
private void Form1_Click()
{
Form2 f = new Form2();
if (f.ShowDialog(this) == DialogResult.None)
RePopulateControls_in_Form1()
}
//in Form2
private void Form2_SomeModification()
{
//If Modified?
this.DialogResult = DialogResult.None;
}RePopulateControls_in_Form1()未命中!
简而言之,在我的程序中,我如何才能告诉编译器仅当在Form2中修改值时才调用RePopulateControls_in_Form1()
注意:重新填充当然是必需的,因为控件是动态创建的,而且有点复杂(实际上在Form2中创建的是图形用户界面控件及其标签等)。
发布于 2011-07-30 13:48:45
在表单上设置DialogResult将隐藏表单并从ShowDialog返回。如果您希望延迟到用户执行其他操作(如关闭表单),则应该将该状态存储为成员字段,并在Form.Closing的处理程序中设置DialogResult。
此外,如果您确实希望关闭按钮按下时的模式表单,则可以使用Button.DialogResult属性而不是创建Button.Click处理程序。
发布于 2011-07-30 13:55:04
一种简单的方法可能是根本不使用DialogResult,而是使用一个不影响表单行为的专用属性。-然后你应该能够编写任何你想要的逻辑。
发布于 2011-07-30 13:50:41
我将使用Form2中的事件。在Form2关闭时触发该事件。在Form1中处理该事件将允许您执行任何想要的处理。此外,如果需要,您可以在事件的参数中从Form2向Form1传回一些信息。
另一种方法是设置一个全局静态变量--可能只是一个布尔值。然后,Form2可以根据是否进行了更改将其设置为true或false。当Form2返回时,Form1可以读取它,如果为真,则执行处理并将其设置回false。
https://stackoverflow.com/questions/6881321
复制相似问题