关闭Windows Mobile 6.5中的剩余/其他表单(标记清除顶部/弹出到根目录)

时间:2013-02-22 04:48:20

标签: c# compact-framework windows-mobile-6.5

假设我有表格A,B和C.我从frmA打开frmB:frmB B = new frmB(); B.show();  然后从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中这样做感到困惑。

1 个答案:

答案 0 :(得分:1)

这并不难,但确实需要一些设计和规划。

首先查看具有CustomMessage字符串的 FormC 的基本版本,并支持点击几次按钮确定取消< /强>:

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; }

}

您需要设置 FormC DialogResult属性!

现在,请将注意力转移到 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对话框结果,并且它也会关闭。

现在,从 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; }

}

哦,欢迎代表们参加!