컨텍스트 : 내 폼 중 하나에 TreeView가 있습니다. 그 TreeView의 선택에 따라 저는 Pannel에 UserControl을로드합니다. 하나의 pannel은 읽기 전용이지만 다른 pannel에서는 사용자가 데이터베이스에 저장 한 데이터를 수정하거나 추가 할 수 있습니다. 사용자가 TreeView (BeforeSelect 이벤트)에서 새 선택을 시도하고 두 번째 컨트롤 (mod/add)에 있고 저장하지 않은 데이터가 있으면 새 컨트롤을로드하기 전에 저장할 것인지 묻습니다. 문제는 메시지 상자가 표시 될 때 이벤트가 포커스를 잃어서 루프 (약 20 회)에서 호출된다는 것입니다. 또한 아무런 영향을주지 않고 사용자가 messagebox를 클릭했는지에 상관없이 (예 또는 아니오로 새 컨트롤을로드하십시오).이벤트 핸들러에서 messagebox를 사용하는 방법
내 질문은 : 어쨌든 그가 사용자에게 이벤트 처리기에서 수행 할 작업을 묻는 메시지가 있습니까?
나는 내가 한 정도로 명확했다 희망, 미안 영어 첫 langage
/편집
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 만이 (가) 포함되지 않습니다 메시지 함
당신이 우리가 당신이 무슨 말을하는지 이해하는 데 도움이되는 몇 가지 예제 코드를 게시 할 수 그런 다음 자신의 저장() 메서드를 호출 할 수 있습니까? –
@JesseCarter 당신이 간다 –
어쩌면 당신은 당신이 원하는 효과를 얻기 위해 다른 이벤트를 조사해 볼 필요가 있습니다. 아마도 새 TreeViewItem을 선택하기 전에 _ctrlForm의 LoseFocus에 연결하십시오. –