This is just few more options as extension to the solution #1.
I guess you don't like grey forecolor for disabled textbox.
If that the case, you might try to experiment with
ReadOnly
property. It keeps text black.
Another possibility is to keep text box enabled and handle KeyPress event like shown below:
private void textBox4_KeyPress(object sender, KeyPressEventArgs e)
{
e.Handled = true;
}
And finally third option: overriding
OnPaint
. I know you ruled it out, but thee is noting wring with it at all if you want to enhance your text box with additional properties or non standard behavior.