c# - microsoft - vb combobox add item




WinForms ComboBox數據綁定問題 (2)

假設您正在執行以下操作

List<string> myitems = new List<string>
{
    "Item 1",
    "Item 2",
    "Item 3"
};

ComboBox box = new ComboBox();
box.DataSource = myitems;

ComboBox box2 = new ComboBox();
box2.DataSource = myitems

所以現在我們有兩個綁定到該數組的組合框,一切正常。 但是當您更改一個組合框的值時,它會將兩個組合框更改為您剛剛選擇的組合框。

現在,我知道Arrays總是通過引用傳遞(了解到當我學習C:D時),但為什麼組合框會一起改變? 我不相信組合框控件正在修改集合。

作為一種解決方法,這不會達到預期/期望的功能

ComboBox box = new ComboBox();
box.DataSource = myitems.ToArray();

一個更好的解決方法(取決於數據源的大小)是聲明兩個BindingSource對象(從2.00開始的新對象)將集合綁定到那些,然後將它們綁定到組合框。

我附上一個完整的例子。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        private BindingSource source1 = new BindingSource();
        private BindingSource source2 = new BindingSource();

        public Form1()
        {
            InitializeComponent();
            Load += new EventHandler(Form1Load);
        }

        void Form1Load(object sender, EventArgs e)
        {
            List<string> myitems = new List<string>
            {
                "Item 1",
                "Item 2",
                "Item 3"
            };

            ComboBox box = new ComboBox();
            box.Bounds = new Rectangle(10, 10, 100, 50);
            source1.DataSource = myitems;
            box.DataSource = source1;

            ComboBox box2 = new ComboBox();
            box2.Bounds = new Rectangle(10, 80, 100, 50);
            source2.DataSource = myitems;
            box2.DataSource = source2;

            Controls.Add(box);
            Controls.Add(box2);
        }
    }
}

如果你想讓自己更加困惑,那麼試著總是在構造函數中聲明綁定。 這可能會導致一些非常奇怪的錯誤,因此我總是在Load事件中綁定。


這可能只是一個錯字,但在您提供的代碼中,您只需在設置數據源時引用第一個組合框:

ComboBox box = new ComboBox();
box.DataSource = myitems;

ComboBox box2 = new ComboBox();
**box**.DataSource = myitems

未設置box2的數據源。





data-binding