C# ListView 自定义ToolTip 显示

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace DemoTolltip
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
        private ToolTip lvTp = new ToolTip();
        private ListViewItem currentItem = new ListViewItem();
        private void Form2_Load(object sender, EventArgs e)
        {
            listView1.View = View.LargeIcon;
            listView1.FullRowSelect = true;
           // listView1.GridLines = true;
            listView1.Columns.Add("Column1");
            listView1.Columns.Add("Column2");
            for (int i = 0; i < 10; i++)
            {
                ListViewItem lvi = new ListViewItem();
                lvi.SubItems[0].Text = i.ToString();
                lvi.ImageIndex = i;
                lvi.SubItems.Add("Item" + i.ToString());
                lvi.ToolTipText = "Item" + i.ToString() +"\r\n" +strShowIms;

                listView1.Items.Add(lvi);
            }
          //  listView1.ShowItemToolTips = true;
            listView1.MouseMove += new MouseEventHandler(listView1_MouseMove);
            lvTp.OwnerDraw = true;
            lvTp.Draw += new DrawToolTipEventHandler(lvTp_Draw);
            lvTp.Popup += new PopupEventHandler(lvTp_Popup);
        }
        string strShowIms = @"sssAAAAAAA
          1  AAAAAAAAAAAAAAAAAAAAA
           2     AAAAAAA
         2     AAAAAAA
         3     AAAAAAA
         4     AAAAAAA
         5     AAAAAAA
         6     AAAAAAA
         7     AAAAAAA
         8     AAAAAAA
         9     AAAAAAA
";
        string strText = "";
        public void lvTp_Popup(object sender, PopupEventArgs e)
        {
            Size s = TextRenderer.MeasureText(strText, f);
            e.ToolTipSize = new Size(s.Width, s.Height + 40);
        }
        Font f = new Font("宋体", 10.0f);
        Font fTitle = new Font("宋体", 12.0f);
        void lvTp_Draw(object sender, DrawToolTipEventArgs e)
        {
            using (e.Graphics)
            {
                int x = e.Bounds.Width;
                int y = e.Bounds.Height;
                e.DrawBackground();

                SolidBrush b = new SolidBrush(Color.FromArgb(233, 240, 245));//矩形背景色
                SolidBrush border = new SolidBrush(Color.FromArgb(190, 219, 249));//边框颜色
                Rectangle recg = new Rectangle(0, 0, x, 30);

                e.Graphics.FillRectangle(b, recg);
                e.Graphics.DrawRectangle(new Pen(border), recg);
                e.Graphics.DrawRectangle(new Pen(border), 0, 0, x - 1, y - 1);
                int tempx = x / 4;
                if (x < 180 && x > 100)
                {
                    tempx = 10;
                }
                else if (x <= 100)
                {
                    tempx = 5;
                }
                e.Graphics.DrawImage(global::DemoTolltip.Properties.Resources.当前床位信息, new PointF(tempx, 5));
                e.Graphics.DrawString("当前信息", fTitle, Brushes.Black, new PointF(tempx + 40, 7));
                // e.Graphics.DrawLine(new Pen(Brushes.Blue),new Point(1,30),new Point(400,30));
                e.Graphics.DrawString(e.ToolTipText, f, Brushes.Black, new PointF(4, 40));
            }
        }

        void listView1_MouseMove(object sender, MouseEventArgs e)
        {
            ListViewItem lvi = listView1.GetItemAt(e.X, e.Y);
            if (lvi != null && lvi != currentItem)
            {
                strText = lvi.ToolTipText;
                currentItem = lvi;
                lvTp.Show(lvi.ToolTipText, listView1, e.Location);
            }
            else if (lvi == null)
            {
                strText="";
                lvTp.Hide(listView1);
            }
            currentItem = lvi;
        }

    }
}

  

时间: 2024-08-07 12:33:03

C# ListView 自定义ToolTip 显示的相关文章

用WPF实现在ListView中的鼠标悬停Tooltip显示

