Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как сделать, чтобы выбрав в ComboBox, например, "выбор 1" переменной А присваивалось

57K
16 июня 2010 года
test777
8 / / 15.06.2010
Есть ComboBox. В свойствах заданы строчки для выбора:

выбор 1
выбор 2
выбор 3

Как сделать, чтобы выбрав в ComboBox, например, "выбор 1" переменной А присваивалось значение 1.

Это надо делать так:
 
Код:
if combobox1.text="выбор 1" then a=1

или есть более грамотный способ?

Visual Basic 2008

Спасибо!
6
16 июня 2010 года
George
4.1K / / 05.01.2007
Да нормальный, в принципе, способ.
55K
16 июня 2010 года
فضولي
14 / / 15.06.2010
Не следует забывыть, что все элементы в ComboBox являются массивом и индексация элементов начинается с 0. Другими словами, если ты выбираешь первый элемент в списке - его индекс будет равен 0.

Присваивание значения переменной в данном случае происходит так:

 
Код:
Dim a As Integer
'Используется следующая событийная процедура
Private Sub ComboBox1_SelectedValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedValueChanged
a = ComboBox1.SelectedIndex
End Sub


Таким образом мы получаем индекс любого элемента даже не зная его текстового значения и не используя оператор условного перехода. А главное изменяем значение переменной сразу после изменения значения в ComboBox`е.
55K
16 июня 2010 года
فضولي
14 / / 15.06.2010
Цитата: George
Да нормальный, в принципе, способ.



Да не очень

6
16 июня 2010 года
George
4.1K / / 05.01.2007
[QUOTE=فضولي;325689]Не следует забывыть, что все элементы в ComboBox являются массивом и индексация элементов начинается с 0. Другими словами, если ты выбираешь первый элемент в списке - его индекс будет равен 0.

Присваивание значения переменной в данном случае происходит так:

 
Код:
Dim a As Integer
'Используется следующая событийная процедура
Private Sub ComboBox1_SelectedValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedValueChanged
a = ComboBox1.SelectedIndex
End Sub


Таким образом мы получаем индекс любого элемента даже не зная его текстового значения и не используя оператор условного перехода. А главное изменяем значение переменной сразу после изменения значения в ComboBox`е.[/QUOTE]
По моему автор не просил привязки к индексу, а лишь к тексту. ПОэтому вернее будет что-то вроде:
 
Код:
select case Combobox1.Text
  case 'Выбор1'
    a = 1
  case '100500'
    a = 2
...
end select


Можно еще извернуться следующим способом:
1. Сделать в комбобоксе два столбца
2. Размеры столбцов поставить - что то вроде 0; 100 чтобы первый не было видно.
3. При инициализации данных в комбобоксе предусмотреть, чтобы в первом столбце были значения, которые будет принимать переменная, а во втором строки типа "выбор Х".
4. В событии прописать:
 
Код:
a = ComboBox1.Column(1)

Вроде так, хотя это ВБАшный вариант, не факт что прокатит в ВС2008. :)
55K
16 июня 2010 года
فضولي
14 / / 15.06.2010
А итемы в ComboBox'е уже сами по себе привязаны к индексу. Ну а если обязательно без нуля, то к индексу можно прибавить единичку. Кстати автор вопроса не сказал будут ли итемы добавляться в процессе выполнения программы.
242
16 июня 2010 года
Оlga
2.2K / / 04.02.2006
В любом случае надо использовать событие выбора, а там, при помощи индекса можно выбрать подходящий текст. не нужен здесь никакой if для выборки и case тоже.
более того, чтобы с этим вопросом разобраться и форум не нужен.
6
16 июня 2010 года
George
4.1K / / 05.01.2007
При чем тут индекс, если человек хочет плясать в зависимости от текста, а не от индекса? Ведь не было речи, что элементы списка будут отсортированы. Поэтому либо иф, либо кейс, либо вышепредложенный [COLOR="Silver"]изврат[/COLOR] вариант
5
16 июня 2010 года
hardcase
4.5K / / 09.08.2005
В .NET можно вообще дата-байндингом воспользоваться. И никаких событий обрабатывать не нужно будет.


Позже. Хм. было замечально, если бы автор рассказал поподробнее, как он будет использовать переменную сию.
242
16 июня 2010 года
Оlga
2.2K / / 04.02.2006
Цитата: George
При чем тут индекс, если человек хочет плясать в зависимости от текста, а не от индекса? Ведь не было речи, что элементы списка будут отсортированы. Поэтому либо иф, либо кейс, либо вышепредложенный [COLOR=Silver]изврат[/COLOR] вариант


Ну он же написал, если выбрали первую строку, т.е. "выбор 1", то надо сохранить 1 .... ты прав в одном, ему не текст нужен, а именно порядковый номер выбора (я не обратила на это внимание, зато заметила, сколько тупых тем уже наплодил...), т.е. индекс. конечно, если речь что сохранение значение от содержания строки и нет гарантии отсортировки, то ты прав, но не думаю, что все так страшно )

