2008-09-04 1 views
6

Мне нужно отобразить сообщение переменной длины и разрешить выбор текста. Я сделал TextBox ReadOnly, который не позволяет редактировать текст, но входной карет все еще отображается.Как скрыть вкладку ввода в System.Windows.Forms.TextBox?

Мигающий входной карет сбивает с толку. Как скрыть это?

ответ

10

Вы можете сделать через win32 вызов

[DllImport("user32.dll")] 
static extern bool HideCaret(IntPtr hWnd); 
public void HideCaret() 
{ 
    HideCaret(someTextBox.Handle); 
} 
+2

Не забывайте `using System.Runtime.InteropServices;` и `ShowCaret (IntPtr hWnd);` – Sam 2010-02-13 16:10:06

1

Если вы отключите текстовое поле (Enable=false), текст в нем по-прежнему прокручивается и выбирается. Если вам не нравится визуальное представление отключенного текстового поля (обычно серый фон), вы можете вручную переопределить цвета.

Будьте осторожны, вручную переопределяющие цвета сделают вашу форму/элемент управления странным в системах, которые не используют настройки цвета/темы по умолчанию. Не предполагайте, что, поскольку ваш контроль белого цвета, все элементы управления будут белыми. Вот почему вы всегда должны всегда использовать системные цвета (определенные в перечислении System.Drawing.SystemColors), например SystemColors.ControlLight.

+1

Нет, это невозможно выбрать (или прокрутить), если текстовое поле отключено. Вероятно, вы думаете сделать его доступным только для чтения. – 2017-02-15 12:53:29

-4

AFAIK, этот невозможно сделаем. Элемент управления TextBox - забавный элемент управления, потому что на самом деле он имеет лот, который нельзя изменить из-за того, как он вступает в операционную систему. Вот почему многие классные пользовательские TextBoxes написаны с нуля.

Я боюсь, что вы не можете быть в состоянии делать то, что вы хотите сделать :(

4

При использовании вызова win32 не забудьте скрыть курсор в GotFocus случае текстового поля в.

+2

Спасибо за это! Я пробовал все, даже Enter, но это не сработает, но этот делает работу! – ViFer 2014-05-24 08:59:00

3

Просто для полноты картины, мне нужна такая функциональность для использования с DevExpress WinForms TextEdit control.

Они уже делают Provid e a ShowCaret и HideCaret, к сожалению, они защищены. Поэтому я создал производный класс, который обеспечивает функциональность. Вот полный код:

public class MyTextEdit : TextEdit 
{ 
    private bool _wantHideCaret; 

    public void DoHideCaret() 
    { 
     HideCaret(); 

     _wantHideCaret = true; 
    } 

    public void DoShowCaret() 
    { 
     ShowCaret(); 

     _wantHideCaret = false; 
    } 

    protected override void OnGotFocus(EventArgs e) 
    { 
     base.OnGotFocus(e); 

     if (_wantHideCaret) 
     { 
      HideCaret(); 
     } 
    } 
} 

Чтобы использовать код, просто использовать производный класс вместо оригинального TextEdit класса в коде и вызвать DoHideCaret() где угодно, например, в конструкторе вашей формы, который содержит элемент управления редактирования текста.

Возможно, это полезно кому-то в будущем.

Смежные вопросы