原文:用WPF实现在ListView中的鼠标悬停Tooltip显示 一.具体需求描述 在WPF下实现,当鼠标悬停在ListView中的某一元素的时候能弹出一个ToolTip以显示需要的信息. 二.代码实现 在.XMAL文件中 Code<Window.Resources> <DataTemplate x:Key="dataTemplateCheckBox"> <StackPanel Orientation="Horizontal">

Android SQLite的使用,基本的增删改查效果,以及ListView的效果显示

1 package com.example.sqlitetest; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 import android.content.ContentValues; 6 import android.content.Context; 7 import android.database.Cursor; 8 import android.database.sqlite.SQLiteDatabase; 9

WPF自定义控件与样式(7)-列表控件DataGrid与ListView自定义样式

一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要内容: DataGrid自定义样式: ListView自定义样式: 二.DataGrid自定义样式 DataGrid是常用的数据列表显示控件,先看看实现的效果(动态图,有点大): DataGrid控件样式结构包括以下几个部分: 列头header样式 调整列头宽度的列分割线样式 行样式 行头调整高度样式 行头部样式

ListView GridView 只显示一行 冲突

ScrollView中嵌套GridView,ListView时只显示一行的解决办法,详见:http://blog.csdn.net/luohai859/article/details/39347583  方法一:自定义ListView.GridView public class MyListView extends ListView { public MyListView(Context context) { super(context); } public MyListView(Context

DevExpress.XtraGrid.GridControl 实现自定义tooltip

DevExpress.XtraGrid.GridControl 控件默认的tooltip显示的每一个单元格的文本值,但是实际工作中会出现各种需求.我这里就有一个列是折扣率显示的值是0-1之间的两位小数,比如说0.55想要显示成五五折.那就需要自己来做一下处理了(效果看下图) 首先.在工具栏中找到ToolTipControllerk控件,并且设置GridControl.ToolTipController=MainGvTool              然后再添加的ToolTipController

ListView 自定义BaseAdapter实现单选打勾(无漏洞)

最近因为一个项目的原因需要自定义一个BaseAdapter实现ListVIew单选打勾的功能,虽然听起来很简单,我在网上也 看过一些例子,似乎是实现了,但往往存在一些漏洞.往往漏洞如下 1.网上例子item较少,item增多时漏洞出现,忽略了BaseAdapter中getView()方法中convertView重用的问题 2.忽略了BaseAdapter中getView()方法并不是一下子加载完所有item,上下拖动listview时item会重新加载,getview会重新被调用,所以上下拖动的

解决ScrollView下嵌套ListView、GridView显示不全的问题(冲突)

原文地址:http://blog.csdn.net/cs_li1126/article/details/12906203 一.使用网上用的动态改变listview高度的方法,该方法只适用于item布局是LinearLayout布局的情况,不能是其他的,因为其他的Layout(如RelativeLayout)没有重写onMeasure(),所以会在onMeasure()时抛出异常.所以使用限制较大. [java] view plaincopy public class Utility { publ

《连载 | 物联网框架ServerSuperIO教程》- 13.自定义视图显示接口开发,满足不同的显示需求

1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架ServerSuperIO教程>2.服务实例的配置参数说明 <连载 | 物联网框架ServerSuperIO教程>- 3.设备驱动介绍 <连载 | 物联网框架ServerSuperIO教程>-4.如开发一套设备驱动,同时支持串口和网络通讯. <连载 | 物联网框架ServerSupe

自定义进阶2——自定义View显示超大图片

上一节(自定义初学5--自定义View显示图片)已经说了如何自定义View显示图片.做android时,加载图片是避免不了的,加载网络图片还需要异步加载,最烦人的就是经常出现OOM,为了避免这样的问题,我们一般这样解决: 根据图片控件的大小对图片进行压缩显示. 如果图片数量非常多,则会使用LruCache等缓存机制,将所有图片占据的内容维持在一个范围内. 有时加载图片还会遇到特殊情况--就是单个图片非常巨大,还不允许压缩.那么对于这种需求,该如何做呢? 首先不压缩,按照原图尺寸加载,那么屏幕肯定