C#--运动控制05--日志显示(ListView和imageList控件使用)
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,日志效果:


浙公网安备 33010602011771号