Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 向Windows窗体添加动态控件并非所有控件都显示_C#_Winforms - Fatal编程技术网

C# 向Windows窗体添加动态控件并非所有控件都显示

C# 向Windows窗体添加动态控件并非所有控件都显示,c#,winforms,C#,Winforms,我正在尝试创建一个包含多个DataGridView的表单。我传递DataGridView的数量以及与DataGridView关联的数据表的名称。但当我运行代码时,它只显示一个DataGridView。我检查了可见性是否为真,位置是否不同,我甚至检查了是否所有DataGridView都添加到控件中,它们都很好 这是我的密码 public partial class Tables : Form { private String[] doc_names; public Tables(i

我正在尝试创建一个包含多个DataGridView的表单。我传递DataGridView的数量以及与DataGridView关联的数据表的名称。但当我运行代码时,它只显示一个DataGridView。我检查了可见性是否为真,位置是否不同,我甚至检查了是否所有DataGridView都添加到控件中,它们都很好

这是我的密码

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;