У меня есть ListView. При нажатии на элемент панель обновляется с данными выбранного элемента.
Каждый элемент имеет значение свойства 1 или 2.
Я хочу, чтобы вкладка TabControl выбиралась на панели после значения 1 или 2.

Панель имеет событие Leave.
Это позволяет автоматически сохранять данные перед отображением следующего элемента ListView, по которому щелкнули мышью.
Когда элементы ListView с последовательным щелчком имеют одно и то же свойство (1 или 2), TabControl остается неизменным.

Проблема возникает, когда TabControl необходимо изменить (с 1 на 2 или наоборот).

Событие `Leave` срабатывает, даже если указатель мыши не наведен на панель. Это приводит к неожиданному сохранению элемента ListView сразу после щелчка по нему во время отображения, с побочными эффектами и (я сильно подозреваю) потерей данных.
Моей первоначальной идеей было предотвратить возникновение события «Покинуть» панели во время обновления панели.
DonneesPanel.Leave -= DonneesPanel_Leave;
затем, после отображения:
DonneesPanel.Leave += DonneesPanel_Leave;
Это не работает. Не понимаю почему, тем более:
DonneesPanel.Enter -= DonneesPanel_Enter;
DonneesPanel.Enter += DonneesPanel_Enter;
работает!
Обзор: всякий раз, когда TabControl необходимо изменить, запускается событие _Leave панели. Форма, которая в данный момент загружается, сохраняется, и я не могу это предотвратить.
При щелчке по элементу ListView я могу обновить все в панели, включая TabControl.
Это только, когда свойства выбранного элемента требуют изменения вкладки TabControl, после отображения запускается событие выхода из панели.
Это то, чего я хочу избежать.
/>Я не использую специальный элемент управления. TabControl, ListView и Panel — из Windows Forms.
Спасибо за вашу помощь.
Изменить: Stackoverflow просит меня включить код в мой вопрос, иначе на него не будет ответа. Не понимаю почему, но вот код, который не научит вас ничему большему, чем то, что я уже объяснил.
private void ArticlesListView_SelectedIndexChanged(object sender, EventArgs e)
{
//DonneesPanel.Leave -= DonneesPanel_Leave; // Works here, but it is impossible to resubscribe programmatically throughout the entire procedure, without triggering the _Leave event of donneesPanel.
int Cle = int.Parse(ArticlesListView.SelectedItems[0].Tag.ToString());
Display_Article(Cle);
}
private void Display_Article(int ClePrimaire)
{
DonneesPanel.Leave -= DonneesPanel_Leave; // doesn't work here
Console.WriteLine("Displaying other data");
if (ArticleRow["Vendu"].ToString() == "1")
{
VenduCheck.Checked = true;
VenduLabel.Text = "VENDU";
VenduLabel.ForeColor = Color.DarkCyan;
VenduLabel.Font = fBold;
DateSortie.Visible = true;
ElemCommerceTab.SelectedTab = ElemCommerceTab.TabPages[0]; //
Подробнее здесь: https://stackoverflow.com/questions/798 ... s-not-work
Мобильная версия