C# WinForm里:怎么做标注式窗体 就是像你每次要拔出U盘时 任务栏右下角会弹出"您现在可以安全~~"的那个东西,
下面还有个斜的小箭头的  也就像你在Textbox里输入时按下CapsLock键时它提示你"键盘大小写~~"什么的那个框框
我在网上看到的有很多 主要都是这样的:http://blog.csdn.net/onlyzhangqin/archive/2008/04/18/2304786.aspx
但小弟愚昧  在自己机上试验了下 报很多错啊  
而且原文代码里很多含糊的地方 比如GetArrowLocation()GraphicsPath类型什么 还有case后面许多省略号什么意思啊
  网上那篇我真的看不懂  哪位大哥做过这个问题的请提供下实现过的codes给小弟看看吧
  (实际我要解决的是:)
  我有个textbox 当在其中输入了数字时 就在textbox的边缘处弹出这个标注式 上面写"您输入了数字"字样 怎么实现                                谢谢所有路过的朋友的帮助

解决方案 »

  1.   

    private void button2_Click(object sender, EventArgs e)
            {
                ToolTip tip = new ToolTip();
                tip.IsBalloon = true;
                tip.Show("HEllo", this, this.button2.Location);
            }
    参考一下
      

  2.   

     private void button2_Click(object sender, EventArgs e)
            {
                ToolTip tip = new ToolTip();
                tip.IsBalloon = true;
                tip.Show("HEllo", this, this.button2.Location,1000);
            }
      

  3.   

    我现在在网吧  暂时没有VS环境 不过我看4楼的朋友 用的是tooltip 似乎不是我要的要求吧 
    我记得tooltip框是个矩形模样的  我想做的是个四角处圆滑 下边带小箭头的那个效果 
    就像什么效果呢: 当你从机上拔出U盘时,它会弹出个"安全的移除硬件"的那个框  明白的吧 尚未成功  仍需努力!!!
      

  4.   

    你没试过怎么知道就不是你要的那种效果呢? private void button3_Click(object sender, EventArgs e)
            {
                ToolTip tip = new ToolTip();
                tip.IsBalloon = true;
                tip.Show("hello",this.textBox1,10,-40,3000); 
            }
      

  5.   

    呵呵, 就是用 ToolTip , 绝对能实现楼主想要的功能
      

  6.   

    谢谢大家的回答 我试过了 用tooltip方法是可以的 
    但有个缺憾 就是没法在那个tooltip上加Button或在右上角处放个关闭窗体用的小叉叉那个
      

  7.   

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Runtime.InteropServices
    ;
    namespace WindowsApplication16
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            [StructLayout(LayoutKind.Sequential)]
            public struct DEV_BROADCAST_VOLUME
            {
                public int dbcv_size;
                public int dbcv_devicetype;
                public int dbcv_reserved;
                public int dbcv_unitmask;
            }        protected override void WndProc(ref Message m)
            {
                // 发生设备变动
                const int WM_DEVICECHANGE = 0x0219;
                // 系统检测到一个新设备
                const int DBT_DEVICEARRIVAL = 0x8000;
                // 系统完成移除一个设备
                const int DBT_DEVICEREMOVECOMPLETE = 0x8001;
                // 逻辑卷标
                const int DBT_DEVTYP_VOLUME = 0x00000002;            switch (m.Msg)
                {
                    case WM_DEVICECHANGE:
                        switch (m.WParam.ToInt32())
                        {
                            case DBT_DEVICEARRIVAL:
                                int devType = Marshal.ReadInt32(m.LParam, 4);
                                if (devType == DBT_DEVTYP_VOLUME)
                                {
                                    DEV_BROADCAST_VOLUME vol;
                                    vol = (DEV_BROADCAST_VOLUME)Marshal.PtrToStructure(
                                        m.LParam, typeof(DEV_BROADCAST_VOLUME));                                MessageBox.Show(vol.dbcv_unitmask.ToString("x"));
                                }
                                break;
                            case DBT_DEVICEREMOVECOMPLETE:
                                MessageBox.Show("Removal");
                                break;
                        }
                        break;
                }
                base.WndProc(ref m);
            }
        }
    }