在Winfrom 中,如何实现combox 的列表自动显示ToolTip提示 ?
//带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提示 ?的更多相关文章
- BackgroundWorker实现的winfrom中实现异步等待加载图片显示
BackgroundWorker简介 BackgroundWorker在winfrom中有对应控件,该有三个事件:DoWork .ProgressChanged 和 RunWorkerCompl ...
- C#Winfrom中,窗体加载时会自动执行一次控件的textchange事件,怎么让它不执行?
http://zhidao.baidu.com/link?url=iTSyfa5_RJBSb37S8efdWoL5eDMrnxeAm-prhGSNBXqdP9r7PzNDQTc7gVzJgCNdzli ...
- 在Sharepoint2010中一种自定义调查列表的不允许再次答复提示的处理方法!
在Sharepoint中默认创建的调查列表系统只允许答复一次,再次答复将报错误信息,这对最终用户而言是非常不友好的体验,当然你也可以在调查设置中的常规设置中设置允许多次答复,这样就会有错误提示信息,但 ...
- Winfrom中ListBox绑定List数据源更新问题
Winfrom中ListBox绑定List数据源更新问题 摘自:http://xiaocai.info/2010/09/winform-listbox-datasource-update/ Winfr ...
- python中的字典(dict),列表(list),元组(tuple)
一,List:列表 python内置的一种数据类型是列表:list.list是一种有序的数据集合,可以随意的添加和删除其中的数据.比如列出班里所有的同学的名字,列出所有工厂员工的工号等都是可以用到列表 ...
- Winfrom中的几种传值方式
1.最常见的一种, 不知道你们是否记得构造函数,当然这是对有点基础的人说的, 再我们申明一个类的时候,可能很多时候都不会注意,因为会我们的编辑器自带会默认生成一个不带参数的构造函数, 所以不在意,但是 ...
- 无法从项目中获取SSIS包的列表
一直做的SSIS项目,突然在生成项目的时候没有反应,crtl + alt +o 提示:无法从项目中获取SSIS包的列表,发现是最近的包没有设计数据源, 解决思路:检查最近的包,挨个运行一遍,看看有没有 ...
- 如何在Android的ListView中构建CheckBox和RadioButton列表(支持单选和多选的投票项目示例)
引言 我们在android的APP开发中有时候会碰到提供一个选项列表供用户选择的需求,如在投票类型的项目中,我们提供一些主题给用户选择,每个主题有若干选项,用户对这些主题的选项进行选择,然后提交. 本 ...
- 页面中php传值后循环列表js获取点击的id
页面中php传值后循环列表js获取点击的id值进行js操作 <script type="text/javascript" src="__PUBLIC__/js/jq ...
随机推荐
- Codeforces 825D Suitable Replacement - 贪心 - 二分答案
You are given two strings s and t consisting of small Latin letters, string s can also contain '?' c ...
- hdu 1811 Rank of Tetris - 拓扑排序 - 并查集
自从Lele开发了Rating系统,他的Tetris事业更是如虎添翼,不久他遍把这个游戏推向了全球. 为了更好的符合那些爱好者的喜好,Lele又想了一个新点子:他将制作一个全球Tetris高手排行榜, ...
- topcoder srm 390 div1
problem1 link 记录一个模$k$之后的值是否出现过,出现过则出现循环,无解:否则最多$k$ 次一定能出现0. import java.util.*; import java.math.*; ...
- topcoder srm 694 div1 -3
1.给出$n$个数字,将其分成三个非空的组,每组的权值为该组所有数字的抑或.选择一种分法使得三组的权值和最大? 思路:记录前两组的权值且三组有没有数字时第三组的值.(当前两组的值知道时第三组的权值是确 ...
- scrapy - Request 中的回调函数不执行
在 scrapy 中, scrapy.Request(url, headers=self.header, callback=self.parse) 调试的时候,发现回调函数 parse_detail ...
- 卸载linux系统上自带的mysql
步骤: 1.打开centos命令提示符,切换为root用户 2.输入rpm -qa|grep -i mysql命令以检查系统含有的mysql插件,回车,若没有则说明无自带mysql,系统很干净.若有显 ...
- js 二分搜索树删除子节点
删除的节点含有左子树或者右子树,用其子树来代替成为被删除节点的父节点的子树 删除左右都有孩子的节点,找到右边子树最小的节点作为父节点
- Druid介绍
Druid (大数据实时统计分析数据存储) Druid 是一个为在大数据集之上做实时统计分析而设计的开源数据存储.这个系统集合了一个面向列存储的层,一个分布式.shared-nothing的架构,和一 ...
- 如何某个js文件中的 console
因为自己引用了别人的一个 js 文件,但里面有很多事件相关的 console 输出.自己并不想去修改别人的文件.但想屏蔽掉里面的 console . 有多个 js 文件里有 console.log . ...
- HDU 5988 Coding Contest(浮点数费用流)
http://acm.split.hdu.edu.cn/showproblem.php?pid=5988 题意:在acm比赛的时候有多个桌子,桌子与桌子之间都有线路相连,每个桌子上会有一些人和一些食物 ...