以下是運用 TraceListener 類別作出類似 DebugView 功能。
public partial class fmTraceLogViewer : Form
{
private static fmTraceLogViewer mSingleton;
private fmTraceLogViewer()
{
InitializeComponent();
Trace.Listeners.Add(new myTraceListener(this));
}
public static fmTraceLogViewer GetSingleton()
{
if (mSingleton == null)
{
mSingleton = new fmTraceLogViewer();
}
return mSingleton;
}
#region Disable Form 關閉按鈕
private const int CP_NOCLOSE_BUTTON = 0x200;
protected override CreateParams CreateParams
{
get
{
CreateParams myCp = base.CreateParams;
myCp.ClassStyle = myCp.ClassStyle | CP_NOCLOSE_BUTTON;
return myCp;
}
}
#endregion
public void Log(string message)
{
if (this.InvokeRequired)
{
this.BeginInvoke(new MethodInvoker(delegate { Log(message); }));
}
if (this.Visible == false)
{
this.Show();
}
rtbLogVeiwer.AppendText(message + "\n");
//大於50列, 刪除第一列
if (rtbLogVeiwer.Lines.Length > 50)
{
int start = rtbLogVeiwer.GetFirstCharIndexFromLine(0);
int end = rtbLogVeiwer.GetFirstCharIndexFromLine(1);
rtbLogVeiwer.Select(start, end);
rtbLogVeiwer.SelectedText = "";
}
//ScrollT 移到最下端
rtbLogVeiwer.SelectionStart = rtbLogVeiwer.Text.Length;
rtbLogVeiwer.ScrollToCaret();
this.WindowState = FormWindowState.Normal;
}
private void btnRichTextBoxClear_Click(object sender, EventArgs e)
{
rtbLogVeiwer.Clear();
}
}
public class myTraceListener : DefaultTraceListener
{
fmTraceLogViewer mFm;
public myTraceListener(fmTraceLogViewer fm)
{
mFm = fm;
}
public override void WriteLine(string message)
{
mFm.Log(message);
}
}
沒有留言:
張貼留言