ComboBox не теряет фокус - PullRequest
       32

ComboBox не теряет фокус

4 голосов
/ 02 августа 2009

У меня были проблемы с элементом управления ComboBox. Я не специалист по GUI, но я знаю, что эта проблема связана с фокусом элемента управления.

По какой-то причине ComboBox не теряет фокус, когда я щелкаю за его пределами. Скажем, например:

  1. Я нажимаю на ComboBox, чтобы перечислить его элементы.
  2. Я выбираю один предмет. Это закрывает ComboBox.
  3. Я нажимаю на второй ComboBox, первый остается сфокусированным.

OR

  1. Нажмите на поле со списком (содержит точку, твердое тело и каркас).
  2. Нажмите на форму. Нажмите P, S или W. См. Выбор изменить.

Обратите внимание, что ComboBox имеет только DropDownStyle , установленный на ComboBoxStyle.DropDownList . Это означает, что это стандартное поведение ComboBox. Я думал, что поведение по умолчанию было то, что ComboBox потерял бы свой фокус, когда вы щелкнули по нему, или на другом элементе управления (кнопка или ComboBox). Это не тот случай, почему?

UPDATE: Мне нужно что-то вроде ActiveComponent = null. Поведение должно быть таким же, как в Visual Studio, если вы выбрали Отладка или Выпуск (ComboBox) на стандартной панели инструментов. В настоящее время, если я нажимаю за пределами ComboBox, он все еще сосредоточен.

Ответы [ 13 ]

0 голосов
/ 15 января 2015

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

если для CauseViolation задано значение false, проблема не решается, и привязка данных перестает работать.

Когда вы возражаете против SelectedItem для свойства, как это

combobox.DataBindings.Add("SelectedItem", someObject, "MySelectedItemProperty", false, DataSourceUpdateMode.OnPropertyChanged)

combobox вызывает метод Equals для объекта, который вы используете в списке, назначенном вашему DataSource. В моем случае мне нужно было переписать метод Equals в этом объекте. По какой-то глупой причине combobox вызывает этот метод и передает System.DBNull перед фактической передачей нужного типа объекта для сравнения. В этом случае в моем случае произошло нарушение, из-за которого нарушение не сработало, поэтому курсор не освобождается из выпадающего списка. Также странным было то, что программа не остановилась, когда в моем методе Equals было вызвано Exception.

Как только я добавил этот код

 if (obj.GetType() != this.GetType())
       return false;

по моему методу Equals все работало нормально. Надеюсь, это кому-нибудь поможет.

0 голосов
/ 08 августа 2014

Словарь, который combobox принимает значения, имеет: индекс типа, значение типа, индекс типа должен быть того же типа в праве вашего класса, привязанном к списку. Если типы были разными, выпадающий список никогда не потеряет фокус.

0 голосов
/ 29 июня 2010

В ***form.Designer.vb у вас есть код для каждого выпадающего списка, например:

'OrgDetailsIDComboBox
'
Me.OrgDetailsIDComboBox.DataBindings.Add(New System.Windows.Forms.Binding("Text", Me.MedicoLegalBindingSource, "OrgDetailsID", True))
Me.OrgDetailsIDComboBox.DataBindings.Add(New System.Windows.Forms.Binding("SelectedValue", Me.MedicoLegalBindingSource, "OrgDetailsID", True))
Me.OrgDetailsIDComboBox.DataSource = Me.OrgBindingSource
Me.OrgDetailsIDComboBox.DisplayMember = "Place"

Я исправил проблему, закомментировав первую строку кода (включая строку Forms.Binding("Text", ). Поэтому, похоже, требуется только оператор для SelectedValue.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...