//带ToolTip的combox类文件
public class ComboBoxWithTooltip : ComboBox
{
//tipProperty为显示ToolTip文本的数据源的属性
private string tipProperty;
public string TipProperty
{
get { return tipProperty; }
set
{
if (tipProperty!=value)
{
tipProperty = value;
}
}
} private ToolTip toolTipX = new ToolTip(); /// <summary>
/// Initializes a new instance of the <see cref="ComboBoxWithTooltip"/> class.
/// </summary>
public ComboBoxWithTooltip()
{
DrawMode = DrawMode.OwnerDrawFixed;
} /// <summary>
/// Raises the <see cref="E:System.Windows.Forms.ComboBox.DrawItem"/> event.
/// </summary>
/// <param name="e">A <see cref="T:System.Windows.Forms.DrawItemEventArgs"/> that contains the event data.</param>
protected override void OnDrawItem(DrawItemEventArgs e)
{
; // Needed gate when DropDownStyle set to DropDownList (thanks to "Andrew" remarking on my
// StackOverflow post (stackoverflow.com/questions/680373/tooltip-for-each-items-in-a-combo-box/).
if (e.Index < ) { return; }
string tiptext = FilterItemOnProperty(Items[e.Index], TipProperty) as string;//从数据源Items[e.Index]的 TipProperty属性获取ToolTip文本
string Itemtext = GetItemText(Items[e.Index]);
e.DrawBackground();
using (SolidBrush br = new SolidBrush(e.ForeColor))
{ e.Graphics.DrawString(Itemtext, e.Font, br, e.Bounds); }
if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
{
toolTipX.Show(tiptext, this, e.Bounds.Right, e.Bounds.Bottom);
//toolTip1.AutoPopDelay = 25000;
//toolTip1.InitialDelay = 1000;
//toolTip1.ReshowDelay = 0;
}
e.DrawFocusRectangle();
} /// <summary>
/// Raises the <see cref="E:System.Windows.Forms.ComboBox.DropDownClosed"/> event.
/// </summary>
/// <param name="e">An <see cref="T:System.EventArgs"/> that contains the event data.</param>
protected override void OnDropDownClosed(EventArgs e)
{
toolTipX.Hide(this);
base.OnDropDownClosed(e);
}
}

===================================================

上边是实现后的结果,找了好长时间,才找到,做个记录。

实现代码如下:

ToolTip tt = null;
       ComboBox cb = null;
       private void Form1_Load(object sender, EventArgs e)
       {
           cb = new ComboBox();
           cb.Items.Insert(0,"第一");
           cb.Items.Insert(1,"第二");
           cb.Items.Insert(2,"第三");
           cb.Items.Insert(3,"第四");
           cb.DrawMode = DrawMode.OwnerDrawFixed;
           cb.DrawItem+=new DrawItemEventHandler(cb_DrawItem);
           cb.DropDownClosed+=new EventHandler(cb_DropDownClosed);
           this.Controls.Add(cb);
           cb.SelectedIndex = 1;
           tt = new ToolTip();
           tt.SetToolTip(cb, "zj");
       }
void cb_DrawItem(object sender, System.Windows.Forms.DrawItemEventArgs e)
       {
           // 绘制背景
           e.DrawBackground();
           //绘制列表项目
           e.Graphics.DrawString(cb.Items[e.Index].ToString(), e.Font, System.Drawing.Brushes.Black, e.Bounds);
           //将高亮的列表项目的文字传递到toolTip1(之前建立ToolTip的一个实例)
           if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
               tt.Show(cb.Items[e.Index].ToString(), cb, e.Bounds.X + e.Bounds.Width, e.Bounds.Y + e.Bounds.Height);
           e.DrawFocusRectangle();
       }
       void cb_DropDownClosed(object sender, EventArgs e)
       {
           tt.Hide(cb);
       }

