2013-05-11 1 views
1

Я новичок в C# и, кажется, следующий ниже код не похож, чтобы выбрать мое COMBOBOX значения:C# значение выпадающего программируемой выбора

private void button1_Click(object sender, EventArgs e) 
{ 

    cbPortNumber.SelectedValue = 3; 

или

cbPortNumber.setValue("3"); 

или

cbPortNumber.SelectedIndex = cbPortNumber.FindString("3"); 

или

cbPortNumber.SelectedIndex = cbPortNumber.Items.IndexOf(cbPortNumber.Items.FindByValue("HDMI 4")); 

} 

Раскрывающиеся выглядит следующим образом: enter image description here

Все выше код не кажется, чтобы выбрать HDMI 4 в списке ... Я не имею никаких ошибок, но я также не имею его выбирает.

Любая помощь будет замечательной!

обновление показывает выпадающий enter image description here

UPDATE 2

// 
    // cbPortNumber 
    // 
    this.cbPortNumber.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Append; 
    this.cbPortNumber.Enabled = false; 
    this.cbPortNumber.FormattingEnabled = true; 
    this.cbPortNumber.Location = new System.Drawing.Point(174, 40); 
    this.cbPortNumber.Name = "cbPortNumber"; 
    this.cbPortNumber.Size = new System.Drawing.Size(133, 21); 
    this.cbPortNumber.TabIndex = 11; 
    this.cbPortNumber.Text = "global_hdmi_port"; 
    this.helpPortNumber.SetToolTip(this.cbPortNumber, "The HDMI port number, to which you connected your USB-CEC adapter."); 
    this.cbPortNumber.SelectedIndexChanged += new System.EventHandler(this.cbPortNumber_SelectedIndexChanged); 

#region Global settings 
public CECSettingByte HDMIPort 
{ 
    get 
    { 
    if (!_settings.ContainsKey(KeyHDMIPort)) 
    { 
     CECSettingByte setting = new CECSettingByte(KeyHDMIPort, "HDMI port", 1, _changedHandler) { LowerLimit = 1, UpperLimit = 15, EnableSetting = EnableHDMIPortSetting }; 
     setting.Format += delegate(object sender, ListControlConvertEventArgs args) 
     { 
     ushort tmp; 
     if (ushort.TryParse((string)args.Value, out tmp)) 
      args.Value = "HDMI " + args.Value; 
     }; 

     Load(setting); 
     _settings[KeyHDMIPort] = setting; 
    } 
    return _settings[KeyHDMIPort].AsSettingByte; 
    } 
} 

Update 3

И это то, что срабатывает действие после выбора что-то в этом выпадающем меню:

private void OnSettingChanged(CECSetting setting, object oldValue, object newValue) 
{ 
    if (setting.KeyName == CECSettings.KeyHDMIPort) 
    { 
    CECSettingByte byteSetting = setting as CECSettingByte; 
    if (byteSetting != null) 
    { 
     if (!Settings.OverridePhysicalAddress.Value) 
     Config.HDMIPort = byteSetting.Value; 
     CECActions.SetConnectedDevice(Settings.ConnectedDevice.Value, byteSetting.Value); 
    } 
    } 
+0

WPF или Win Forms? – Venson

+0

@ Venson Win Forms – StealthRT

ответ

1

Так что этот код работает отлично для меня:

private void button1_Click(object sender, EventArgs e) 
{ 
    comboBox1.SelectedIndex = 2; 
} 

вы не можете получить доступ к ItemSource, если нет предметов для доступа. Простой способ заключается в Init элементов над Desinger

enter image description here

(Сори для нелокализованностью IDE), чем вы можете установить SelectedIndex собственности на индекс, который выходит. Другой способ - добавить все элементы HDMI с функцией Combobox1.Items.Add.

Если вы когда-либо использовали формы в VB ... его все тот же

public Form1() 
{ 
    InitializeComponent(); 

    var hdmi = "HDMI"; 

    for (int i = 1; i < 15; i++) 
    { 
     comboBox1.Items.Add(hdmi + i); 
    } 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    if (comboBox1.Items.Count >= 2) 
     comboBox1.SelectedIndex = 2; 
} 
+0

Добавление контрольных точек в начале обработчиков событий покажет вам, когда/когда они запускаются. – Adrian

+0

Используя ваш код, я получаю следующее: ** System.ArgumentOutOfRangeException: InvalidArgument = Значение «2» недопустимо для «SelectedIndex». Имя параметра: SelectedIndex в System.Windows.Forms.ComboBox.set_SelectedIndex (значение Int32) ** – StealthRT

+0

убедитесь, что вы смешали правое поле со списком! установить точку останова на задание и посмотреть, что внутри ItemSouce – Venson