以下是學習筆記:
思路:
正常時候顯示Label標簽,有報警時候顯示滾動條控件。
Label標簽和滾動條標簽大小一樣,重疊在一起,通過是否報警,來顯示或隱藏控件,達到切換正常和報警的狀態。
1,安裝NuGet滾動條控件:SeeSharpToolsJY.GUI

2,控件布局
【2.1】

【2.2】
ScrollingText的Visalbe設置為False;

【2.3】

3,代碼實現
【3.1】
//【報警顯示步驟1】在主窗體添加報警委托
/// <summary>
/// 參數1:報警信息。參數2:這個報警是觸發還是消除
/// </summary>
private Action<string, bool> AddAlarm;
【3.2】
//【報警顯示步驟2】在監控窗體添加報警委托的原型
public void AddAlarm(string info, bool isAck)
{
if (isAck)
{
//如果
if (!AlarmInfoList.Contains(info))
{
AlarmInfoList.Add(info);
}
}
else
{
if (AlarmInfoList.Contains(info))
{
AlarmInfoList.Remove(info);
}
}
//刷新界面
RefreshAlarm();
}
/// <summary>
/// 刷新報警控件界面顯示
/// </summary>
private void RefreshAlarm()
{
this.Invoke(new Action(() =>
{
if (AlarmInfoList.Count == 0)
{
this.led_state.Value = true;
this.lbl_info.Visible = true;
this.lbl_scrollInfo.Visible = false;
this.lbl_info.Text = "系統運行正常";
}
else if (AlarmInfoList.Count == 1)
{
this.led_state.Value = false;
this.lbl_info.Visible = true;
this.lbl_scrollInfo.Visible = false;
this.lbl_info.Text = AlarmInfoList[0];
}
else
{
this.led_state.Value = false;
this.lbl_info.Visible = false;
this.lbl_scrollInfo.Visible = true;
this.lbl_scrollInfo.Text = string.Join(" / ", AlarmInfoList).Trim();
}
}));
}
/// <summary>
/// 報警信息列表
/// </summary>
private List<string> AlarmInfoList=new List<string>();
【3.2】
frm=new FrmMonitor();
//打開監控窗體的時候,主窗體的AddLog委托綁定監控窗體的AddLog方法
this.AddLog = ((FrmMonitor) frm).AddLog;
//【報警步驟3】打開監控窗體的時候,主窗體的AddAlarm委托綁定監控窗體的AddAlarm方法
this.AddAlarm= ((FrmMonitor)frm).AddAlarm;
4,測試
private void button1_Click(object sender, EventArgs e)
{
AddAlarm(this.textBox1.Text, this.checkBox1.Checked);
}

