1 public partial class CustomSearchBar : TextBox
2 {
3 private readonly Label lblwaterText = new Label();
4
5 private readonly PictureBox clearButton = new PictureBox();
6
7 private readonly int cancelImageSize = 12;
8
9 private int loadingCharsCount = 0;
10
11 public CustomSearchBar()
12 {
13 InitializeComponent();
14
15 lblwaterText.BorderStyle = BorderStyle.None;
16 lblwaterText.Enabled = false;
17 lblwaterText.BackColor = Color.White;
18 lblwaterText.AutoSize = false;
19 lblwaterText.Top = 1;
20 lblwaterText.Left = 2;
21 lblwaterText.FlatStyle = FlatStyle.System;
22 Controls.Add(lblwaterText);
23
24 clearButton.Size = new Size(cancelImageSize, cancelImageSize);
25 //clearButton.AutoSize = false;
26 clearButton.SizeMode = PictureBoxSizeMode.StretchImage;
27 //clearButton.Image = ResourceHandler.LoadImage("Loading");
28 clearButton.Top = 1;
29 clearButton.Left = this.Width - cancelImageSize - 2;
30 clearButton.Click += new EventHandler(clearButton_Click);
31 Controls.Add(clearButton);
32 }
33
34 public void AdjustClearButtonPosition(int width)
35 {
36 this.clearButton.Left = width - cancelImageSize - 2;
37 }
38
39 public string WaterText
40 {
41 get { return lblwaterText.Text; }
42 set { lblwaterText.Text = value; }
43 }
44
45 public override string Text
46 {
47 set
48 {
49 lblwaterText.Visible = value == string.Empty;
50 base.Text = value;
51 }
52 get
53 {
54 return base.Text;
55 }
56 }
57
58 protected override void OnSizeChanged(EventArgs e)
59 {
60 if (Multiline && (ScrollBars == ScrollBars.Vertical || ScrollBars == ScrollBars.Both))
61 lblwaterText.Width = Width - 20;
62 else
63 lblwaterText.Width = Width;
64 lblwaterText.Height = Height - 2;
65 base.OnSizeChanged(e);
66 }
67
68 protected override void OnTextChanged(EventArgs e)
69 {
70 lblwaterText.Visible = base.Text == string.Empty;
71 base.OnTextChanged(e);
72 }
73
74 protected override void OnMouseDown(MouseEventArgs e)
75 {
76 lblwaterText.Visible = false;
77 base.OnMouseDown(e);
78 }
79
80 protected override void OnMouseLeave(EventArgs e)
81 {
82 lblwaterText.Visible = base.Text == string.Empty;
83 base.OnMouseLeave(e);
84 }
85
86 /// <summary>
87 ///
88 /// </summary>
89 /// <param name="sender"></param>
90 /// <param name="e"></param>
91 private void clearButton_Click(object sender, EventArgs e)
92 {
93 this.Text = string.Empty;
94 ClearSearchingTextHandler();
95 }
96
97 public void StartLoadSmartTip()
98 {
99 this.clearButton.Image = ResourceHandler.LoadImage("Loading");
100 loadingCharsCount++;
101 }
102
103 public void EndLoadSmartTip()
104 {
105 loadingCharsCount--;
106 if (loadingCharsCount <= 0)
107 {
108 this.clearButton.Image = ResourceHandler.LoadImage("CloseButtonInactive");
109 }
110 }
111
112 public delegate void ClearSearchingText();
113 public event ClearSearchingText ClearSearchingTextHandler;
114 }