首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Windows Mobile 6.5中关闭剩余/其他窗体(标志清除顶部/弹出到根目录)

在Windows Mobile 6.5中关闭剩余/其他窗体(标志清除顶部/弹出到根目录)
EN

Stack Overflow用户
提问于 2013-02-22 12:48:20
回答 1查看 731关注 0票数 0

假设我有表单A、B和C。我从frmA by:frmB B = new frmB(); B.show();打开frmB,然后从frmB by:frmC C = new frmC(); C.show();打开frmC。我没有关闭表单A和B,只是为了防止用户需要返回到这些表单并更改某些内容。但是如果用户完成了表单C,我需要返回到表单A并关闭表单C和B。我如何在WM6.5中做到这一点?这是我在安卓和iOS中分别通过Flag Clear Top和Pop to Root做的事情,但我对如何在WM6.5中做到这一点感到困惑。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-22 23:26:16

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

首先来看一下FormC的基本版本,它有一个CustomMessage字符串,并支持单击OKCancel的几次按钮

代码语言:javascript
复制
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中,您需要连接窗体的closed事件处理程序,以便在窗体关闭时设置FormC_DialogResult属性。将FormC_DialogResult属性设置为public,以便FormA可以使用它的值。

代码语言:javascript
复制
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控制其他两个表单。

代码语言:javascript
复制
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; }

}

哦,欢迎各位代表!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15017043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档