两个具有相同成员的组合框,当选择一个时,其他必须无法选择相同的成员

时间:2011-11-21 01:22:40

标签: c# winforms combobox unique

所以我有两个组合框(comboBoxFromAccount和comboBoxToAccount)。每个都有相同的数据源,即AccountsList(从父表单传递的BankAccount对象列表)。

我想这样做,如果在其中一个组合框中选择了一个项目,则在另一个组合框中将不再可选。我尝试这样做的方法是将BankAccounts列表从comboBoxFromAccount复制到comboBoxTo帐户,并从comboBoxToAccount中删除所选的comboBoxFromAccount索引。

我认为我很接近,但似乎发生的事情是我有一个空白的comboBoxToAccount。

这是我的代码:

    private BankAccountCollection accountsListTransferTo = new BankAccountCollection();

    // public property for passing collection data to the dialog
    public BankAccountCollection AccountsList
    {
        get { return accountsListTransferTo; }
        set { accountsListTransferTo = value; }
    }

    // Initial loading
    private void TransferFundsDialog_Load(object sender, EventArgs e)
    {
        textBoxAmount.Text = String.Empty;
        textBoxAmount.Select();
        comboBoxFromAccount.DataSource = AccountsList;

        accountsListTransferTo.AddRange(AccountsList); // Copy content
        accountsListTransferTo.Remove(comboBoxFromAccount.SelectedItem as BankAccount); // Remove item
        comboBoxToAccount.DataSource = accountsListTransferTo; // Data binding
    }

    private void comboBoxFromAccount_SelectedIndexChanged(object sender, EventArgs e)
    {
        accountsListTransferTo.Clear(); // Clear list, if you don't to it, AddRange will just add more items.
        accountsListTransferTo.AddRange(AccountsList); // Copy ALL accounts
        accountsListTransferTo.Remove(comboBoxFromAccount.SelectedItem as BankAccount); // Remove selected, so user cannot transfer to same account

        // Refresh data binding 
        comboBoxToAccount.DataSource = null;
        comboBoxToAccount.DataSource = accountsListTransferTo;

        // Select very first item in "TO" combobox
        comboBoxToAccount.SelectedIndex = 0;
    }

帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

尝试删除该行

comboBoxToAccount.DataSource = null;

我对组合框有问题的模糊回忆。

答案 1 :(得分:0)

我可以看到的另一个可能的问题是您使用 accountsListTransferTo 作为主集合和从中删除所选帐户的集合。每次调用 comboBoxFromAccount_SelectedIndexChanged 时,另一个帐户将从集合中消失(因此也会从 comboBoxToAccount 中的可用选项中消失)。

我认为我已经看到组合框的行为方式是在添加新项目时触发SelectedIndexChanged(或类似)事件。如果是这种情况,它将解释空的 comboBoxToAccount ,因为 comboBoxFromAccount_SelectedIndexChanged 将为每个添加的银行帐户运行一次,实质上是从主列表中删除它们然后重新绑定减少名单。您可以使用事件处理程序中的断点轻松验证这一点。