Можете ли вы сделать что-то вроде:
if(x == null)
{
x = 0;
}
Можно использовать API-функцию HideCaret, Проверить ее на www.pinvoke.net. Прием должен знать, когда назвать его. Очень простое и грязное решение состоит в том, чтобы запустить одноразовый таймер в событии Enter RTF. При захвате корректного сообщения в WndProc, поскольку предлагает nobugs, лучше, к сожалению, захваченное сообщение является неправильным...
У меня это работает:
public class RichTextLabel : RichTextBox
{
public RichTextLabel()
{
base.ReadOnly = true;
base.BorderStyle = BorderStyle.None;
base.TabStop = false;
base.SetStyle(ControlStyles.Selectable, false);
base.SetStyle(ControlStyles.UserMouse, true);
base.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
base.MouseEnter += delegate(object sender, EventArgs e)
{
this.Cursor = Cursors.Default;
};
}
protected override void WndProc(ref Message m) {
if (m.Msg == 0x204) return; // WM_RBUTTONDOWN
if (m.Msg == 0x205) return; // WM_RBUTTONUP
base.WndProc(ref m);
}
}
Надеюсь, это поможет
Сделайте что-нибудь, чтобы он не получил «фокус ввода»: он будет иметь курсор и его можно будет редактировать, только пока он находится в фокусе.