Nano Hash - криптовалюты, майнинг, программирование

Скрытие ошибки datagridviews

У меня есть форма окна с панелью слева, которая состоит исключительно из радиокнопок и элемента управления вкладками посередине с несколькими вкладками внутри него. Каждая из этих отдельных вкладок имеет ряд представлений сетки данных, которые отображаются и скрываются в зависимости от того, какой переключатель вы устанавливаете.

Я достигаю этого эффекта, назначая каждой радиокнопке слева событие CheckChanged, которое перебирает все элементы управления в tabpagecontrol.SelectedTab и вызывает .Show() в соответствующем представлении сетки данных и вызывает .Hide() на остальных, чтобы одновременно отображалось только одно представление сетки данных.

Моя проблема возникает, когда я пытаюсь программно проверить один из этих RadioButtons. Допустим, в методе X я пишу RadioButtonA.checked = true. Это запускает обычную обработку события CheckedChange, которая перебирает все представления сетки данных на выбранной в данный момент вкладке и вызывает .Hide() для всего, кроме одной формы представления сетки данных, которую должна вызывать радиокнопка, и вместо этого вызывает .Show(). Однако при одном из этих вызовов .Hide() в datagridview он в конечном итоге запускает событие RadioButtonA.CheckedChange СНОВА во второй раз. Когда я смотрю на аргумент отправителя, переданный функции, он показывает, что отправителем является RadioButton, на который я только что программно нажал.

Я добавляю эти datagridviews программно и могу подтвердить, что им не назначены никакие обработчики событий. Может ли кто-нибудь помочь мне определить, что вызывает это дополнительное событие? Спасибо.


Ответы:


1

Для неприятных событий изменения, которые просачиваются через другие обработчики событий в моих формах и нарушают их, я нашел единственное решение — добавить небольшое логическое значение:

bool radioIng;

void MyMethod() {
  radioIng = true;
  try {
    radioButton1.Checked = true;
    // etc.
  } finally {
    radioIng = false;
  }
}

void radioButton_EventHandler(object sender, EventArgs e) {
  if (radioIng) return;
  // rest of code here
}

ИЗМЕНИТЬ:

В качестве альтернативы вы можете просто удалить все свои обработчики событий и подключить их позже:

void MyMethod() {
  try {
    radioButton1.CheckChanged -= radioButton_EventHandler;
    radioButton2.CheckChanged -= radioButton_EventHandler;
    radioButton3.CheckChanged -= radioButton_EventHandler;
    // execute your code
    radioButton1.Checked = true;
  } finally {
    radioButton1.CheckedChanged += new EventHandler(radioButton_EventHandler);
    radioButton2.CheckedChanged += new EventHandler(radioButton_EventHandler);
    radioButton3.CheckedChanged += new EventHandler(radioButton_EventHandler);
  }
}

void radioButton_EventHandler(object sender, EventArgs e) {
  if (sender == radioButton1) {
    // code here to handle
  } else if (sender == radioButton2) {
    // code here to handle
  } else if (sender == radioButton3) {
    // code here to handle
  }
}
01.04.2011
  • Спасибо jp2code за ваше предложение, но кажется, что это лечит симптом, а не причину. Если возможно, я хотел бы решить основную проблему и прибегнуть к этому подходу в крайнем случае. Спасибо. 02.04.2011
  • Отредактировано с использованием более правильной техники, которая решает основную проблему. :) Решение Boolean столь же эффективно... и быстрее! 02.04.2011
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..