How do I hide the input caret in a System.Windows.Forms.TextBox?

前端 未结 5 1857
暖寄归人
暖寄归人 2021-01-12 07:21

I need to display a variable-length message and allow the text to be selectable. I have made the TextBox ReadOnly which does not allow the text to be edited, but the input c

5条回答
  •  刺人心
    刺人心 (楼主)
    2021-01-12 08:11

    Just for completeness, I needed such a functionality for using with a DevExpress WinForms TextEdit control.

    They already do provide a ShowCaret and a HideCaret method, unfortunately they are protected. Therefore I created a derived class that provides the functionality. Here is the full code:

    public class MyTextEdit : TextEdit
    {
        private bool _wantHideCaret;
    
        public void DoHideCaret()
        {
            HideCaret();
    
            _wantHideCaret = true;
        }
    
        public void DoShowCaret()
        {
            ShowCaret();
    
            _wantHideCaret = false;
        }
    
        protected override void OnGotFocus(EventArgs e)
        {
            base.OnGotFocus(e);
    
            if (_wantHideCaret)
            {
                HideCaret();
            }
        }
    }
    

    To use the code, simply use the derived class instead of the original TextEdit class in your code and call DoHideCaret() anywhere, e.g. in the constructor of your form that contains the text edit control.

    Maybe this is helpful to someone in the future.

提交回复
热议问题