【问题标题】:Two comboBoxes with same members, when one selected, other must be unable to select same member两个具有相同成员的组合框,当一个被选中时,另一个必须无法选择相同的成员
【发布时间】:2011-11-21 01:22:39
【问题描述】:

所以我有两个组合框(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;
    }

我们将不胜感激。

【问题讨论】:

    标签: c# winforms combobox unique


    【解决方案1】:

    尝试删除线

    comboBoxToAccount.DataSource = null;
    

    我对组合框有这个问题的记忆模糊。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-31
        相关资源
        最近更新 更多