RichardQY1 2022-08-22 11:49 采纳率: 25%
浏览 164
已结题

C# 动态添加ComboBox遇到的问题

问题遇到的现象和发生背景

点击按钮,添加三个ComboBox和一个TextBox。添加完成后,如图所示,修改其中一个ComboBox以后,会导致另外几个新创建的ComboBox也会跟着修改,TextBox没有这个问题,主要是ComboBox有这个问题

问题相关代码,请勿粘贴截图
public void button_Add_Click(object sender, EventArgs e)
        {
            //创建新的荷载工况和加载方式的ComboBox和荷载值的TextBox
            num_ClickButtonAdd++;

            ComboBox comboBox_LoadCase_Add = new ComboBox();
            ComboBox comboBox_LoadType_Add = new ComboBox();
            ComboBox comboBox_Dir_Add = new ComboBox();
            TextBox textBox_LoadNum_Add = new TextBox();

            comboBox_LoadCase_Add.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
            comboBox_LoadCase_Add.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            comboBox_LoadCase_Add.FormattingEnabled = true;
            comboBox_LoadCase_Add.Location = new System.Drawing.Point(8, (int)comboBox_LoadCase0.Tag + num_ClickButtonAdd * 40);
            comboBox_LoadCase_Add.Name = "comboBox_LoadCase" + num_ClickButtonAdd.ToString();
            comboBox_LoadCase_Add.Size = new System.Drawing.Size(100, 28);
            comboBox_LoadCase_Add.Tag = comboBox_LoadCase_Add.Location.Y;
            this.panel_LoadInfo.Controls.Add(comboBox_LoadCase_Add);
            comboBox_LoadCase_Add.DataSource = comboBox_LoadCase0.Items;
            comboBox_LoadCase_Add.SelectedIndex = 0;

            comboBox_LoadType_Add.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
            comboBox_LoadType_Add.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            comboBox_LoadType_Add.FormattingEnabled = true;
            comboBox_LoadType_Add.Location = new System.Drawing.Point(114, (int)comboBox_LoadType0.Tag + num_ClickButtonAdd * 40);
            comboBox_LoadType_Add.Name = "comboBox_LoadType" + num_ClickButtonAdd.ToString();
            comboBox_LoadType_Add.Size = new System.Drawing.Size(140, 28);
            comboBox_LoadType_Add.Tag = comboBox_LoadType_Add.Location.Y;
            this.panel_LoadInfo.Controls.Add(comboBox_LoadType_Add);
            comboBox_LoadType_Add.DataSource = comboBox_LoadType0.Items;
            comboBox_LoadType_Add.SelectedIndex = 0;

            comboBox_Dir_Add.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
            comboBox_Dir_Add.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            comboBox_Dir_Add.FormattingEnabled = true;
            comboBox_Dir_Add.Location = new System.Drawing.Point(260, (int)comboBox_Dir0.Tag + num_ClickButtonAdd * 40);
            comboBox_Dir_Add.Name = "comboBox_Dir" + num_ClickButtonAdd.ToString();
            comboBox_Dir_Add.Size = new System.Drawing.Size(130, 28);
            comboBox_Dir_Add.Tag = comboBox_Dir_Add.Location.Y;
            this.panel_LoadInfo.Controls.Add(comboBox_Dir_Add);
            comboBox_Dir_Add.DataSource = comboBox_Dir0.Items;
            comboBox_Dir_Add.SelectedIndex = 5;

            textBox_LoadNum_Add.Location = new System.Drawing.Point(396, (int)textBox_LoadNum0.Tag + num_ClickButtonAdd * 40);
            textBox_LoadNum_Add.Name = "textBox_LoadNum" + num_ClickButtonAdd.ToString();
            textBox_LoadNum_Add.Size = new System.Drawing.Size(80, 30);
            textBox_LoadNum_Add.Tag = textBox_LoadNum_Add.Location.Y;
            textBox_LoadNum_Add.Text = "0";
            this.panel_LoadInfo.Controls.Add(textBox_LoadNum_Add);
        }
运行结果及报错内容

img

img

img

我想要达到的结果

我想要的结果就是新添加的几个ComboBox能够不互相影响

  • 写回答

2条回答 默认 最新

  • 只会搬运的小菜鸟 2022-08-22 13:13
    关注

    comboBox_LoadCase_Add.DataSource = comboBox_LoadCase0.Items;
    comboBox_LoadType_Add.DataSource = comboBox_LoadType0.Items;
    comboBox_Dir_Add.DataSource = comboBox_Dir0.Items;
    你多个控件绑定同一个数据源后就会有这种问题,解决方案是:

    1. 用循环将数据源里的数据一个个取出来后,再combobox.items.add添加到目标控件中
    2. 将源数据copy出来,再给到每个combobox,比如
      DataTable tableSource ;
      ComboBox1.DataSource=tableSource.Copy();
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月30日
  • 已采纳回答 8月22日
  • 修改了问题 8月22日
  • 修改了问题 8月22日
  • 展开全部

悬赏问题

  • ¥15 爬取豆瓣电影相关处理
  • ¥15 手机淘宝抓清除消息接口
  • ¥15 C#无selenium
  • ¥15 LD衰减计算的结果过大
  • ¥15 用机器学习方法帮助保险公司预测哪些是欺诈行为
  • ¥15 计算300m以内的LD衰减
  • ¥15 数据爬取,python
  • ¥15 怎么看 cst中一个面的功率分布图,请说明详细步骤。类似下图
  • ¥15 为什么我的pycharm无法用pyqt6的QtWebEngine
  • ¥15 FOR循环语句显示查询超过300S错误怎么办