为什么在生成动态文本框和标签时,在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); }
当在winform c中动态生成标签并为什么在生成动态文本框和标签时,在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
在此处输入代码时
文本框与标签重叠。我需要将文本框与标签文本保持在一起。我已在此处添加了代码 将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);
}