Search code examples
c#.netwinformscaret

Custom Caret for WinForms TextBox


I'm developing a custom HyperTerminal like application in a WinForms .Net 2.0 application. I have a multiline TextBox in a Panel in which you can interact with a hardware device.

My customer wants to have a custom Caret, a filled rectangle the size of one character space instead of the vertical line that is by default.

I know .Net does not provide an option to do this by default, but there must some Windows function to do it.


Solution

  • Assume a form with a textbox on it:

    public partial class Form1 : Form
    {
        [DllImport("user32.dll")]
        static extern bool CreateCaret(IntPtr hWnd, IntPtr hBitmap, int nWidth, int nHeight);
        [DllImport("user32.dll")]
        static extern bool ShowCaret(IntPtr hWnd);
    
        public Form1()
        {
            InitializeComponent();
        }
    
        private void Form1_Shown(object sender, EventArgs e)
        {
            CreateCaret(textBox1.Handle, IntPtr.Zero, 10, textBox1.Height);
            ShowCaret(textBox1.Handle);
        }
    }