2010-07-16 3 views
64

У меня есть форма с ComboBox, которая предоставляет выпадающий список. На comboBox SelectedIndexChanged event я запускаю некоторый код, но я не хочу, чтобы этот код запускался при загрузке формы. К сожалению, когда я загружаю форму (до того, как я сделаю выделение в поле со списком), SelectedIndexChanged сборов combobox (я думаю, когда поле со списком databinding). Есть ли способ избежать такого поведения?Остановить событие comboBox selectedIndexChanged от запуска при загрузке формы

+0

Не уверен, что на рабочем столе, но в .NET Compact, это событие действительно появляется огонь, прежде чем событие Form_Load, которое действительно проблематично - ничто в форме еще не настроено, когда этот код попадает. На CF решение, к сожалению, представляет собой переменную формы, которая устанавливается в конце загрузки, а затем обработчик события проверяет эту переменную перед ее запуском. – SqlRyan

ответ

120

Если вы хотите, чтобы реагировать только тогда, когда пользователь изменить выбранный элемент в поле со списком, то лучше, чтобы подписаться на SelectionChangeCommitted.

+6

Но что делать в случае автокомпет? –

+0

@ Arijit Mukherjee правый. При вводе значения в текстовое поле вместо прямого выбора. Это не вызовет событие SelectionChangeCommitted – thoitbk

+0

Черт, я довольно долго искал в Интернете, чтобы найти простое решение, подобное этому. Я использовал событие SelectionChanged, и он работал в VB.Net - WPF и теперь использовал его на C# - WinForms, и он не работает или, возможно, это только я. Благодаря! – Stephan

10

Вы можете просто отвязать событие SelectedIndexChanged, вызвать функцию fill и связать событие SelectedIndexChanged снова. К сожалению, это не работает с сеткой.

Например:

5

Почему бы не указать флаг boolean, который указывает, когда ваш Form закончил загрузку?

В вашем случае SelectionChanged, проверьте, есть ли флаг booleantrue. Если это true, тогда обработайте событие, иначе проигнорируйте его.

+2

booooooolean .. SelectionChangeCommitted намного приятнее – ppumkin

+2

Существует уже булевский флаг 'Control.Created', говорящий вам, что форма завершила загрузку, что также справедливо для форм. – user1734987

+0

'ToolStripComboBox' не имеет события' SelectionChangeCommitted'. Таким образом, этот метод должен будет сделать. Или, чтобы предотвратить условия гонки, используйте 'lock' и' Monitor.TryEnter'. – spoulson

5

Обязательно установите DataSource свойство в вашей onload() функции после назначения ValueMember и Datamember свойства.

Это поможет вам решить вашу проблему!

+1

Пожалуйста, добавьте больше информации, которая выработает ваше мышление. – Lenin

+0

@ Ranjith: Вы можете уточнить? –

1

VB

RemoveHandler lbxNomes.SelectedIndexChanged, AddressOf lbxNomes_SelectedIndexChanged 
lbxNomes.DataSource = dst 
Label1.Text = String.Format("Encontrados {0} Sócios nesta pesquisa", dst.Rows.Count) 
Label1.Visible = True 
AddHandler lbxNomes.SelectedIndexChanged, AddressOf lbxNomes_SelectedIndexChanged 
-1

Он работал для меня так со следующим кодом:

private void ddlChapter_SelectionChangeCommitted(object sender, EventArgs e) 
    { 
     if (ddlChapter.SelectedValue != null) 
     { 
      // Do something here 
     } 
    } 
+0

SelectionChangeCommitted перестанет ссылаться на элементы изменения индекса, после того как все элементы загружены в Dropbox, вы можете выбрать один за другим, это также увеличит скорость загрузки. –

Смежные вопросы