Form2里如何调用定义在Form1里的类
Form1里定义的类
void ShowMsg(string str)
{
TextBox1.AppendText(str + "\r\n");
}
现在想要在Form2里调用ShowMsg,有什么办法可以实现。
还有个问题,担心TextBox1会无法被Form2窗体调用,如何避免?
------解决方案--------------------只要在一个命名空间下,或正确的引用命名空间,并且是public的类就可以调用。
至于textbox,如果是public的就没有问题,想避免就设置成public,而不是private or protected。
------解决方案--------------------这不是类,而是方法,你可以将它定义成public
但是如我给你的链接,最好不要直接去调用,而是应该使用属性和委托。
道理很简单,一旦你决意直接在窗体间互相调用,那么这些窗体中的某一个就没有办法单独拿到另一个项目中重用了。
------解决方案--------------------想要form2里调用form1里的方法,form2里必须能得到form1的引用才行。
form2得到form1的引用有很多种办法,可以Application.OpenForm["form1的名字"],或者直接把form1的引用传给form2
另外担心TextBox1会无法被Form2窗体调用,把TextBox1声明为public即可
------解决方案--------------------如果你能拿到form1对象的引用,那就把 ShowMsg定义为public最简单;
如果拿不到form1对象的引用,还是在form2里面定义个事件吧,在你想要调用 ShowMsg时执行事件即可,前提是你在form1中给form2的事件绑定了 ShowMsg方法。
form2:
public delegate void InvokeHandler(string msg);
public static InvokeHandler InvokeEvent;
在你想调用时执行if (InvokeEvent!=null)
{
InvokeEvent.Invoke();
}
form1:
在load中绑定form2的事件form2.InvokeEvent += ShowMsg;
formclosing中注销事件form2.InvokeEvent -= ShowMsg;
但是不知道你为什么要调用form1的方法?如果知道原因,可能会有好的办法应对。