public partial class CustomSearchBar : TextBox
{
private readonly Label lblwaterText = new Label(); private readonly PictureBox clearButton = new PictureBox(); private readonly int cancelImageSize = ; private int loadingCharsCount = ; public CustomSearchBar()
{
InitializeComponent(); lblwaterText.BorderStyle = BorderStyle.None;
lblwaterText.Enabled = false;
lblwaterText.BackColor = Color.White;
lblwaterText.AutoSize = false;
lblwaterText.Top = ;
lblwaterText.Left = ;
lblwaterText.FlatStyle = FlatStyle.System;
Controls.Add(lblwaterText); clearButton.Size = new Size(cancelImageSize, cancelImageSize);
//clearButton.AutoSize = false;
clearButton.SizeMode = PictureBoxSizeMode.StretchImage;
//clearButton.Image = ResourceHandler.LoadImage("Loading");
clearButton.Top = ;
clearButton.Left = this.Width - cancelImageSize - ;
clearButton.Click += new EventHandler(clearButton_Click);
Controls.Add(clearButton);
} public void AdjustClearButtonPosition(int width)
{
this.clearButton.Left = width - cancelImageSize - ;
} 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 - ;
else
lblwaterText.Width = Width;
lblwaterText.Height = Height - ;
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);
} /// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void clearButton_Click(object sender, EventArgs e)
{
this.Text = string.Empty;
ClearSearchingTextHandler();
} public void StartLoadSmartTip()
{
this.clearButton.Image = ResourceHandler.LoadImage("Loading");
loadingCharsCount++;
} public void EndLoadSmartTip()
{
loadingCharsCount--;
if (loadingCharsCount <= )
{
this.clearButton.Image = ResourceHandler.LoadImage("CloseButtonInactive");
}
} public delegate void ClearSearchingText();
public event ClearSearchingText ClearSearchingTextHandler;
}

WinForm中自定义搜索框(水印、清空按钮、加载中图标)的更多相关文章

  1. 使用Bootstrap3和Ladda UI实现的多种按钮“加载中”效果体验

    在线演示 在线演示 大家在开发基于web的网站或者web应用中,常常在AJAX调用的过程中需要提示用户并且展示相关的“加载中”效果,类似的UI设计也非常多,比如,当点击一个按钮后,在它的旁边显示一个 ...

  2. WPF实用指南一:在WPF窗体的边框中添加搜索框和按钮

    原文:WPF实用指南一:在WPF窗体的边框中添加搜索框和按钮 在边框中加入一些元素,在应用程序的界面设计中,已经开始流行起来.特别是在浏览器(Crome,IE,Firefox,Opera)中都有应用. ...

  3. bootStrap-table服务器端后台分页的使用,以及自定义搜索框的实现,前端代码到数据查询超详细讲解

    关于分页,之前一直纯手写js代码来实现,最近又需要用到分页,找了好多最终确定bootstrap-table,正好前端页面用的是bootstrap. 首先下载BootStrap-table的js和CSS ...

  4. iOS开发UI篇 -- UISearchBar 属性、方法详解及应用(自定义搜索框样式)

    很多APP都会涉及到搜索框,苹果也为我们提供了默认的搜索框UISearchBar.但实际项目中我们通常需要更改系统默认搜索框的样式.为了实现这一目标,我们需要先搞懂 UISearchBar 的属性及方 ...

  5. extjs在窗体中添加搜索框

    在extjs中添加搜索框,搜索框代码如下: this.searchField = new Ext.ux.form.SearchField({            store : this.store ...

  6. Qt之自定义搜索框

    简述 关于搜索框,大家都经常接触.例如:浏览器搜索.Windows资源管理器搜索等. 当然,这些对于Qt实现来说毫无压力,只要思路清晰,分分钟搞定. 方案一:调用QLineEdit现有接口 void ...

  7. 【Qt】Qt之自定义搜索框【转】

    简述 关于搜索框,大家都经常接触.例如:浏览器搜索.Windows资源管理器搜索等. 当然,这些对于Qt实现来说毫无压力,只要思路清晰,分分钟搞定. 简述 效果 细节分析 Coding 源码下载 效果 ...

  8. Qt之自定义搜索框——QLineEdit里增加一个Layout,还不影响正常输入文字(好像是一种比较通吃的方法)

    简述 关于搜索框,大家都经常接触.例如:浏览器搜索.Windows资源管理器搜索等. 当然,这些对于Qt实现来说毫无压力,只要思路清晰,分分钟搞定. 方案一:调用QLineEdit现有接口 void ...

  9. Android自定义View——自定义搜索框(SearchView)

    Android自定义View——自定义搜索框(SearchView) http://www.apkbus.com/android-142064-1-1.html

随机推荐

  1. java流类,快速统计出字符次数+++

    总结:学会给一个合适的命名,不要总是abc..虽然简单,但是不容易看懂,和方便去理解 package com.aini; import java.io.File; import java.io.Fil ...

  2. java代码----求最大值,平均值。。。

    总结:方法的返回值----返回的对象到底是什么? package com.a; import java.util.Scanner; //从键盘输入10个数,并输出最大值,最小值,平均值 public ...

  3. __CLASS__

    <?php class base_class { function say_a() { echo "'a' - said the " . __CLASS__ . " ...

  4. 微信小程序生成太阳码

    微信小程序生成太阳码 https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=access_token 必须通过POST提交 而且参数 ...

  5. 使用Docker模拟ansible集群环境

     /etc/ansible/hosts 192.168.99.100 ansible_ssh_port=8081 ansible_ssh_user=root 配置容器免密码SSH登录

  6. Python内置函数二 (递归函数,匿名函数,二分法)

    匿名函数 lambda() 语法: lambad  参数 : 返回值 def func(a,b): return a * b print(func(2,5)) a = lambda a ,b : a* ...

  7. 02-26 ASP.NET加密解密的方法

    MD5加密.解密的方法. 使用时的代码备忘:Response.Write(FormsAuthentication.HashPasswordForStoringInConfigFile("要加 ...

  8. 02-26C#三级省市区ajax联动控件,利用UpdatePanel,以及页面取值

    第一步:设置界面 <%@ Control Language="C#" AutoEventWireup="true" CodeFile="PCAC ...

  9. leetcode454

    public class Solution { public int FourSumCount(int[] A, int[] B, int[] C, int[] D) { var dic = new ...

  10. 12-EasyNetQ之消息版本控制

    为了能够支持消息版本控制,你需要确保这个必要的组件已配置.最简单的实现是这样的: var bus = RabbitHutch.CreateBus("host=localhost", ...