Winform透かしTextBox(ほぼ完璧)
5894 ワード
public partial class WaterTextBox : TextBox
{
private readonly Label lblwaterText = new Label();
public WaterTextBox()
{
InitializeComponent();
lblwaterText.BorderStyle = BorderStyle.None;
lblwaterText.Enabled = false;
lblwaterText.BackColor = Color.White;
lblwaterText.AutoSize = false;
lblwaterText.Top = 1;
lblwaterText.Left = 2;
lblwaterText.FlatStyle = FlatStyle.System;
Controls.Add(lblwaterText);
}
[Category(" "), Description(" ")]
public string WaterText
{
get { return lblwaterText.Text; }
set { lblwaterText.Text = value; }
}
public override string Text
{
set
{
lblwaterText.Visible = value == string.Empty;
base.Text = value;
}
get
{
return base.Text;
}
}
protected override void OnSizeChanged(EventArgs e)
{
if (Multiline && (ScrollBars == ScrollBars.Vertical || ScrollBars == ScrollBars.Both))
lblwaterText.Width = Width - 20;
else
lblwaterText.Width = Width;
lblwaterText.Height = Height - 2;
base.OnSizeChanged(e);
}
protected override void OnTextChanged(EventArgs e)
{
lblwaterText.Visible = base.Text == string.Empty;
base.OnTextChanged(e);
}
protected override void OnMouseDown(MouseEventArgs e)
{
lblwaterText.Visible = false;
base.OnMouseDown(e);
}
protected override void OnMouseLeave(EventArgs e)
{
lblwaterText.Visible = base.Text == string.Empty;
base.OnMouseLeave(e);
}
//protected override void OnEnter(EventArgs e)
//{
// lblwaterText.Visible = false;
// base.OnEnter(e);
//}
//protected override void OnLeave(EventArgs e)
//{
// if (string.IsNullOrEmpty(base.Text))
// lblwaterText.Visible = true;
// base.OnLeave(e);
//}
}
新しい方法(回転):
public partial class PromptTextBox : TextBox { private string promptString = string.Empty; private bool IsEmpty = true; public PromptTextBox() { InitializeComponent(); } public PromptTextBox(string prompt) { InitializeComponent(); PromptString = prompt; } /**/ ///