フォーム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でこれを行う方法について混乱しています。
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_DialogResult
public
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; }
}
ああ、そして代表団へようこそ!
于 2013-02-22T15:26:16.460 に答える