从其他类传递UserControl

时间:2017-07-12 05:37:18

标签: c# visual-studio

从表单中调用

private void Form1_Load(object sender, EventArgs e)
{
  var myControl = new UserControlfrm();
  pnlMain.Controls.Clear();
  pnlMain.Controls.Add(myControl);
}

UserControl myctrl = new UserControlfrm();
private void Form1_Load(object sender, EventArgs e)
{
 AddPanel(pnlMain);
}

private void AddPanel(Control parent)
{
 parent.Controls.Clear();
 parent.Controls.Add(myctrl);
}

从其他班级打电话怎么样?这是多么正确

这是班级

class MainController
{
 public void AddPanel(Panel pnl, UserControl myctl)
 {
  pnl.Controls.Clear();
  pnl.Controls.Add(myctl);
 }
}

这是主要表格

private void Form1_Load(object sender, EventArgs e)
{
 MainController.AddPanel(pnlMain, myctrl);
}

其中pnlMain是Panel,myctrl是UserControl 我知道我在传递UserControl时遗漏了一点。我只是想不出来。

2 个答案:

答案 0 :(得分:0)

一种简单的方法是:

  1. 创建全局静态类

    static class Globals
    {
      public static FrameworkElement FE_Global = null;
    }
    
  2. 然后,每当您创建usercontrol的实例时,都会将其传递给此全局变量

    MyUserControl control = new MyUserControl();
    Globals.FE_Global = control;
    
  3. 现在您可以在任何类别的任何地方访问它

    MyUserControl cntl = FE_Global as MyUserControl;
    
  4. 注意:每次创建控件实例并将其传递给全局变量时,旧用户控件将被新用户控件替换。

答案 1 :(得分:0)

你不能这样打电话给你的班级:

MainController.AddPanel(pnlMain, myctrl);

除非您必须将class更改为static

public static void AddPanel(Panel pnl, UserControl myctl)
 {
  pnl.Controls.Clear();
  pnl.Controls.Add(myctl);
 }

这是使用自定义用户控件并将其添加到表单的一个工作示例:

假设您已经创建了UserControl Project

Form1中:

UserControl myctrl = new UserControlForm.UserControl1();
        private void Form1_Load(object sender, EventArgs e)
        {
            MainController.AddPanel(panel1, myctrl);
        }

类别:

class MainController
    {
        public static void AddPanel(Panel pnl, UserControl myctl)
        {
            pnl.Controls.Clear();
            pnl.Controls.Add(myctl);
        }
    }

添加到参考UserControlForm.dll