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

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 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