Контекст: У меня есть TreeView в одной из моих форм. В зависимости от выбора этого TreeView я загружаю UserControl в панель. Один pannel только для чтения, но в другой панели пользователь может модифицировать/добавлять данные, которые я сохраняю в базе данных. Если пользователь попытается сделать новый выбор в TreeView (событие BeforeSelect), и он находится во втором элементе управления (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 только containt сообщение
Вы можете разместить некоторые примеры кода, чтобы помочь нам понять, что вы говорите? –
@JesseCarter там вы идете –
Возможно, вам нужно рассмотреть возможность поиска в другом мероприятии, чтобы получить желаемый эффект. Возможно, вы подключаетесь к LoseFocus на _ctrlForm, прежде чем вы сможете даже выбрать новый элемент TreeViewItem. –