在Winfrom 中,如何实现combox 的列表自动显示ToolTip提示 ?的更多相关文章

  1. BackgroundWorker实现的winfrom中实现异步等待加载图片显示

    BackgroundWorker简介    BackgroundWorker在winfrom中有对应控件,该有三个事件:DoWork .ProgressChanged 和 RunWorkerCompl ...

  2. C#Winfrom中,窗体加载时会自动执行一次控件的textchange事件,怎么让它不执行?

    http://zhidao.baidu.com/link?url=iTSyfa5_RJBSb37S8efdWoL5eDMrnxeAm-prhGSNBXqdP9r7PzNDQTc7gVzJgCNdzli ...

  3. 在Sharepoint2010中一种自定义调查列表的不允许再次答复提示的处理方法!

    在Sharepoint中默认创建的调查列表系统只允许答复一次,再次答复将报错误信息,这对最终用户而言是非常不友好的体验,当然你也可以在调查设置中的常规设置中设置允许多次答复,这样就会有错误提示信息,但 ...

  4. Winfrom中ListBox绑定List数据源更新问题

    Winfrom中ListBox绑定List数据源更新问题 摘自:http://xiaocai.info/2010/09/winform-listbox-datasource-update/ Winfr ...

  5. python中的字典(dict),列表(list),元组(tuple)

    一,List:列表 python内置的一种数据类型是列表:list.list是一种有序的数据集合,可以随意的添加和删除其中的数据.比如列出班里所有的同学的名字,列出所有工厂员工的工号等都是可以用到列表 ...

  6. Winfrom中的几种传值方式

    1.最常见的一种, 不知道你们是否记得构造函数,当然这是对有点基础的人说的, 再我们申明一个类的时候,可能很多时候都不会注意,因为会我们的编辑器自带会默认生成一个不带参数的构造函数, 所以不在意,但是 ...

  7. 无法从项目中获取SSIS包的列表

    一直做的SSIS项目,突然在生成项目的时候没有反应,crtl + alt +o 提示:无法从项目中获取SSIS包的列表,发现是最近的包没有设计数据源, 解决思路:检查最近的包,挨个运行一遍,看看有没有 ...

  8. 如何在Android的ListView中构建CheckBox和RadioButton列表(支持单选和多选的投票项目示例)

    引言 我们在android的APP开发中有时候会碰到提供一个选项列表供用户选择的需求,如在投票类型的项目中,我们提供一些主题给用户选择,每个主题有若干选项,用户对这些主题的选项进行选择,然后提交. 本 ...

  9. 页面中php传值后循环列表js获取点击的id

    页面中php传值后循环列表js获取点击的id值进行js操作 <script type="text/javascript" src="__PUBLIC__/js/jq ...

随机推荐

  1. 防止网站检测出Selenium的window.navigator.webdriver属性

    只需在Chromeoptions对象中添加一个属性即可解决 import time from selenium.webdriver import Chrome, ChromeOptions optio ...

  2. Latex: 解决 The gutter between columns is x inches wide (on page x), but should be at least 0.2 inches. 问题

    参考: Sample_WCCI.tex Latex: 解决 The gutter between columns is x inches wide (on page x), but should be ...

  3. Ubuntu 14.04 安装 boost 1_57_0

    参考: How to build boost 1_57_0 Ubuntu platform Ubuntu 14.04 安装 boost 1_57_0 $ sudo mkdir /opt/downloa ...

  4. repr() 和 str() 函数

    这两个函数都是可以用来将值转换成字符串的. 函数str() 用于将值转化为适于人阅读的形式,而repr() 转化为供解释器读取的形式. 结果是:

  5. HDU 4313 Matrix(并查集)

    http://acm.hdu.edu.cn/showproblem.php?pid=4313 题意: 给出一棵树,每条边都有权值,其中有几个点是特殊点,现在破坏边还使得这几个特殊点互相不可达,需要使得 ...

  6. 【转】Windows Live Writer 代码插件改造

    源码和插件都在后面,如果不想看我神神叨叨的可以直接到文章后面下载 一 .找插件 在使用Windows Live Writer 经常要用到插入代码的功能,根据博客园中教程,分别使用了: WindowsL ...

  7. Spring依赖

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  8. crontab 定时执行python脚本

    每天8点30分运行命令/tmp/run.sh * * * /tmp/run.sh 每两小时运行命令/tmp/run.sh */ * * * /tmp/run.sh

  9. dll多个版本问题

    在配置文件设置不同版本的dll即可 配置文件如下 configuration 节点下面的  runtime 节点新增各个版本配置内容 <runtime> <assemblyBindi ...

  10. django自定义Admin actions

    通常情况下,admin的工作模式是“选中目标,然后修改目标”,但在同时修改大量目标的时候,这种模式就变得重复.繁琐. 为此,admin提供了自定义功能函数actions的手段,可以批量对数据进行修改. ...