代码之家  ›  专栏  ›  技术社区  ›  DrakeMurdoch

“使用复选框动态添加组合框”

  •  0
  • DrakeMurdoch  · 技术社区  · 6 年前

    单击复选框时,我正在尝试添加组合框。

    我使用的代码如下。现在,我可以让它围绕已经存在的组合框移动,但它不会创建新的组合框。

            private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            // Determine the CheckState of the check box.  
            if (checkBox1.CheckState == CheckState.Checked)
            {  
    
                combo.Items.AddRange(new object[] {
                    "Item 1",
                    "Item 2",
                    "Item 3",
                    "Item 4",
                    "item 5",
                    "Item 6"});
                combo.Location = new System.Drawing.Point(19, 123);
                combo.Name = "combo";
                combo.Size = new System.Drawing.Size(121, 21);
                combo.TabIndex = 0;
                combo.SelectedIndexChanged += new System.EventHandler(this.combo_SelectedIndexChanged);
                combo.BringToFront();
    
                this.AllowDrop = false;
            }
        }
    
        private void checkBox1_Click(object sender, System.EventArgs e)
        {
            switch (checkBox1.CheckState)
            {
                case CheckState.Checked:
                    ComboBox combo = new ComboBox();
                    Controls.Add(combo);
                    break;
                case CheckState.Unchecked:
    
                    break;
                case CheckState.Indeterminate:
    
                    break;
            }
        }
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   DrakeMurdoch    6 年前

    解决问题的方法是意识到你将陈述放在哪个函数中。组合框的设置(范围、位置等)将位于 CheckChanged if checked 条件。这些会和 groupbox.controls.add(); combo.BringToFront(); 以防万一,它会落在什么东西后面。

    private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            // Determine the CheckState of the check box.  
            if (checkBox1.CheckState == CheckState.Checked)
            {
                groupBox1.Controls.Add(combo);
                combo.Items.AddRange(new object[] {
                    "Item 1",
                    "Item 2",
                    "Item 3",
                    "Item 4",
                    "Item 5",
                    "Item 6"});
                combo.Location = new System.Drawing.Point(19, 123);
                combo.Name = "combo";
                combo.Size = new System.Drawing.Size(121, 21);
                combo.TabIndex = 0;
                combo.SelectedIndexChanged += new System.EventHandler(this.combo_SelectedIndexChanged);
                combo.BringToFront();
    
                this.AllowDrop = false;
    }
    

    同时,在 Click 函数,必须实例化组合框并添加它。

        private void checkBox1_Click(object sender, System.EventArgs e)
        {
            switch (checkBox1.CheckState)
            {
                case CheckState.Checked:
                    ComboBox combo = new ComboBox();
                    Controls.Add(combo);
                    break;
                case CheckState.Unchecked:
    
                    break;
                case CheckState.Indeterminate:
    
                    break;
            }
        }
    

    如果您想在取消选中复选框后去掉组合框,只需添加

            if (checkBox1.CheckState == CheckState.Unchecked)
            {
                groupBox1.Controls.Remove(combo);
                Controls.Remove(combo);
                combo.Items.Clear();
            }
    

    进入 private void checkBox1_CheckedChanged(object sender, EventArgs e) 功能。 一定要放 combo.items.Clear() 或者它会将组合框的新实例的范围添加到旧实例中。