私はフォームを持っています。その中で、テキストとキャンセルボタンでダイアログを表示する必要があります(状況によっては)。私は自分のフォームでそのボタンのイベントをキャッチしたい、またはそのキャンセルボタンがクリックされたかどうかを知る。C#ダイアログのボタンを別のフォームでクリックする
どうすればいいですか?私はこれが可能であるべきだと考えていますが、どうやって作り出すことができないのですか
私のmainFormから、私はBackgroundWorkerを持っています。 backgroundWorkerが起動すると、(Labelとボタンで)childFormを開き、バックグラウンドタスクが終了したらchildFormを閉じます。私がもっと欲しいのは、childFormのボタンをクリックすると、backgroundWorkerの進行中のタスクをキャンセルする必要があるということです。 解決方法
私のchildFormでは、フォームのcancelBtnとしてCancelButtonプロパティを設定しました。パーソナルプラグインコードは:のMainFormで
private bool cancel;
public bool Cancel
{
get { return cancel; }
set { cancel = value; }
}
// Set the flag as true to indicate that Cancel button was actually pressed
private void cancelBtn_Click(object sender, EventArgs e)
{
Cancel = true;
}
:
childDlg = new ChildDialog();
// wHILE cALLING
backgroundWorker1.RunWorkerAsync();
msg = "Connecting...";
childDlg .set(msg, "");
if (!childDlg .IsAccessible)
{
// This is caught even when the dialog is closed
if (childDlg .ShowDialog() == DialogResult.Cancel) {
if (childDlg.Cancel == true) { // Was really cancelBtn pressed
// NOW ONLY do my stuff
}
}
}
Iは、親クラスに@DeveloperX技術、すなわちイベントハンドラを使用しようとしたが、親クラスのメソッドがnverと呼ばれていました。たくさん試しましたが、成功できませんでした。その後、@ RobinJのテクニックを試してみました。私は本当にキャンセルボタンが押されたか、jjst windwが正常に閉じられたかを特定するフラグを追加しなければなりませんでした。
私を助けるtryigのおかげで皆さんに感謝します。私は本当にあなたの助けに感謝します。あなたがダイアログとして表示し、ダイアログ操作の結果を形成する親に通信するDialogResult
プロパティを使用する必要があるフォーム上のShowDialog
方法を使用する必要があります
おかげ
実際には「Cance」ボタンをクリックする必要はありません。このダイアログは、メインフォームがアクティビティを実行するまで表示されます。アクティビティが終了している場合、ダイアログはメインで閉じる必要があります。ユーザーがキャンセルをクリックすると、メインフォームで他のコードを実行する必要があります。これは厳密なシナリオです。 – Tvd