【问题标题】:Load Panel from Another Form从另一个表单加载面板
【发布时间】:2012-10-02 13:02:33
【问题描述】:

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

问题是,form2 使用 Dataset + Databind,然后在加载到 Form1 时停止工作。

我在 Form1 中尝试过的方法:

        From2 from2 = new Form2();

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

【问题讨论】:

  • 我认为这是 winforms 并已对其进行了相应标记。如果没有,请修复标签以包含实际范例。

标签: c# winforms


【解决方案1】:

这是假设我准确地读懂了你的意思

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

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

动态加载用户控件比动态加载表单更容易。

在用户控件中,您只需添加一个这样的方法。 (根据需要进行修改以满足您的需要)

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);

【讨论】:

  • 我从来没有考虑过用户控件,谢谢,我会研究一下。
  • 好的,我加载了用户控件,但不确定如何添加 DataBind()
  • 不必调用DataBind()。它可以是你想要的任何东西。您只需向 UserControl 添加一个函数并将其标记为公共。然后,从放置用户控件的实际窗体中,您可以调用它。我会用一些伪代码修改我的答案。
【解决方案2】:

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

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

如果您不确定如何执行此操作,请右键单击您的项目>添加新项目>用户控件并尝试一下。

【讨论】:

  • 这个想法是其他人使用面板控件设计 form2,并且该人可以根据需要更改它,而无需我在每次有设计更改时都更新代码。另一个原因,我本来可以使用 TabPanel,但是程序布局会因为太多的选项卡而显得过于拥挤,所以我想到了在主窗体中的一个面板中动态添加控件的想法1。但是,其他表单的设计在他们自己的表单中变得更加容易。
【解决方案3】:

正如其他答案所述,您需要使用的解决方案是为这些类型的情况创建用户控件。您尝试做的事情不起作用的原因是控件专门设计为只能在单个表单上工作。如果您尝试将控件添加到多个表单,它将只能成功添加到一个。对于 UserControls 来说也是如此。您将无法只制作一个用户控件,然后将其添加到两个表单中。用户控件的优点是您可以将用于创建、初始化和使用某些功能部分的所有代码放置在与表单不同的位置。您将希望创建两个单独的用户控件实例,您添加两个单独的表单。优点只是用于创建面板的代码以及其中包含或处理它的所有内容都可以重复使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多