从表单c#调用usercontrol的方法?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (37)

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

我尝试在form1中创建第二个方法,该方法调用listviewupdate()方法,然后在表单2中调用第二个方法,但是我收到错误。有人能帮帮我吗?

提问于
用户回答回答于

@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,我也会收到错误“System.NullReferenceException” main.schuler1.ListviewUpdate();

用户回答回答于

在您的文件中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可用于访问Form1via的任何公共方法Program.MainForm.MyMethod()

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

请注意,在(不知不觉中)使用多个线程时,您可能会遇到问题。阅读BeginInvoke

扫码关注云+社区

领取腾讯云代金券