想用WinForm写点东西,遇到一个郁闷的问题,想在Forms之间相互传值遇到困难。上网找到一个解决方法,又自创一种。假设要在Form1中创建Form2,Form2要访问Form1,最简单的方法是给Form2加上一个
public Form1 parent;
Form1创建Form2时这样写:
Form2 f2 = new Form2();
f2.parent = this;
f2.Show();
f2.parent = this;
f2.Show();
就在Form2中可以用 parent 访问Form1了。
但是如果Form1和Form2没有父子关系,Form2不是在Form1中创建,Form2也不是在Form1中创建,怎么得到对方的实例呢?这里以Form1为例。我们创建另一个Form,用它来实例化其他Form,比如叫 Starter。
在Starter中加上静态变量f1和静态方法GetForm1():
public partial class Starter : Form
{
public static Form1 f1;
public static Form1 GetForm1()
{
if (f1 == null)
{
f1 = new Form1();
}
return f1;
}
public Starter()
{
InitializeComponent();
GetForm1().Show();
}
}
就可以用Starter.GetForm1()得到f1啦。再把Starter设置为启动最小化,不在状态栏显示,我们就看不到它啦。
PS:还发现任何事件的 XXXing()处理函数里面都可以把事件的 EventArgs e这个 e.Cancel 设为 true,就把这个事件取消了,竟然现在才知道这么有用的东东。。。-_-