242
16 июня 2010 года
Оlga
2.2K / / 04.02.2006
Цитата: George
При чем тут индекс, если человек хочет плясать в зависимости от текста, а не от индекса? Ведь не было речи, что элементы списка будут отсортированы. Поэтому либо иф, либо кейс, либо вышепредложенный [COLOR=Silver]изврат[/COLOR] вариант


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

6
16 июня 2010 года
George
4.1K / / 05.01.2007
Оль, я извратом назвал то, что я предложил делать через два столбца в комбобоксе. А так в целом, все же мой код более соответствует задаче, но это не значит, что задачу можно изменить во избежание извращенского кода. :)
2 ХК: вряд ли чувак .НЕТ пользует.
5
16 июня 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: test777

Как сделать, чтобы выбрав в ComboBox, например, "выбор 1" переменной А присваивалось значение 1.

Это надо делать так:
 
Код:
if combobox1.text="выбор 1" then a=1
или есть более грамотный способ?

[COLOR=Red] Visual Basic 2008[/COLOR]

Спасибо!



Цитата: George

2 ХК: вряд ли чувак .НЕТ пользует.



[COLOR=Red]Как бы[/COLOR] намекает нам на .NET 3.5....

6
16 июня 2010 года
George
4.1K / / 05.01.2007
Цитата: hardcase
[COLOR=Red]Как бы[/COLOR] намекает нам на .NET 3.5....


ааа, ну наверное да. просто я ж не знаю, есть там чистый вб али нету. :)
тады ж чувак не там тему создал, а? ;)

57K
16 июня 2010 года
test777
8 / / 15.06.2010
Перед созданием новых тем, обязательно их буду присылать Вам, Ветеран Олга, в личку, Вы же супер эксперт по тупым темам. ;)
57K
16 июня 2010 года
test777
8 / / 15.06.2010
Место значение 1, 2, 3 могут быть любые числа, например:

выбор 1 - 5125
выбор 2 - 985
выбор 3 - 15

Как сделать так, чтобы при выборе "выбор 2", переменная а была равна 985, при выборе "выбор 3" - 15 итд.
5
16 июня 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: test777
Место значение 1, 2, 3 могут быть любые числа, например:

выбор 1 - 5125
выбор 2 - 985
выбор 3 - 15

Как сделать так, чтобы при выборе "выбор 2", переменная а была равна 985, при выборе "выбор 3" - 15 итд.


На форме один единственный ComboBox1.
Свойства DisplayMember = "Name", ValueMember = "Value".
Код формы:

Код:
Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim options() As OptionItem = { _
            New OptionItem("Option 1", 10), _
            New OptionItem("Option 2", 20), _
            New OptionItem("Option 3", 30)}
        ComboBox1.DataSource = options
    End Sub

    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
        Text = ComboBox1.SelectedValue.ToString()
    End Sub

End Class


Public Class OptionItem

    Sub New(ByVal name As String, ByVal value As Integer)
        _name = name
        _value = value
    End Sub

    Private _name As String

    Public Property Name() As String
        Get
            Return _name
        End Get
        Set(ByVal value As String)
            _name = value
        End Set
    End Property

    Private _value As Integer

    Public Property Value() As Integer
        Get
            Return _value
        End Get
        Set(ByVal value As Integer)
            _value = value
        End Set
    End Property

End Class
PS Можно пойти дальше, без обработки события SelectedIndexChanged, так как ComboBox1.SelectedValue содержит выбранное значение Value текущего OptionItem-а (SelectedItem). Используя привязку данных это значение можно направить куда-либо еще.
5
16 июня 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: hardcase
Можно пойти дальше, без обработки события SelectedIndexChanged, так как ComboBox1.SelectedValue содержит выбранное значение Value текущего OptionItem-а (SelectedItem). Используя привязку данных это значение можно направить куда-либо еще.



Без обработки события, только код формы:

Код:
Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim options() As OptionItem = { _
            New OptionItem("Option 1", 10), _
            New OptionItem("Option 2", 20), _
            New OptionItem("Option 3", 30)}
        ComboBox1.DataSource = options
        Me.DataBindings.Add(New Binding("OptionValue", ComboBox1, "SelectedValue"))
    End Sub

    Private _optionValue As Integer

    Property OptionValue() As Integer
        Get
            Return _optionValue
        End Get
        Set(ByVal value As Integer)
            _optionValue = value
            Text = value.ToString() REM для отображения изменения
        End Set
    End Property

End Class
1
16 июня 2010 года
kot_
7.3K / / 20.01.2000
Цитата: test777
Перед созданием новых тем, обязательно их буду присылать Вам, Ветеран Олга, в личку, Вы же супер эксперт по тупым темам. ;)


как бы не мешало бы.
Я думаю что еще одно подобное сообщение - и тем вам на форуме вообще не получится создавать.

242
19 июня 2010 года
Оlga
2.2K / / 04.02.2006
Цитата: test777
Перед созданием новых тем, обязательно их буду присылать Вам, Ветеран Олга, в личку, Вы же супер эксперт по тупым темам. ;)


конечно, шлите, как говорят *бумага все выдержит* :D

а темы ваши тупые, т.к. достаточно открыть мануалы и самому почитать, а затем только можно идти на форум и интересоваться разве что тем, не как сделать, а можно ли сделать лучше.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог