为什么在生成动态文本框和标签时,在win form c#中文本框上的标签重叠? 试试看 { int txtno=10; int Textbox_pointY=15; int label_pointY=15; int label_pointX=10; int Textbox_pointX=75; panel1.控件。清除(); 对于(int i=0;i=0;--i) panel1.控件[i].Dispose(); 对于(int i=0;i DATGRIDVIEW控件”。特别是当您使用简单的标签和文本框时,标签中的文本太多。考虑AutoStase= false,并设置宽度属性,以便它永远不会与文本框重叠。或者,您可以设置其MaximumSize属性并留出足够的空间,以便垂直包装文本。请注意,panel1.Controls.Clear()是一个非常讨厌的bug,这些控件在程序的生命周期中一直存在。必须为这些控件调用Dispose()方法。改为使用while(panel1.Controls.Count>0)panel1.Controls[0].Dispose();请修复panel1.Controls.Clear()错误,它会让太多程序员陷入麻烦。@Hans Passant:谢谢!资源泄漏(在这种情况下是HWND)是一个真正的麻烦,我很抱歉我的复制粘贴 int txtno = 10; int label_pointY = 15; int label_pointX = 10; int Textbox_pointX = 75; // Don't do this: it just removes conrols from the panel, // but does't free resources (and you have resource leakage) // panel1.Controls.Clear(); // If you want to get rid of all controls on the panel1 (i.e. dispose them) // do it like this: for (int i = panel1.Controls.Count - 1; i >= 0; --i) panel1.Controls[i].Dispose(); for (int i = 0; i < txtno; i++) { Label lbl = new Label() { Parent = panel1, Text = "Test_" + i, Location = new Point(label_pointX, label_pointY), AutoSize = false, Width = Textbox_pointX - label_pointX, }; TextBox box = new TextBox() { Parent = panel1, Text = (i + 1).ToString(), Location = new Point(Textbox_pointX, label_pointY) }; label_pointY += Math.Max(box.Height, lbl.Height); }

为什么在生成动态文本框和标签时,在win form c#中文本框上的标签重叠? 试试看 { int txtno=10; int Textbox_pointY=15; int label_pointY=15; int label_pointX=10; int Textbox_pointX=75; panel1.控件。清除(); 对于(int i=0;i=0;--i) panel1.控件[i].Dispose(); 对于(int i=0;i DATGRIDVIEW控件”。特别是当您使用简单的标签和文本框时,标签中的文本太多。考虑AutoStase= false,并设置宽度属性,以便它永远不会与文本框重叠。或者,您可以设置其MaximumSize属性并留出足够的空间,以便垂直包装文本。请注意,panel1.Controls.Clear()是一个非常讨厌的bug,这些控件在程序的生命周期中一直存在。必须为这些控件调用Dispose()方法。改为使用while(panel1.Controls.Count>0)panel1.Controls[0].Dispose();请修复panel1.Controls.Clear()错误,它会让太多程序员陷入麻烦。@Hans Passant:谢谢!资源泄漏(在这种情况下是HWND)是一个真正的麻烦,我很抱歉我的复制粘贴 int txtno = 10; int label_pointY = 15; int label_pointX = 10; int Textbox_pointX = 75; // Don't do this: it just removes conrols from the panel, // but does't free resources (and you have resource leakage) // panel1.Controls.Clear(); // If you want to get rid of all controls on the panel1 (i.e. dispose them) // do it like this: for (int i = panel1.Controls.Count - 1; i >= 0; --i) panel1.Controls[i].Dispose(); for (int i = 0; i < txtno; i++) { Label lbl = new Label() { Parent = panel1, Text = "Test_" + i, Location = new Point(label_pointX, label_pointY), AutoSize = false, Width = Textbox_pointX - label_pointX, }; TextBox box = new TextBox() { Parent = panel1, Text = (i + 1).ToString(), Location = new Point(Textbox_pointX, label_pointY) }; label_pointY += Math.Max(box.Height, lbl.Height); },c#,winforms,C#,Winforms,当在winform c中动态生成标签并在此处输入代码时文本框与标签重叠。我需要将文本框与标签文本保持在一起。我已在此处添加了代码 将AutoSize设置为false并明确指定标签的Width: try { int txtno = 10; int Textbox_pointY = 15; int label_pointY = 15; int label_pointX = 10; int Textbox_pointX = 75; panel1.C

当在winform c中动态生成标签并
在此处输入代码时
文本框与标签重叠。我需要将文本框与标签文本保持在一起。我已在此处添加了代码

AutoSize
设置为
false
并明确指定标签的
Width

try
{
    int txtno = 10;

    int Textbox_pointY = 15;
    int label_pointY = 15;

    int label_pointX = 10;
    int Textbox_pointX = 75;

    panel1.Controls.Clear();
    for (int i = 0; i < txtno; i++)
    {   //Lable creation

        Label lbl = new Label();
        panel1.Controls.Add(lbl);
        lbl.Text = "Test_" + i;
        lbl.Location = new Point(label_pointX, label_pointY);

        label_pointY += 22;
        //Text box creating 
        TextBox a = new TextBox();
        panel1.Controls.Add(a);
        a.Text = (i + 1).ToString();
        a.Location = new Point(Textbox_pointX, Textbox_pointY);

        //panel1.Show();
        Textbox_pointY += 22;
        //label_pointY += 5;
    }
}
catch (Exception)
{
    MessageBox.Show(e.ToString());
}
int txtno=10;
int label_pointY=15;
int label_pointX=10;
int Textbox_pointX=75;
//不要这样做:它只会从面板上移除控制器,
//但是没有释放资源(而且你有资源泄漏)
//panel1.控件。清除();
//如果您想清除面板1上的所有控件(即,处置它们)
//这样做:
对于(int i=panel1.Controls.Count-1;i>=0;--i)
panel1.控件[i].Dispose();
对于(int i=0;i
如果创建标签,默认情况下,
AutoSize
属性设置为
true
。将它设置为<代码> false <代码>,最好使用<代码> FlowLayoutPanel <代码>来在窗体内安排控件。当在循环中创建动态控件时,请考虑“代码> DATGRIDVIEW控件”。特别是当您使用简单的
标签
文本框
时,标签中的文本太多。考虑AutoStase= false,并设置宽度属性,以便它永远不会与文本框重叠。或者,您可以设置其MaximumSize属性并留出足够的空间,以便垂直包装文本。请注意,panel1.Controls.Clear()是一个非常讨厌的bug,这些控件在程序的生命周期中一直存在。必须为这些控件调用Dispose()方法。改为使用while(panel1.Controls.Count>0)panel1.Controls[0].Dispose();请修复panel1.Controls.Clear()错误,它会让太多程序员陷入麻烦。@Hans Passant:谢谢!资源泄漏(在这种情况下是HWND)是一个真正的麻烦,我很抱歉我的复制粘贴
  int txtno = 10;

  int label_pointY = 15;
  int label_pointX = 10;
  int Textbox_pointX = 75;

  // Don't do this: it just removes conrols from the panel, 
  // but does't free resources (and you have resource leakage)
  // panel1.Controls.Clear();

  // If you want to get rid of all controls on the panel1 (i.e. dispose them) 
  // do it like this:  
  for (int i = panel1.Controls.Count - 1; i >= 0; --i)
    panel1.Controls[i].Dispose();

  for (int i = 0; i < txtno; i++) {
    Label lbl = new Label() {
      Parent = panel1,
      Text = "Test_" + i,
      Location = new Point(label_pointX, label_pointY),
      AutoSize = false,                      
      Width = Textbox_pointX - label_pointX, 
    };

    TextBox box = new TextBox() {
      Parent = panel1,
      Text = (i + 1).ToString(),
      Location = new Point(Textbox_pointX, label_pointY)
    };

    label_pointY += Math.Max(box.Height, lbl.Height);
  }