zoukankan      html  css  js  c++  java
  • 一个窗体(类)调用另一个窗体(类)参数(窗体参数传递包括控件)方法总结

    大致分4种情况:

    1.声明Static静态,有静态类、静态变量、内部静态属性等,通过声明static,我们可以直接用类名来访问;

    例如:public static string abc;//form1中声明

    在form2中则:Form1.abc

    2.使用构造函数,通过窗体在另一个窗体中实例化时传递参数,然后赋予引用取得变量值,这种方式比较常见;

    eg:在Form1中:private string a; public Form1(string b){a=b;}

    在Form2中:private string c;Form1 f1 = new Form1(c);

    3.用公共属性或方法,实际上这也可以算是构造式,只有在不是static情况下,也要在窗体实例化后来引用;

    eg:在Form1中:private string a;

    public string A{ get{return a;} set{a=value;} }

    在Form2中:Form1 f1 = new Form1();                  f1.A;//引用

    4.通过Application.OpenForms[index].Controls[index]遍历索引获取另一个窗体的控件,在一个窗体操纵另一个窗体控件中比较常用,下面以2个不同窗体操纵TreeView来说明:

    eg:在Form1中加入TreeView控件;

    在Form2中:

    Form myform = Application.OpenForms["Form1"].FindForm();

    TreeView tv = (TreeView)myform.Controls["treeView1"];//这样我们就获取到了Form1中的控件体

    接着添加节点:

    注意2个问题:1)操纵主窗体的进程会引起进程同步,所以我们要改成异步进程(Thread/委托事件);

    2)调用Invoke/BeginInvoke,注意窗口句柄和参数是否合适;

    //下面使我们增加节点的操作代码

    if (tv.IsHandleCreated)
                {
                    object[] mytv = new object[2];
                    mytv[0] = new TreeView();
                    mytv[1] = kml.Name.ToString();
                    tv.BeginInvoke(new addNodes(addNode), mytv);
                }

    //增加节点委托
            public delegate void addNodes(TreeView treeview,string node);
            public void addNode(TreeView treeview,string node)
            {
                tv.Nodes.Add(node);
            }

    总之,窗体间引用会增加额外的线程(方式4),不必要的时候用构造函数是最比较好,方式选择依系统性能和个人爱好所定!

    综合下,改用方式:

    private delevate void 委托(参数);

    private void 方法(参数)

    {

        if(控件.InvokeRequired)

    {

        委托 abc = new 委托(方法);

        Invoke(abc,new object[]{参数});

    }

    else

    {

        控件:执行普通控件操作。

    }

    }


    作者:jinqier
    出处:http://www.cnblogs.com/jinqier/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    深入浅出ES6(十二):代理 Proxies
    深入浅出ES6(十一):生成器 Generators,续篇
    深入浅出ES6(十):集合
    深入浅出ES6(九):学习Babel和Broccoli,马上就用ES6
    深入浅出ES6(八):Symbols
    根据后端返回的数据进行中文排序操作
    vue之组件(组件之间相互传参)
    mongodb用户权限增删改查
    mongodb添加文件和导出文件
    js中cookie编码解码操作
  • 原文地址:https://www.cnblogs.com/jinqier/p/2546775.html
Copyright © 2011-2022 走看看