从C#表单调用用户控件的方法?

时间:2019-06-03 09:59:44

标签: c# forms methods dynamic-usercontrols

我在usercontrol schuler中有方法listviewupdate()。 Usercontrol schuler的格式为form1。 然后我有form2。当我单击form2中的按钮时,我想调用方法listviewupdate()。

我尝试在form1中创建第二个方法,该方法调用listviewupdate()方法,然后在表单2中调用此第二个方法,但出现错误。 有人可以帮我吗?

2 个答案:

答案 0 :(得分:0)

在文件Program.cs中,您可以定义全局可访问变量:

static class Program
{
    //  for external access to Form1 methods
    public static Form1 MainForm;

    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main(string[] args)
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        MainForm = new Form1(args);
        Application.Run(MainForm);
    }
}

然后,可以使用静态变量MainForm通过Form1访问Program.MainForm.MyMethod()的任何公共方法。

假设您可以从Form2内部访问Form1对象,则可以使用Form2对象变量从Form2中调用Form1方法方法。

请注意,(不知不觉中)使用多个线程时,您可能会遇到问题。了解有关BeginInvoke的信息。

答案 1 :(得分:0)

@Axel Kemper感谢您的回复。我做了您用Program.MainForm.MyMethod()告诉我的方法,但是没有找到MyMethod()。 然后我进入form1.Designer,在那里我看到将usercontrol设置为private,也将其切换为public,现在它可以与Program.MainForm.schuler1.MyMethod() //schuler1 is the name of my user control一起使用。

我只是不明白为什么它不适用于

Form1 form1 = Application.OpenForms[1] as Form1; form1.schuler1.ListviewUpdate(); //schuler1 is the name of my usercontrol

即使将用户控件设置为public,我也会在main.schuler1.ListviewUpdate();中收到错误“ System.NullReferenceException”