从另一个表单加载面板

时间:2012-10-02 13:02:33

标签: c# winforms

我创建了2个表单,Form1带有Panel,Form2带有Panel。在Form2上我想设计控件,然后我动态地在Form1中加载。我的想法是我可以使用VS设计任意数量的表单,但然后使用表单中的那些面板动态加载到Form1中。

麻烦的是,form2使用数据集+数据绑定,然后在加载到Form1时停止工作。

我在Form1中尝试的方法:

        From2 from2 = new Form2();

        for (int i = 0; i < cf.Form2.Controls.Count; i++)
        {
            panel1.Controls.Add(cf.Form2.Controls[i]);
        }

3 个答案:

答案 0 :(得分:2)

这是假设我准确读出你的意思

正如您所发现的那样,这种适用方法是不可行的。

更好的方法是创建一个包含面板的User Control。在用户控件中,您可以公开一个名为DataBind()的公共方法,该方法将数据源作为输入参数,并在该方法中绑定数据。

动态加载USer Control比动态加载表单更容易。

在用户控件中,您只需添加一个方法。 (根据需要修改此项)

public void BindData(System.Data.DataTable t)
{
   GridView1.DataSource = t;
   if(t.Rows.Count > 0)
   {
      FirstNameTextBox.Text = Convert.ToString(t.Rows[0]["FirstName"])
   }
}

在你的表单中,你这样称呼它(当然,应该有错误处理等等 - 这是如何做我正在描述的一个简单的例子。)

System.Data.DataTable t = new System.Data.DataTable;
System.Data.SqlClient.SqlDataAdapter ad = new System.Data.DataAdapter(sql, connectionstring);
ad.Fill(t);

MyUserControl myControl= new MyUserControl();
myControl.BindData(t);

答案 1 :(得分:0)

我不确定我是否100%理解你的说法,如果我错了,请纠正我。您想从各种表单加载子项目并在form1上动态显示它们?我不确定你为什么要这样做。

为什么不使用用户控件,您可以根据需要制作不同的用户控件,并根据需要将这些控件加载到您的form1中。

如果您不确定如何执行此操作,请右键单击您的项目&gt;添加新项目&gt;用户控件并进行游戏。

答案 2 :(得分:0)

正如其他答案所述,您需要使用的解决方案是为这些类型的情境创建UserControl。您尝试执行的操作无效的原因是控件专门设计为仅在单个窗体上工作。如果您尝试将控件添加到多个表单,则只能将其成功添加到一个表单中。这对UserControls来说甚至是正确的。您不会只能创建一个用户控件,然后将其添加到两个表单中。用户控件的优点是,您可以将用于创建,初始化和使用某些功能部分的所有代码放在与表单不同的位置。您将需要创建两个单独的同一用户控件实例,您可以添加两个单独的表单。优点是可以重复使用创建面板的代码,以及内部或处理它的所有内容。