日期:2014-05-18  浏览次数:20752 次

求助一个动态ComboBox,如何才能让可选项选一次少一个。
C# code
ComboBox Cmb = new ComboBox();
                Cmb.DropDownStyle = ComboBoxStyle.DropDownList;
                Cmb.Name = dr["name"].ToString();
                Cmb.Size = new Size(200, 21);
                Cmb.Location = new Point(0, 25 * i + 5);
                Cmb.Items.Add("");
                
                for (int j = 0; j < dtParm.Rows.Count; j++)
                {
                    Cmb.Items.Add(dtParm.Rows[j][1].ToString());
                }
                panel2.Controls.Add(Cmb);


如上这样一个combobox,如何才能让可选项选一次少一个。

比如在第一个combobox选择了某项
在第二个combobox把此可选项去掉,下拉列表中只显示剩下的可选项。

------解决方案--------------------
动态添加的可以如下操作,添加一个索引变化事件,对本身进行操作
C# code

ComboBox Cmb = new ComboBox();
            Cmb.Items.Add(1);
            Cmb.Items.Add(2);
            Cmb.Items.Add(3);
            Cmb.Items.Add(4);
            Cmb.SelectedIndexChanged += (o, i) => {
                Cmb.Items.Remove(Cmb.SelectedItem);//索引发生变化时,移除选中当前项目
            };
            this.Controls.Add(Cmb);

------解决方案--------------------
Cmb还没panel2.Controls.Add(Cmb);
就想RemoveAt?



------解决方案--------------------
探讨

按照Return_false的方法,

如果用C# code
Cmb.SelectedIndexChanged += (o, i) => {
Cmb.Items.Remove(Cmb.SelectedItem);//索引发生变化时,移除选中当前项目
};


则此事件根据没有响应,
如果用C# code
Cmb.Selecte……

------解决方案--------------------
this.cbx_UnEData.Items.Clear();

if (dt.Rows.Count > 0)
{
this.cbx_UnEData.Visible = true;

foreach (DataRow dr in dt.Rows)
{
this.cbx_UnEData.Items.Add(dr["sdate"]);
}