假设我有表格 A、B 和 C。我通过以下方式从 frmB frmB B = new frmB(); B.show();
打开 frmB: 然后通过以下方式从 frmB 打开 frmC: frmC C = new frmC(); C.show();
我不关闭表格 A 和 B,以防万一用户需要返回这些表格并进行更改。但是如果用户完成了表单 C,我需要返回表单 A 并关闭表单 C 和 B。在 WM6.5 中如何执行此操作?这是我在 Android 和 iOS 中分别通过 Flag Clear Top 和 Pop to Root 所做的事情,但我对如何在 WM6.5 中执行此操作感到困惑。
问问题
731 次
1 回答
1
这并不难,但确实需要一些设计和规划。
首先查看具有字符串并支持单击OK和Cancel的几个按钮的FormC的基本版本:CustomMessage
public class FormC : Form {
public FormC() {
this.DialogResult = DialogResult.None;
}
private void Cancel_Clicked(object sender, EventArgs e) {
this.DialogResult = DialogResult.Cancel;
Close();
}
private void OK_Clicked(object sender, EventArgs e) {
this.DialogResult = DialogResult.OK;
Close();
}
public string CustomMessage { get; set; }
}
您需要设置FormCDialogResult
的属性!
现在,将注意力转向FormB。它比上面的要复杂一点,但它仍然应该是基本的和可以理解的。
在FormB中,您需要连接Form的 Closed 事件处理程序,以便FormC_DialogResult
在该表单关闭时设置属性。FormC_DialogResult
将该属性设置为,public
以便FormA可以使用它的值。
public class FormB : Form {
private FormC formC;
public FormB() {
this.DialogResult = DialogResult.None;
}
private void Cancel_Clicked(object sender, EventArgs e) {
this.DialogResult = DialogResult.Cancel;
Close();
}
private void OK_Clicked(object sender, EventArgs e) {
this.DialogResult = DialogResult.OK;
Close();
}
public string CustomMessage { get; set; }
public void FormC_Show() {
FormC_DialogResult = DialogResult.None;
formC = new FormC();
formC.Closed += new EventHandler(FormC_Closed);
formC.CustomMessage = "This is FormC. When it closes, " +
"it will call FormB's FormC_Closed event handler, " +
"which will set the FormC_DialogResult property.";
formC.Show();
}
private void FormC_Closed(object sender, EventArgs e) {
FormC_DialogResult = formC.DialogResult;
if (FormC_DialogResult == DialogResult.OK) {
this.DialogResult = DialogResult.OK;
Close();
}
}
public DialogResult FormC_DialogResult { get; set; }
}
请注意,当单击FormC的OK
按钮时,FormB获得相同的OK
Dialog Result 并且它也被关闭。
现在,从FormA,您可以控制其他两种形式。
public class FormA : Form {
private FormB formB;
public FormA() {
}
private void FormBShow_Clicked(object sender, EventArgs e) {
FormB_Show();
}
private void FormB_Show() {
FormB_DialogResult = DialogResult.None;
formB = new FormB();
formB.Closed += new EventHandler(FormB_Closed);
formB.CustomMessage = "This is FormB. When it closes, " +
"it will call FormA's FormB_Closed event handler, " +
"which will set the FormB_DialogResult property.";
formB.Show();
}
void FormB_Closed(object sender, EventArgs e) {
FormB_DialogResult = formB.DialogResult;
if (FormB_DialogResult == DialogResult.OK) {
if (formB.FormC_DialogResult == DialogResult.OK) {
// Update Form C information
}
// Update Form B information
}
}
private DialogResult FormB_DialogResult { get; set; }
}
哦,欢迎各位代表!
于 2013-02-22T15:26:16.460 回答