zoukankan      html  css  js  c++  java
  • 通过事件参数传值

       直接进入主题,今天写代码遇到一个问题。

      上图中,左边是一个窗体,右边是也是一个窗体,都停靠在一个MDI容器中。这个时候我通过点击左边的树,要将树的点击后的结点传给右边的窗体。

      按照平常的思路,我会在构造函数中传值,但问题是 每次点击后都会new一个新窗体,这个显然不符合要求。参考别人的代码,然后决定用事件传递选中结点的值。

      

      既然用到事件,首先必须定义事件

    //定义委托
    public delegate void ClickEventHander(object sender, ClickEventArgs e);
    
    public Class FrmMenu 
    {
    public event ClickEventHander NodeMouseClick;
    
    //树节点点击事件
    private void tvwSbd_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
    {
             if(NodeMouseClick!=null)
                        NodeMouseClick(sender,new ClickEventArgs (e.Node.Tag));//如果已加载事件,则将参数传递过去
             //打开窗体
    }
    }
    
    //定义Click事件继承于顶级事件
    public class ClickEventArgs:EventArgs
        {
            //需要传递的变量
            private  TreeNode _node;
            
            public TreeNode Node{
                get { return _node; }
            }
            public ClickPorjectDEventArgs(TreeNode node)
            {
                this._node= node;
            }
        }
    
    
    
    -----------------------------------------------------------------------
    
    
    /*左边窗体的事情做完了,现在该在右边船体加载事件*/
    
    FrmMenu frmMenu; //左边窗体
    MainForm mainForm; //主窗体
    
     private void InitControls()
            {
                mainForm = this.ParentForm as MainForm; //获取主窗体
    
                //将两个实例化 
                frmMenu = Portal.gc.Menu;
                mainForm = Portal.gc.MainDialog;
    
                mainForm = Owner as MainForm;
                frmMenu.NodeMouseClick+=new ClickEventHander(frmMenu_NodeMouseClick);
                this.FormClosed += new FormClosedEventHandler(Logoff);
    
            }
            string strFileName;
            void frmMenu_NodeMouseClick(object sender, ClickPorjectDEventArgs e)
            {
                // 返回结果 projectid;
                node= e.Node.Tag;
                //
                //得到了传过来的值就可以尽情发挥了
            }
     
            /// <summary>
            /// 关闭窗体后注销事件
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void Logoff(object sender, EventArgs e)
            {
                frmMenu.NodeMouseClick-= new ClickEventHander(frmMenu_NodeMouseClick);
                frmMenu.DockState = dockState;//菜单窗体先前状态;
            }
    
    //启动类
    static class Portal
        {
            // Fields
            public static GlobalControl gc = new GlobalControl(); 
            private static Mutex mutex = null;
    }

      大体情况就是这样吧,具体细节有待慢慢体会……又是美好的一天

  • 相关阅读:
    shell脚本中的进度指示器
    shell脚本输出带颜色字体
    Linux awk命令用法
    Kubernetes系列02—Kubernetes设计架构和设计理念
    kubernetes学习01—kubernetes介绍
    kubernetes 06—kubernetes资源清单定义
    http服务详解 一次完整的请求过程
    Mysql数据库的二进制安装和基础入门操作
    项目实战10.1—企业级自动化运维工具应用实战-ansible
    linux OSI七层模型、TCP/IP协议栈及每层结构
  • 原文地址:https://www.cnblogs.com/xiangzhong/p/2629523.html
Copyright © 2011-2022 走看看