1. 程式人生 > >【c#】關於設定RichTextBox背景透明+無游標只讀狀態

【c#】關於設定RichTextBox背景透明+無游標只讀狀態

今天在設定一個軟體的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;

然後,重寫函式:

        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);
        }
這樣,我們自定義的透明,只讀,無滑鼠游標的RichTextBox元件就完成了。