如何从组合框中删除对象?

时间:2012-07-19 07:52:12

标签: c# winforms combobox

我有一个包含Foo类型对象的组合框,这里是Foo类:

public class Foo
{
    public string name { get; set; }
    public string path { get; set; }
}

Foo.name是组合框中显示的文字,Foo.path是所选选项的值。

我想在完成一些操作后从组合框中删除一个选项。

我尝试过这些方法:

  • 1

    comboBox2.Items.Remove(@comboBox2.Text);  
    
  • 2

    comboBox2.Items.Remove(@comboBox2.SelectedValue.ToString());  
    
  • 3

    Foo ToDelete = new Foo();
    ToDelete.name = @comboBox2.Text;
    ToDelete.path = @comboBox2.SelectedValue.ToString();
    comboBox2.Items.Remove(ToDelete); 
    

对我来说没有任何作用。 :/怎么做?

更新

这就是我初始化组合框的方式:

    string[] filePaths = Directory.GetFiles(sites.paths[comboBox1.SelectedIndex]);

        List<Foo> combo2data = new List<Foo>();

        foreach (string s in filePaths)
        {
            Foo fileInsert = new Foo();
            fileInsert.path = s;
            fileInsert.name = Path.GetFileName(s);
            combo2data.Add(fileInsert);
        }

        comboBox2.DataSource = combo2data;
        comboBox2.ValueMember = "path";
        comboBox2.DisplayMember = "name";

7 个答案:

答案 0 :(得分:1)

使用ComboBox.SelectedIndex属性。

例如:让我在表单中添加comboBox1。在删除按钮中:

if (comboBox1.SelectedIndex >= 0)
    comboBox1.Items.RemoveAt(comboBox1.SelectedIndex);

答案 1 :(得分:1)

comboBox2.Items.Remove(comboBox2.SelectedValue);只会从组合框中删除,而不是从绑定到组合框的数据源中删除。您可以将其从数据源中删除并重新绑定数据源。

答案 2 :(得分:0)

combox1.Remove(takes an object)
Object selectedItem = comboBox1.SelectedItem;

所以你可以这样做combox1.Remove(selectedItem);

答案 3 :(得分:0)

假设您要按索引删除项目:

    combo2data.RemoveAt(0); //Removing by Index from the dataSource which is a List

    //Rebind
    comboBox2.DataSource = null;
    comboBox2.DataSource = combo2data;  
    comboBox2.ValueMember = "path";  
    comboBox2.DisplayMember = "name";  

假设您要通过选择成员值来删除

    Foo item = combo2data.Where(f => f.name.Equals("Tom")).FirstOrDefault();
    if (item != null)
    {
        combo2data.Remove(item);
        comboBox2.DataSource = null;
        comboBox2.DataSource = combo2data;  
        comboBox2.ValueMember = "path";  
        comboBox2.DisplayMember = "name";  
    }

答案 4 :(得分:0)

这两个命令将从数据源中删除一个项目。

list.Remove((Foo)comboBox1.SelectedItem);

list.Remove(list.Find(P=>P.name == comboBox1.SelectedText));

答案 5 :(得分:0)

我认为秘诀是首先将null归属于数据源,然后重新绑定到修改后的集合:

int idToRemove = 1;
var items = (cbx.DataSource as List<MyEntity>);
items.RemoveAll(v => v.Id == idToRemove);
rebindCombobox(cbx, items, "Name", "Id");


private void rebindCombobox(ComboBox cbx, IEnumerable<Object> items, String displayMember, String valueMember)
{
    cbx.DataSource = null;
    cbx.DisplayMember = displayMember;
    cbx.ValueMember = valueMember;
    cbx.DataSource = items;
}

答案 6 :(得分:0)

也许删除组合框中的所有项目 comboBox.Items.Clear();