System.Windows.Forms.TextBox에서 입력 캐럿을 어떻게 숨깁니까?

StackOverflow https://stackoverflow.com/questions/44131

  •  09-06-2019
  •  | 
  •  

문제

가변 길이 메시지를 표시하고 텍스트를 선택할 수 있도록 해야 합니다.텍스트 편집을 허용하지 않는 TextBox ReadOnly를 만들었지만 입력 캐럿이 계속 표시됩니다.

깜박이는 입력 캐럿이 혼란스럽습니다.어떻게 숨길 수 있나요?

도움이 되었습니까?

해결책

win32 호출을 통해 할 수 있습니다

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

다른 팁

win32 호출을 사용할 때 텍스트 상자의 GotFocus 이벤트에서 커서를 숨기는 것을 잊지 마십시오.

완전성을 위해 다음과 같은 기능을 사용하는 데 필요했습니다. DevExpress WinForms TextEdit 제어.

그들은 이미 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() 어디든, 예를 들어텍스트 편집 컨트롤이 포함된 양식의 생성자에서.

아마도 이것은 미래에 누군가에게 도움이 될 것입니다.

텍스트 상자를 비활성화하면(설정 Enable=false), 그 안의 텍스트는 여전히 스크롤 가능하고 선택 가능합니다.비활성화된 텍스트 상자(보통 회색 배경)의 시각적 표현이 마음에 들지 않으면 수동으로 색상을 재정의할 수 있습니다.

색상을 수동으로 재정의하면 기본 색상/테마 설정을 사용하지 않는 시스템에서 양식/컨트롤이 이상하게 보일 수 있습니다.귀하의 컨트롤이 흰색이라고 해서 모든 사람의 컨트롤이 흰색일 것이라고 가정하지 마십시오.그렇기 때문에 가능하면 항상 시스템 색상을 사용해야 합니다( System.Drawing.SystemColors 열거)와 같은 SystemColors.ControlLight.

AFAIK, 이거 할 수 없다 완료됩니다.TextBox 컨트롤은 실제로 다음과 같은 기능을 갖고 있기 때문에 재미있는 컨트롤입니다. 많은 운영 체제를 활용하는 방식으로 인해 수정할 수 없는 동작입니다.이것이 바로 많은 멋진 사용자 정의 TextBox가 처음부터 작성되는 이유입니다.

하고 싶은 일을 하지 못할 수도 있다는 생각이 듭니다. :(

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top