Сообщество программистов Autodesk в СНГ

ADN Club => Inventor API => Тема начата: R.I.Chernov от 14-03-2017, 08:47:28

Название: Проблема с Combobox.
Отправлено: R.I.Chernov от 14-03-2017, 08:47:28
Доброго времени суток, уважаемые форумчане. Ищу вашей помощи в решении нижеописанного вопроса:
Честно говоря, даже не знаю, как лаконично сформулировать проблему. У меня есть параметр в модели в мм. В форме у меня есть комбобокс, куда я передаю значение этого параметра. Текущее значение параметра в модели 100мм. В комбобокс я добавляю значения 100, 200, 300. Суть проблемы в том, что если я сначала заполняю комбобокс значениями (100, 200, 300), а потом передаю параметр 100, то все работает корректно. Но если сначала передать параметр 100мм, а потом заполнить значения (100, 200, 300), то возникает ошибка в методе Combobox.SelectedItem.ToString(). Никак не могу разобраться, с чем это связано. Буду благодарен за любой совет / идею.
П.С. Быть может это важно, в последнием случае начение Combobox.SelectedIndex = -1. Как я понимаю, это означает, что программа считает, что значение комбобокса не соответствует ни 1 из значений списка, который я создал.
Название: Re: Проблема с Combobox.
Отправлено: mikazakov от 14-03-2017, 09:08:25
Combobox.SelectedIndex = -1
Ну наверное фреймворк считает, что ничего в комбобоксе не выделено.
И что значит "передать параметр" в комбобокс?

По всей видимости нужно сделать так после заполнения списка комбобокса:

Код - C# [Выбрать]
  1. Combobox.SelectedItem=100;


Название: Re: Проблема с Combobox.
Отправлено: R.I.Chernov от 14-03-2017, 09:49:54
И что значит "передать параметр" в комбобокс?
Код - C# [Выбрать]
  1. Combobox.Text=100;
Название: Re: Проблема с Combobox.
Отправлено: R.I.Chernov от 14-03-2017, 10:05:07
Ну наверное фреймворк считает, что ничего в комбобоксе не выделено.
Это да, получается, что я как бы "руками" ввел значение, а не из списка выбрал. Вроде как все логично. Но таксже у меня не работает строка вида:
Код - C# [Выбрать]
  1. double tmp_dbl = Convert.ToDouble(Combobox.Text.ToString());

У меня собственно отсюда возникли все проблемы, я попытался видоизменить код, отчего пришел к Combobox.SelectedItem.ToString(). Нет идей, отчего могла возникать ошибка? Условия все те же. Если сначала задаешь допустимые значения комбобокса а потом присваиваешь  Combobox.Text, то все корректно. Но если сначала ввести текст, то возникает ошибка, при конвертации в дабл.
Название: Re: Проблема с Combobox.
Отправлено: Александр Ривилис от 14-03-2017, 10:06:11
П.С. Быть может это важно, в последнием случае начение Combobox.SelectedIndex = -1. Как я понимаю, это означает, что программа считает, что значение комбобокса не соответствует ни 1 из значений списка, который я создал.
Именно так. Почитай описание: https://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.text(v=vs.110).aspx
Название: Re: Проблема с Combobox.
Отправлено: R.I.Chernov от 14-03-2017, 10:12:29
Именно так. Почитай описание:
Спасибо, Александр. Я читал. Мне не понятно вот что:
Setting the Text property to null or an empty string ("") sets the SelectedIndex to -1. ... Setting the Text property to a value that is not in the collection leaves the SelectedIndex unchanged.

То есть, если значение Combobox.Text равно пустой строке или "null", индекс становится -1. Если задаешь это значение равным тому, чего нет в коллекции, то индекс остается неизменным. Почему тогда у меня индекс -1? Или он такой по умолчанию? И остается таким же, когда  "лапками" ввожу значение?
Название: Re: Проблема с Combobox.
Отправлено: Александр Ривилис от 14-03-2017, 10:22:09
Или он такой по умолчанию?
Думаю что именно так, пока список пустой.
Название: Re: Проблема с Combobox.
Отправлено: R.I.Chernov от 14-03-2017, 10:25:46
В общем, если подытожить, то чтобы не было проблем с комбобоксом, надо сначала заполнять коллекцию его значений, и лишь потом передавать значение параметру Combobox.Text. И несмотря на то, что по факту значение, взятое из детали 100,0000000001, программа воспринимает его как 100 (которое есть в списке значений) и меняет Combobox.SelectedIndex на соответствующее значение. Всем спасибо за помощь!
Название: Re: Проблема с Combobox.
Отправлено: R.I.Chernov от 14-03-2017, 10:27:41
Раз уж обсуждаем комбобоксы, не могли бы вы подсказать, как снять фокус со значение, которое пользователь выбирает из списка? Ну имею ввиду, что вот выбрал он какое-то значение,и оно теперь подсвечивается. Как сделать так, чтобы кликом, например, по пустому месту форму, снялось это выделение?
Название: Re: Проблема с Combobox.
Отправлено: Александр Ривилис от 14-03-2017, 13:21:25
Раз уж обсуждаем комбобоксы, не могли бы вы подсказать, как снять фокус со значение, которое пользователь выбирает из списка? Ну имею ввиду, что вот выбрал он какое-то значение,и оно теперь подсвечивается. Как сделать так, чтобы кликом, например, по пустому месту форму, снялось это выделение?
https://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.selectedindex(v=vs.110).aspx
Цитировать
To deselect the currently selected item, set the SelectedIndex to -1. You cannot set the SelectedIndex of a ComboBox item to -1 if the item is a data-bound item.
Название: Re: Проблема с Combobox.
Отправлено: R.I.Chernov от 14-03-2017, 13:26:07
Спасибо, но мне кажется что свойство SelectedIndex это не совсем то, что я ищу.
Название: Re: Проблема с Combobox.
Отправлено: Александр Ривилис от 14-03-2017, 14:28:15
Спасибо, но мне кажется что свойство SelectedIndex это не совсем то, что я ищу.
А мне кажется, что именно то. Ты же спрашиваешь как снять выделение с выбранного элемента в списке. А тебе "английским по белому" в документации сказано, что нужно установить SelectedIndex в -1.