C# 向Windows窗体添加动态控件并非所有控件都显示
我正在尝试创建一个包含多个DataGridView的表单。我传递DataGridView的数量以及与DataGridView关联的数据表的名称。但当我运行代码时,它只显示一个DataGridView。我检查了可见性是否为真,位置是否不同,我甚至检查了是否所有DataGridView都添加到控件中,它们都很好 这是我的密码C# 向Windows窗体添加动态控件并非所有控件都显示,c#,winforms,C#,Winforms,我正在尝试创建一个包含多个DataGridView的表单。我传递DataGridView的数量以及与DataGridView关联的数据表的名称。但当我运行代码时,它只显示一个DataGridView。我检查了可见性是否为真,位置是否不同,我甚至检查了是否所有DataGridView都添加到控件中,它们都很好 这是我的密码 public partial class Tables : Form { private String[] doc_names; public Tables(i
public partial class Tables : Form
{
private String[] doc_names;
public Tables(int doctors, String[] names)
{
this.Size = new Size(800, 600);
this.doc_names = names;
this.Load += new EventHandler(Tables_Load);
}
void Tables_Load(object sender, EventArgs e) {
for (int i = 0; i < doc_names.Length; ++i)
{
Label label = new Label();
label.Location = new Point(10, 10 + 150 * i);
label.Text = doc_names[i];
this.Controls.Add(label);
DataGridView view = new DataGridView();
view.Name = doc_names[i];
view.Dock = DockStyle.Fill;
view.Size = new Size(150, 150);
view.Location = new Point(0, 200 * i);
this.Controls.Add(view);
populateTable(doc_names[i], view);
}
/*Check if the control was added*/
foreach (Control control in Controls) {
Console.WriteLine(control.Name);
}
}
/*Binds data to the DataGridView*/
void populateTable(String doctor, DataGridView dataTable) {
AppointmentTable table = new AppointmentTable();
Appointment[] apps = table.getbyDoctor(doctor);
//Console.WriteLine(doctor);
dataTable.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataTable.AutoGenerateColumns = true;
dataTable.DataSource = apps;
}
}
公共部分类表:表单
{
私有字符串[]文档名称;
公共表(整数,字符串[]名称)
{
该尺寸=新尺寸(800600);
this.doc_names=名称;
this.Load+=neweventhandler(Tables\u Load);
}
加载空表(对象发送方、事件参数){
对于(int i=0;i
}可能是因为您使用的是
DockStyle.Fill
?由于您通过设置view.Location
,通过代码手动控制定位,您是否可以尝试设置view.Dock=DockStyle.None
是!我试过了,但没用。你试过把控件放在布局面板上而不是窗体本身吗?也许值得尝试一下这种方法,因为表单中存在许多问题。例如,您添加了dock style=fill的网格,因此网格将填充表单,而您将看不到任何其他内容。此外,如果更改驳接样式,则标签位置将位于2-3格线之后的格线下。此外,您还将窗体的大小设置为800x600,而控件的计数可能会导致它们超出窗体的高度。您应该停止以这种方式添加控件。学习使用并在移除Dock=填充和调整标签步骤以与DGVs相同后,其他一切都应正常。您可能希望添加锚点,不过DGV会使锚点向右生长。。并将表单设置为AutoScroll=True;可能是因为您使用的是DockStyle.Fill
?由于您通过设置view.Location
,通过代码手动控制定位,您是否可以尝试设置view.Dock=DockStyle.None
是!我试过了,但没用。你试过把控件放在布局面板上而不是窗体本身吗?也许值得尝试一下这种方法,因为表单中存在许多问题。例如,您添加了dock style=fill的网格,因此网格将填充表单,而您将看不到任何其他内容。此外,如果更改驳接样式,则标签位置将位于2-3格线之后的格线下。此外,您还将窗体的大小设置为800x600,而控件的计数可能会导致它们超出窗体的高度。您应该停止以这种方式添加控件。学习使用并在移除Dock=填充和调整标签步骤以与DGVs相同后,其他一切都应正常。您可能希望添加锚点,不过DGV会使锚点向右生长。。并将表单设置为AutoScroll=True;