Получаване на избрана стойност на падащ списък

public class ComboboxItem { 
            public string Text { get; set; } 
            public string Value { get; set; }
            public override string ToString() { return Text; } 
        }

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            int selectedIndex = comboBox1.SelectedIndex;
            int selecteVal = (int)comboBox1.SelectedValue; 
            ComboboxItem selectedCar = (ComboboxItem)comboBox1.SelectedItem;
            MessageBox.Show(String.Format("Index: [{0}] CarName={1}; Value={2}", selectedIndex, selectedCar.Text, selecteVal));
        }

Добавям ги така:

ComboboxItem item = new ComboboxItem();
                    item.Text = cd.Name;
                    item.Value = cd.ID;
                    this.comboBox1.Items.Add(item);

Продължавам да получавам NullReferenceExeption и не знам защо. текстът изглежда изглежда добре.


person maxy    schedule 01.08.2011    source източник


Отговори (7)


Опитайте тази:

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    ComboBox cmb = (ComboBox)sender;
    int selectedIndex = cmb.SelectedIndex;
    int selectedValue = (int)cmb.SelectedValue;

    ComboboxItem selectedCar = (ComboboxItem)cmb.SelectedItem;
    MessageBox.Show(String.Format("Index: [{0}] CarName={1}; Value={2}", selectedIndex, selectedCar.Text, selecteVal));        
}
person James Hill    schedule 01.08.2011
comment
Мисля, че класът ComboBoxItem е наличен само в WPF проекти. - person T30; 24.11.2014
comment
OP го обявиха в публикацията си. Изненадан съм, че няма такъв в пространството на имената System.Windows.Forms...или съм пропуснал нещо? - person AS7K; 01.04.2019

Получавате NullReferenceExeption, защото използвате cmb.SelectedValue, което е нула. comboBox не знае каква е стойността на вашия персонализиран клас ComboboxItem, така че направете или:

ComboboxItem selectedCar = (ComboboxItem)comboBox2.SelectedItem;
int selecteVal = Convert.ToInt32(selectedCar.Value);

Или по-добре е да използвате обвързване на данни като:

ComboboxItem item1 = new ComboboxItem();
item1.Text = "test";
item1.Value = "123";

ComboboxItem item2 = new ComboboxItem();
item2.Text = "test2";
item2.Value = "456";

List<ComboboxItem> items = new List<ComboboxItem> { item1, item2 };

this.comboBox1.DisplayMember = "Text";
this.comboBox1.ValueMember = "Value";
this.comboBox1.DataSource = items;
person Jalal Said    schedule 01.08.2011
comment
Няма ли все пак да използвате comboBox.SelectedValue за персонализиран елемент, без да използвате dataSource? напр. ако използвате източник на данни, не можете да премахнете или добавите елемент към падащия списък Елементи. - person user3532232; 09.05.2016

Имах подобна грешка, Моят клас е

public class ServerInfo
{
    public string Text { get; set; }
    public string Value { get; set; }
    public string PortNo { get; set; }

    public override string ToString()
    {
        return Text;
    }
}

Но това, което направих, прехвърлих моя клас към свойството SelectedItem на ComboBox. И така, ще имам всички свойства на класа на избрания елемент.

// Code above
ServerInfo emailServer = (ServerInfo)cbServerName.SelectedItem;

mailClient.ServerName = emailServer.Value;
mailClient.ServerPort = emailServer.PortNo;

Надявам се това да помогне на някого! наздраве!

person Jason Cidras    schedule 13.02.2014

Опитайте тази:

private void cmbLineColor_SelectedIndexChanged(object sender, EventArgs e)
    {
        DataRowView drv = (DataRowView)cmbLineColor.SelectedItem;
        int selectedValue = (int)drv.Row.ItemArray[1];
    }
person Vikas4u    schedule 19.05.2015

Проблемът, който имате с SelectedValue, не е преобразуването в цяло число. Това е основният проблем, така че използването на следния кодов фрагмент ще ви помогне:

int selectedValue;
bool parseOK = Int32.TryParse(cmb.SelectedValue.ToString(), out selectedValue);
person Tariq Nawaz Khan    schedule 28.07.2016

Опитайте тази:

int selectedIndex = comboBox1.SelectedIndex;
comboBox1.SelectedItem.ToString();
int selectedValue = (int)comboBox1.Items[selectedIndex];
person Hakan Murat Aksüt    schedule 10.11.2018
comment
OP имаше въпрос за C#. Вашият отговор изглежда като C++. - person Adrian W; 10.11.2018

Трябва да прехвърлите избрания елемент към вашия персонализиран клас (ComboboxItem) Опитайте това:

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
ComboBox cmb = (ComboBox)sender;
            int selectedIndex = cmb.SelectedIndex;
            string selectedText = this.comboBox1.Text;
            string selectedValue = ((ComboboxItem)cmb.SelectedItem).Value.ToString();

ComboboxItem selectedCar = (ComboboxItem)cmb.SelectedItem;
MessageBox.Show(String.Format("Index: [{0}] CarName={1}; Value={2}", selectedIndex, selectedCar.Text, selecteVal));        

}

person Prabodha    schedule 05.04.2020