日期:2014-05-17  浏览次数:21063 次

某类获取主窗体中的public变量
如题:
主窗体中有个ArrayList ar
我在类trends中某个函数想调用它该怎么写?
还有 不能通过构造函数来传值,否则传来的值为null
这个ar是变化比较频繁的,
不知道有没有方法在trends中用到ar的函数直接调用;



还有个问题 其他类如何调用主窗体的实例啊,不new ,就是当前打开的窗体
我在Program.cs进行了改动:
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Form1 ff = new Form1();
            Application.Run(ff);
不知如何调用

------解决方案--------------------
引用:
Quote: 引用:

Program.cs中
public static Form1 ff = new Form1();

在任何地方都可以这样访问 Program.ff.ar。

......貌似错的

用全局静态变量应该没问题的吧.变量声明写在 main函数外.在main函数里new.
需要处理的是,一旦窗口被关闭(释放)后,访问可能引发问题(你这个例子貌似不存在,它是主窗口。)
引用:
var ff = Application.OpenForms.OfType<Form1>().First();
ff.ar

这个方法很不错。得到程序所有打开窗口中Form1类型的窗口中的第一个。不过要打开了多个窗口副本会遇到额外的问题(你这个例子也不存在这个问题,它是主窗口。)
------解决方案--------------------
仅供参考。
    public partial class Form1 : Form
    {
        public static ArrayList ar;
        public Form1()
        {
            InitializeComponent();
            ar = new ArrayList();
        }
    }
    public class trends
    {
        public void _trends()
        {
            ArrayList _ar = Form1.ar;
        }
    }

------解决方案--------------------
//类:
public class Trends
{
    private Form ff;
    //带参数构造函数
    public trends(Form ff)
    {
        this.ff = ff;
    }
}
//主窗体
Form

//类的使用窗体
//该窗体可以取到主窗体Form的实例,这个百度都有
Form ff = xxxx;
Trends ts = new Trends(ff);
//原理是将窗体作为变量传递给类