views:

1310

answers:

4

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 caret is still shown.

The blinking input caret is confusing. How do I hide it?

+2  A: 

If you disable the text box (set Enable=false), the text in it is still scrollable and selectable. If you don't like the visual presentation of a disabled text box (gray background usually) you can manually override the colors.

Be warned, manually overriding colors is going to make your form/control look weird on systems that do not use the default color/theme settings. Don't assume that because your control is white that everyone's control is going to be white. That's why you should always use the system colors whenever possible (defined in the System.Drawing.SystemColors enumeration) such as SystemColors.ControlLight.

Simon Gillbee
A: 

AFAIK, this cannot be done. The TextBox control is a funny control because it actually has a lot of behaviour that can't be modified due to the way it taps into the operating system. This is why many of the cool custom TextBoxes are written from scratch.

I am afraid you may not be able to do what you wish to do :(

Rob Cooper
+3  A: 

You can do through a win32 call

DllImport("user32")] private static extern bool HideCaret(IntPtr hWnd);
public void HideCaret()
{
    HideCaret(someTextBox.Handle);
}
Lars Truijens
Dont forget `using System.Runtime.InteropServices;`and `ShowCaret(IntPtr hWnd);`
Sam
A: 

When using the win32 call don't forget to hide the cursor in the textbox's GotFocus event.

Landon