【c#】關於設定RichTextBox背景透明+無游標只讀狀態
阿新 • • 發佈:2019-01-26
今天在設定一個軟體的RichTextBox的時候,需要一個背景透明,不可編輯的文字展示框,而且還要向文字框中不停地追加資料,所以我選擇修改winform自帶的richtextbox元件。
首先,我們先新建一個自定義元件,繼承與RichTextBox,在建構函式中新增雙緩衝避免元件閃爍:
public DsAlphaRichTextBox() { InitializeComponent(); this.GetType().GetProperty("DoubleBuffered", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).SetValue(this, true, null); }
並重寫一個函式,用於將整個元件設定成為背景透明的:
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x20;
return cp;
}
}
接著,設定元件的Readonly為true,設定為只讀狀態,但是元件中的游標還是存在的,因此,我們需要繼續重寫一個函式,將游標去除:
首先,在建構函式中,新增this.Cursor = Cursors.Arrow;
然後,重寫函式:
這樣,我們自定義的透明,只讀,無滑鼠游標的RichTextBox元件就完成了。protected override void WndProc(ref Message m) { if (m.Msg == 0x7 || m.Msg == 0x201 || m.Msg == 0x202 || m.Msg == 0x203 || m.Msg == 0x204 || m.Msg == 0x205 || m.Msg == 0x206 || m.Msg == 0x0100 || m.Msg == 0x0101) { return; } base.WndProc(ref m); }