如何让其它的类对象访问主程序控件?

在主程序有一个textbox控件,用来显示一些调试的信息或错误信息,如果其它类也需要访问的话,需要把这个控件设置为public 才可以,当时这样做违背高内聚,低耦合的原则,所以使用委托代理的方式来实现,首先在主程序类中定义如下函数:

     public void ShowLogInfo(string text, bool showdate = false, bool isrt = false)
        {
            string logtxt = string.Empty;

            if (showdate)
            {
                logtxt = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss", DateTimeFormatInfo.InvariantInfo) + " " + text;
            }
            else
            {
                logtxt = text;
            }

            //用delegate为了能让其它外部类也能调用 SaveLog 函数
            MethodInvoker threadappend = delegate()
            {
                tb_Log.AppendText(logtxt + "
");
                SaveLog(logtxt,isrt); 
            }; 
            BeginInvoke(threadappend); 
            
            Application.DoEvents();
        }

假设在类 ZKAction 中需要访问这个控件,则需要声明如下的委托:(注意参数的类型和数目要一致)

        //显示提示日志的委托代理事件
        public delegate void OnShowZKLogInfo(string text,bool showdate=false,bool isrt=false);
        public event OnShowZKLogInfo ShowZKLogInfo;

然后在主程序中创建类ZKAction的对象时,就可以绑定这个事件:

public ZKAction zkaction = new ZKAction(); 
zkaction.ShowZKLogInfo += new ZKAction.OnShowZKLogInfo(ShowLogInfo);

这样设置后,就可以在类ZKAction的内部方法中使用 ShowZKLogInfo 来把日志显示到主程序的 textbox 中了。

原文地址:https://www.cnblogs.com/lpq21314/p/9475462.html