System.Windows.Forms.TextBox에서 입력 캐럿을 어떻게 숨깁니까?
문제
가변 길이 메시지를 표시하고 텍스트를 선택할 수 있도록 해야 합니다.텍스트 편집을 허용하지 않는 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가 처음부터 작성되는 이유입니다.
하고 싶은 일을 하지 못할 수도 있다는 생각이 듭니다. :(