2

我有一个包含对象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";
4

7 回答 7

5

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

于 2012-07-19T08:07:04.760 回答
1

使用ComboBox.SelectedIndex财产。

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

if (comboBox1.SelectedIndex >= 0)
    comboBox1.Items.RemoveAt(comboBox1.SelectedIndex);
于 2012-07-19T07:59:15.850 回答
0
combox1.Remove(takes an object)
Object selectedItem = comboBox1.SelectedItem;

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

于 2012-07-19T08:03:17.450 回答
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";  
    }
于 2012-07-19T08:44:35.827 回答
0

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

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

或者

list.Remove(list.Find(P=>P.name == comboBox1.SelectedText));
于 2012-07-19T09:11:13.843 回答
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;
}
于 2013-07-17T15:02:17.280 回答
0

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

于 2021-04-12T16:07:08.847 回答