본문 바로가기

C# Winform

C# Winform | Watermark in a textbox | Placeholder

by C기억저장소 2020. 2. 27.

C# Winform | Watermark in a textbox | Placeholder

 

Watermark Class 버전 참고

 

C# Winform | Watermark in a textbox | Placeholder | custom control

C# Winform | Watermark in a textbox | Placeholder | custom control 1. TextBox 상속 클래스 만들기 프로젝트 -> 새 항목 추가 -> 클래스 클래스 이름 : wmTextBox.cs 2. TextBox 상속 클래스 Code..

program-day.tistory.com

 

c# Textbox 기본 컨트롤에 Watermark 삽입.

 

1. Textbox Event 이용하기

- Enter / Leave 이벤트 사용.

 

 

가장 기본적으로 Textbox의 Text 속성을 이용하는 방식이다.

 

private void textBox_Enter(object sender, EventArgs e)
{
    if (textBox.Text == "WatermarkText")
    {
        textBox.Text = "";
        textBox.ForeColor = Color.Black;
    }
}
 
private void textBox_Leave(object sender, EventArgs e)
{
    if (textBox.Text == "")
    {
        textBox.Text = "WatermarkText";
        textBox.ForeColor = Color.Gray;
    }
}
cs

 

위의 방식은 Textbox가 비어있을때("") 일때 해당 Textbox를 벗어나면 Text에 "WatermarkText"로 변경하고 글씨색을 Gray로 변경해 Watermark처럼표현한다.

하지만 문제는 Text를 보고 판단하기때문에 혹시라도 Textbox에 "WatermarkText"를 입력하면 Enter이벤트에 Watermark로 인식되어 Textbox의 Text를 ""로 초기화 한다.

 

그래서 다음같이 ForeColor를 이용하면 Watermark로 사용할 Text와 입력한 Text가 같아도 원하는 대로 구현할수 있다.

 

private void textBox_Enter(object sender, EventArgs e)
{
    if (textBox.ForeColor == Color.Gray)
    {
      textBox.Text = "";
      textBox.ForeColor = Color.Black;
    }
}
 
private void textBox_Leave(object sender, EventArgs e)
{
    if (textBox.Text == "")
    {
      textBox.Text = "WatermarkText";
      textBox.ForeColor = Color.Gray;
    }
}
cs

 

마지막으로 하나의 From안에서 여러개의 Textbox에 Watermark를 넣어야 할경우 각 Textbox마다 Enter / Leave 이벤트를 등록하면 Textbox의 수만큼 이벤트 코드가 늘어나고 그만큼 중복되는 코드가 작성된다.

그래서 Enter / Leave 이벤트를 공통으로 사용하기 위해 각 Textbox의 Tag속성을 이용한다.

 

private void textBox_Enter(object sender, EventArgs e)
{
    TextBox textBox = sender as TextBox;
    if (textBox.ForeColor == Color.Gray)
    {
        textBox.Text = "";
        textBox.ForeColor = Color.Black;
    }
}
 
private void textBox_Leave(object sender, EventArgs e)
{
    TextBox textBox = sender as TextBox;
    if (textBox.Text == "")
    {
        textBox.Text = textBox.Tag.ToString();
        textBox.ForeColor = Color.Gray;
    }
}
cs
 

 

Textbox의 Teg속성에 사용할 Watermark Text를 입력해 놓으면 한 From에서 여러개의 Textbox에 Enter / Leave 이벤트를 공통으로 사용 할수있다.

 

Watermark Class 버전 참고

 

C# Winform | Watermark in a textbox | Placeholder | custom control

C# Winform | Watermark in a textbox | Placeholder | custom control 1. TextBox 상속 클래스 만들기 프로젝트 -> 새 항목 추가 -> 클래스 클래스 이름 : wmTextBox.cs 2. TextBox 상속 클래스 Code..

program-day.tistory.com