0

フォーム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でそれぞれFlagClearTopとPoptoRootを介して行ったことですが、WM6.5でこれを行う方法について混乱しています。

4

1 に答える 1

1

これは難しいことではありませんが、ある程度の設計と計画が必要です。

文字列があり、[ OK ]と[キャンセル]のボタンを数回クリックすることをサポートする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では、フォームが閉じられたときにプロパティを設定できるように、フォームのClosedイベントハンドラーを接続する必要があります。FormAがその値を使用できるように、プロパティをにFormC_DialogResult設定します。FormC_DialogResultpublic

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

}

FormCOKボタンがクリックされると、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; }

}

ああ、そして代表団へようこそ!

于 2013-02-22T15:26:16.460 に答える