WindowsForm TextBox 자리 차지 문자 실현

WinForm 프로그램 에 서 는 TextBox 텍스트 입력 상자 의 대체 자 를 실현 하 는 방식 도 많 습 니 다.가장 많이 사용 되 는 방법 은 Windows Api SendMessage 함수 에 기반 하여 EM 을 보 내 는 것 입 니 다.SETCUEBANNER 메시지 나 TextBox 자체 초점 이벤트 로 처리 합 니 다.

SendMessage 함수 구현
TextBox 를 계승 하 는 ZhmTextBox 입력 상자 컨트롤 을 만 들 고 Placeholder 속성 을 추가 하여 Placeholder 의 set 방법 에서 EM 을 보 냅 니 다.SETCUEBANNER 소식

public class ZhmTextBox: TextBox
{
 private const int EM_SETCUEBANNER = 0x1501;

 [DllImport("user32.dll", CharSet = CharSet.Auto)]
 private static extern Int32 SendMessage(IntPtr hWnd, int msg, int wParam, [MarshalAs(UnmanagedType.LPWStr)]string lParam);

 private string placeholder = string.Empty;
 public string Placeholder
 {
 get { return placeholder; }
 set
 {
  placeholder = value;
  SendMessage(Handle, EM_SETCUEBANNER, 0, Placeholder);
 }
 }
}
항목 을 다시 컴 파일 하면 도구 상자 에서 ZhmTextBox 컨트롤 을 찾 은 다음 ZhmTextBox 의 Place holder 속성 을 설정 할 수 있 습 니 다.

TextBox 를 통한 GotFocus 와 LostFocus 사건
마이크로소프트 가 왜 TextBox 의 이 두 사건 을 Browsable 을 false 로 표시 해 야 하 는 지 모 르 겠 지만 VS 속성 패 널 에서 이 두 사건 을 찾 을 수 없어 수 동 으로 삭제 할 수 밖 에 없습니다.

private void Form1_Load(object sender, EventArgs e)
{
 textBox1.Text = "         ...";
 textBox1.LostFocus += TextBox1_LostFocus;
 textBox1.GotFocus += TextBox1_GotFocus;
}

private void TextBox1_GotFocus(object sender, EventArgs e)
{
 textBox1.Text = "";
}

private void TextBox1_LostFocus(object sender, EventArgs e)
{
 if (string.IsNullOrWhiteSpace(textBox1.Text))
 textBox1.Text = "         ...";
}

모든 컨트롤 이 이렇게 훑 히 는 것 이 귀 찮 으 면 TextBox 류 를 확장 하여 하위 구조 에 이벤트 처 리 를 넣 고 호출 할 수 있 습 니 다.이렇게 사용 할 때 도 편리 합 니 다.구체 적 인 코드 는 쓰 지 않 고 관심 있 는 것 은 스스로 실현 할 수 있다.
이 글 은 윈도 우즈 Form 에서 TextBox 자리 차지 문자 Placeholder 알림 을 실현 하 는 것 에 관 한 글 입 니 다.더 많은 TextBox 자리 차지 문자 Placeholder 알림 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기