Как отключить курсор в текстовом поле?

Есть ли способ отключить курсор в текстовом поле, не задав свойство Enable to false? Я пытался использовать свойство ReadOnly, но, несмотря на то, что я не могу писать в текстовом поле, курсор появляется, если я нажимаю текстовое поле. Итак, есть ли способ избавиться от этого курсора permamently?

Ответы

Ответ 1

В С# вы можете использовать следующее текстовое поле только для чтения:

public class ReadOnlyTextBox : TextBox
{
    [DllImport("user32.dll")]
    static extern bool HideCaret(IntPtr hWnd);

    public ReadOnlyTextBox()
    {
        this.ReadOnly = true;
        this.BackColor = Color.White;
        this.GotFocus += TextBoxGotFocus;
        this.Cursor = Cursors.Arrow; // mouse cursor like in other controls
    }

    private void TextBoxGotFocus(object sender, EventArgs args)
    {
        HideCaret(this.Handle);
    }
}

Ответ 2

Вместо этого вы можете использовать Label. Когда в дизайнере вы устанавливаете BorderStyle = Fixed3D, BackColor = Window и AutoSize = False, он очень похож на TextBox.

Однако курсор в TextBox предоставляется так, чтобы пользователь мог прокручивать текст, когда он длиннее, чем поле. Вы потеряете эту функциональность с помощью метки, если вы не уверены, что она всегда будет соответствовать. Кроме этого, невозможно удалить курсор из текстового поля.

Ответ 3

В С# вы можете отключить курсор в текстовом поле, временно отключив его, а затем снова включив текстовое поле, когда оно получает фокус. Обратите внимание, что нет необходимости делать текстовое поле только для чтения, если использовать этот метод. Например:

private void TextBox_Enter(object sender, EventArgs e)
{
  TextBox.Enabled = false;
  TextBox.Enabled = true;
}

Ответ 4

если вы поместите функцию hideCaret внутри события Textchange, это решит проблему.

    [DllImport("user32.dll")]
    static extern bool HideCaret(IntPtr hWnd);

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        HideCaret(textBox1.Handle);
    }

Ответ 5

Вы можете установить его программно.

textBox1.Cursor = Cursors.Arrow;

Ответ 6

вы можете использовать свойство RightToLeft текстового поля, установить его в true, вы не избавитесь от курсора, но он будет исправлен в правом углу и не будет отображаться автоматически после каждого текста вы вводите текстовое поле. Я использовал это для разработки приложения, такого как калькулятор Windows.