C# 限制winform中控件的数量

C# 限制winform中控件的数量,c#,winforms,groupbox,C#,Winforms,Groupbox,我的表单中有一个按钮,每次单击按钮都会添加groupBox。但是我想要一个winform只包含8个GroupBox。当groupBox的数量达到8时,它将自动执行Visible=false groupBox之前的所有8,并再次添加名为(groupBox9)的groupBox。我该怎么办 private void butonYeni_Click(object sender, EventArgs e) { //creating Font Font font = new

我的表单中有一个按钮,每次单击按钮都会添加groupBox。但是我想要一个winform只包含8个GroupBox。当groupBox的数量达到8时,它将自动执行Visible=false groupBox之前的所有8,并再次添加名为(groupBox9)的groupBox。我该怎么办

private void butonYeni_Click(object sender, EventArgs e)
{
        //creating Font
        Font font = new Font("Microsoft Sans Serif", 10.0f, FontStyle.Bold);
        Font font2 = new Font("Microsoft Sans Serif", 9.0f, FontStyle.Bold);

        int sayGB = 0;

        foreach (Control c in this.Controls)
        {
            if (c.GetType() == typeof(GroupBox))
            {
                sayGB++;
            }



            for (int i = sayGB; i < 1000; i++)
            {
                //creating groupbox
                GroupBox Group = new GroupBox();
                Group.Width = 767;
                Group.Height = 179;
                Group.Text = "Soru & Cevap";
                Group.Font = font;
                Group.ForeColor = Color.Maroon;
                Group.Location = new Point(200,66);
                //creating label
                Label Soru = new Label();
                Soru.Text = "Soru: ";
                Soru.Font = font2;
                Soru.ForeColor = Color.Maroon;
                Soru.Location = new Point(6,33);
                Soru.Width = 53;
                Soru.Height = 13;
                //creating textbox
                TextBox soruText = new TextBox();
                soruText.Width = 685;
                soruText.Height = 20;
                soruText.Font = font2;
                soruText.ForeColor = Color.Black;
                soruText.Multiline = true;
                soruText.Location = new Point(70,31);
                //creating label
                Label Cevap = new Label();
                Cevap.Text = "Cevap:";
                Cevap.Font = font2;
                Cevap.ForeColor = Color.Maroon;
                Cevap.Location = new Point(6, 92);
                Cevap.Width = 53;
                Cevap.Height = 25;
                //creating textbox
                TextBox cevapText = new TextBox();
                cevapText.Width = 685;
                cevapText.Height = 69;
                cevapText.Font = font2;
                cevapText.ForeColor = Color.Black;
                cevapText.Multiline = true;
                cevapText.Location = new Point(70,67);
                //creating button
                Button btn = new Button();
                btn.Width = 75;
                btn.Height = 25;
                btn.Text = "Kaydet";
                btn.BackColor = Color.Maroon;
                btn.Font = font2;
                btn.ForeColor = Color.White;
                btn.Location = new Point(682,148);
                //kontrolleri ekleme
                Group.Controls.Add(btn);
                Group.Controls.Add(Soru);
                Group.Controls.Add(soruText);
                Group.Controls.Add(Cevap);
                Group.Controls.Add(cevapText);
                this.Controls.Add(Group);
        }
    }
}
private void butonYeni_单击(对象发送者,事件参数e)
{
//创建字体
Font Font=新字体(“Microsoft无衬线字体”,10.0f,FontStyle.Bold);
Font font2=新字体(“Microsoft无衬线字体”,9.0f,FontStyle.Bold);
int-sayGB=0;
foreach(此.Controls中的控件c)
{
if(c.GetType()==typeof(GroupBox))
{
sayGB++;
}
for(int i=sayGB;i<1000;i++)
{
//创建groupbox
GroupBox组=新的GroupBox();
组宽=767;
组:身高=179;
Group.Text=“Soru&Cevap”;
Group.Font=Font;
Group.ForeColor=颜色为褐红色;
组位置=新点(200,66);
//创建标签
标签Soru=新标签();
Soru.Text=“Soru:”;
Soru.Font=font2;
Soru.ForeColor=颜色褐红色;
Soru.位置=新点(6,33);
Soru.宽度=53;
索鲁高度=13;
//创建文本框
TextBox soruText=新建TextBox();
soruText.Width=685;
soruText.高度=20;
soruText.Font=font2;
soruText.ForeColor=Color.Black;
soruText.Multiline=true;
soruText.Location=新点(70,31);
//创建标签
标签Cevap=新标签();
Cevap.Text=“Cevap:”;
Cevap.Font=font2;
Cevap.ForeColor=颜色为褐红色;
Cevap.位置=新点(6,92);
Cevap.宽度=53;
Cevap.高度=25;
//创建文本框
TextBox cevapText=新的TextBox();
cevapText.Width=685;
cevapText.高度=69;
cevapText.Font=font2;
cevapText.ForeColor=颜色.黑色;
cevapText.Multiline=true;
cevapText.位置=新点(70,67);
//创建按钮
按钮btn=新按钮();
btn.宽度=75;
btn.高度=25;
btn.Text=“Kaydet”;
btn.BackColor=颜色为褐红色;
btn.Font=font2;
btn.ForeColor=颜色。白色;
btn.位置=新点(682148);
//康特罗里埃克勒姆酒店
组.控件.添加(btn);
组.控件.添加(Soru);
Group.Controls.Add(soruText);
组.对照组.添加(Cevap);
Group.Controls.Add(cevapText);
this.Controls.Add(组);
}
}
}

定义一个整数类变量,并在每次单击按钮时增加该变量。增加后,检查是否大于8。如果是,请将您的内容设置为Visible=false

模型:

public class MyClass
{
      private int groupboxCounter = 0;
      public MyClass()
      {
      }

      private void btn_click(...)
      {
           // add a new groupbox here
           groupboxCounter++;
           if (groupboxCounter > 8)
           {
                //make stuff invisible here
           } 
      }
}

你的意思是,一旦你添加第9组框,你就想隐藏前8组框?显示您的代码(
btn\u特别是单击
)显示您的代码并说明问题所在。由于声誉问题,我无法添加代码,但我会告诉您如何计算分组框。通过“For Each”,我可以计算groupBox的类型(这个控件中的控件c,如果c.gettype()==typeof(groupBox),那么使用int Counter=0 Counter++),它会给出groupBox的数量。我可以将GroupBox命名为group.name=“group”+Counter;但问题是,我可以在winform中添加8个groupBox,但当第9次单击时,它就是在iTunes上添加groupBox。在你问题的标签下面有一个“编辑”按钮,你不需要任何声誉就可以使用它。是的,这不起作用。在枚举集合时(通常)不能更改集合(也就是说,不能在枚举该集合的foreach循环中更改集合)。也许你可以描述一下你希望你的代码在最后做什么。你不需要添加任何新的变量,只需要获取表单上的组框数。@Sayse我不确定他是否跟踪它们和/或表单上是否有其他元素。所以光是数数孩子就有点复杂了。有了可用的信息,这是我唯一能想到的“简单”答案。OP不需要跟踪他们,表单就可以做到这一点
this.Controls.OfType().Count()
谢谢你回答我的问题,但我想问你一个问题;第9组框;“if事件我必须写什么?”Sayse-huh,整洁。以前没听说过这个功能。谢谢分享。