コンテキスト: フォームの 1 つに TreeView があります。その TreeView の選択に応じて、パネルに UserControl をロードします。一方のパネルは読み取り専用ですが、もう一方のパネルでは、データベースに保存したデータをユーザーが変更/追加できます。ユーザーが TreeView (イベント BeforeSelect) で新しい選択を行い、2 番目のコントロール (mod/add) にいて、保存されていないデータがある場合、新しいコントロールをロードする前に保存するかどうかを尋ねます。問題は、メッセージボックスが表示されると、イベントがちょっとフォーカスを失い、ループで呼び出されることです (約 20 回)。さらに、ユーザーがメッセージボックスをクリックしても(はい、保存するか、新しいコントロールをロードするだけです)、影響はありません。
だから私の質問は:イベントハンドラで何をしたいのかをユーザーに尋ねる方法はありますか?
私が十分に理解できていれば幸いです。申し訳ありませんが、英語は私の最初の言語ではありません
/編集
ここで、BeforeSelect および IsCtrlFormUnsave のコード
private void tv_BeforeSelect(object sender, TreeViewCancelEventArgs e)
{
if (IsCtrlFormUnsave())
{
e.Cancel = true;
//Invoke(new Action(AvertirUser)); //this is in case the save action didn't worked
}
}
private bool IsCtrlFormUnsave()
{
if (_ctrlForm != null && _ctrlForm.unsavedChange)
{
DialogResult dr = MessageBox.Show("Le formulaire présentement ouvert contient des données qui n'ont pas été sauvegardées. Voulez-vous les enregistrés avant de poursuivre?",
"Attention!", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
if (dr == DialogResult.Yes)
if (!_ctrlForm.Save())
return true;
_ctrlForm = null;
}
return false;
}
関数AvertirUserにはメッセージボックスのみが含まれていました