Member 12896210 Ответов: 2

Событие срабатывает при щелчке мыши, но не при нажатии клавиш направления


Итак, у меня проблема с моим приложением. Чтобы объяснить, что происходит, я использую событие leave, чтобы показать MessageBox, когда действительный элемент не выбран из списка comboBox. В настоящее время он появляется, если я начинаю печатать, а затем пытаюсь выбрать элемент с помощью мыши, но не появляется, если я использую клавиши со стрелками. Например, где я ввожу "cen" и хочу выбрать "Camp Chicken Broth 10.5oz (17960)" из списка, если я использую клавиши направления, а затем нажимаю Enter, все в порядке, но если я использую мышь, тогда MessageBox (Оставьте Событие). Я также заметил, что он позволяет выбирать мышью после закрытия события MessageBox Leave. Выбор элемента после того, как пользователь закрывает MessageBox, довольно утомителен. Есть ли обходной путь для этого? Ниже приведена моя текущая функция выхода из события

Что я уже пробовал:

private void suggestComboBox1_Leave(object sender, EventArgs e)
      {
          ComboBox c_med = (ComboBox)sender;
          if (!suggestComboBox1.Items.Contains(c_med.Text))
          {
              MessageBox.Show("Not a valid Cari-med Item!");
          }
      }

Michael_Davies

Это выигрышные формы?

Немного озадачен как :

Клавиши направления обычно не оставляют элемент управления, поэтому не вызывают событие leave, клавиша Tab перемещается между элементами управления и запускает событие leave.

Щелчок элемента в выпадающем списке не покидает элемент управления, если только вы не сделаете это в событии click или selectionchanged.

Member 12896210

Да, это winforms. Если я попытаюсь выбрать значение из списка, то возникнет событие Leave. Но когда я его закрою,то смогу выбрать. Кажется, что каждый раз, когда я пытаюсь выбрать значение в списке, появляется событие Leave. Выбор принимается только тогда(то есть событие Leave не появляется), когда я закрываю событие Leave и повторяю попытку выбора

Michael_Davies

И вы не ловите selectionchanged или любое другое событие?

Просто добавил событие leave и протестировал одну из моих форм combobox, и она ведет себя так, как ожидалось.

Почему бы не использовать selectionchanged, поскольку он срабатывает, когда пользователь изменяет выбор (предостережение: также срабатывает для каждого элемента, когда вы добавляете их в элемент управления)

Member 12896210

Нет не я

Michael_Davies

Вы также проверяете, содержит ли combobox текст текущего выбранного элемента combobox, который, очевидно, является истинным, но возвращает false в моем тесте.

Просто попробовал сам, и он выскакивает в окне сообщений, хотя и содержит текст, в котором может быть ваша проблема.

2 Ответов

Рейтинг:
12

Member 12896210

Хорошо, я проследил свои шаги и все остальное и вспомнил, что изменил свой запрос, и с тех пор у меня началась эта проблема. Первоначально это была функция, которая заполняла comboBox выше значениями:


void fillCari()//fill Cari-med dropdown with values
   {
       try
       {

           string connectionString = "Data Source=CMDLAP126;Initial Catalog=Carimed_Inventory;User ID = sa; Password = 123456;";
           SqlConnection con2 = new SqlConnection(connectionString);
           con2.Open();
           string query = "SELECT DISTINCT Item_Description FROM dbo.Carimed";
           SqlCommand cmd2 = new SqlCommand(query, con2);

           SqlDataReader dr2 = cmd2.ExecuteReader();
           while (dr2.Read())
           {
               string cari_des = dr2.GetString(dr2.GetOrdinal("Item_Description"));
               suggestComboBox1.Items.Add(cari_des);
               suggestComboBox1.Text.Trim();
           }
           //con2.Close();
       }
       catch (Exception ex)
       {

           MessageBox.Show(ex.ToString());
       }



Это был вопрос:

string query = "SELECT DISTINCT Item_Description FROM dbo.Carimed";


Оказывается, это как-то связано с "DISTINCT". я не совсем уверен, почему удаление его и изменение на этот решило мою проблему:

string query = "SELECT Item_Description FROM dbo.Carimed";



Я понятия не имел, что мой вопрос был бы проблемой, поэтому я оставил его в своем вопросе. Спасибо всем, кто помог.


Рейтинг:
1

#realJSOP

Если вы хотите проверить комбо после того, как пользователь покинет его, зацепите событие LostFocus (или любое другое подходящее событие изменения фокуса для Winforms).

Конечно, комбо должно быть заполнено только "допустимыми" элементами, и разумное значение по умолчанию уже должно быть выбрано.


Member 12896210

У меня есть пользовательский файл suggestComboBox .cs, и мне интересно, является ли это причиной проблемы. в настоящее время он обрабатывает ключи.Вниз, Ключи.Вверх, Ключи.Enter, Keys. Escape мне интересно, может ли проблема быть в том, что я не справляюсь с щелчком мыши.

Michael_Davies

Когда я спросил, ловите ли вы какое-либо другое событие, вы ответили: "Нет".

Member 12896210

Наверное, я неправильно понял