1,主窗體:中添加日志的委托
private void FrmMain_Load(object sender, EventArgs e) { //打開默認的窗體:實時監控窗體 CommonNaviButton_ClickEvent(this.btn_monitor,null); //板卡初始化 AddLog(0, "板卡正在初始化板卡正在初始化板卡正在初始化板卡正在初始化板卡正在初始化板卡正在初始化板卡正在初始化板卡正在初始化"); //測試其他的日志顯示 for (int i = 0; i < 100; i++) { AddLog(i,i.ToString()+ "板卡正在初始化板卡正在初始化板卡正在初始化板卡正在初始化板卡正在初始化板卡正在初始化板卡正在初始化板卡正在初始化"); } } //添加日志委托 private Action<int, string> AddLog;
2,實時監控窗體:添加imageList
3,實時監控窗體:添加ListView
【2.1】ListView設置1
視圖:Details
小imageList:選擇上面的imageList
【2.2】ListView設置2:添加2列
【2.3】ListView設置3:不顯示列表頭
【2.4】ListView設置4:可以看到完整信息內容
ShowItemToolTips:True。默認False改到True。當內容長度超過1行,可以提示看到完成的信息內容
【2.5】ListView設置5:不顯示滾動條
Scrollable:False:不顯示滾動條
3,實時監控窗體:編寫委托對應的方法
public partial class FrmMonitor : Form { public FrmMonitor() { InitializeComponent(); //設置第二列內容的寬度 this.lvw_info.Columns[1].Width = this.lvw_info.Width - this.lvw_info.Columns[0].Width; } /// <summary> /// 添加日志信息 /// </summary> /// <param name="index">日志等級(0:info,1:warning,2:error)</param> /// <param name="log">日志信息</param> public void AddLog(int index, string log) { if (!this.lvw_info.InvokeRequired)//如果沒有跨線程訪問 { ListViewItem lstItem=new ListViewItem(CurrentTime,index); lstItem.SubItems.Add(log); this.lvw_info.Items.Insert(0, lstItem);//保證最新的顯示在第一條 //只保留最后100條記錄 if (lvw_info.Items.Count > 100) { lvw_info.Items.RemoveAt(100); } } else//如果有線程從多線程使用 { this.lvw_info.Invoke(new Action(() => { ListViewItem lstItem = new ListViewItem(CurrentTime, index); lstItem.SubItems.Add(log); this.lvw_info.Items.Insert(0, lstItem);//保證最新的顯示在第一條 //只保留最后100條記錄 if (lvw_info.Items.Count > 100) { lvw_info.Items.RemoveAt(100); } })); } } private string CurrentTime { get { return DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); } } }
4,主窗體打開監控窗體的時候:給委托綁定方法
frm=new FrmMonitor(); //打開監控窗體的時候,主窗體的AddLog委托綁定監控窗體的AddLog方法 this.AddLog = ((FrmMonitor) frm).AddLog;
5,日志效果: