C# .net 下拉框显示提示内容-【ComboBox】

________________________________________________________________________________________________________________________________________________________________

这是自已一个小程序用到,要求在ComboBox下拉框上显示提示文本也就是ToolTip

用谷歌搜了,在Codeproject上浏览的几遍,发现相关的介绍比较少。

介绍的方法也主要是基于api捕捉实现,这种方法的代码看起来似乎比较复杂。仔细阅读MSDN上关于ComboBox的内容,可以看到,更为简单的实现方法是通过ComboBox的DrawItem(绘制下拉菜单时产生的事件)。

下面是我得到的实现代码。

主要思路是当下拉项目高亮时(DrawItemState.Selected),即显示TooLTip(这里我们先要new一个ToolTip的实例,这里为toolTip1)。如果你有多个ComboBox需要显示ToolTip,那么应该考虑新建一个ComboBox的继承类。这里我建议采用文献[2]中介绍的方法,文献[2]中的方法还可以实现一个功能,即如果下拉项目的内容长度没有超过ComboBox的宽度时,不显示ToolTip。要注意的一点是使用文献[2]中的代码时,你需要将显示ToolTip的条件改为(e.State & DrawItemState.Selected) == DrawItemState.Selected 并把Else后面的条件语句删除,不然可能得不到我们想要的结果。近日由于自已一个小程序的需要,要求在ComboBox下拉项目(每个item)上显示ToolTip,用Google搜了几圈,在Codeproject上浏览的几遍,发现相关的介绍比较少,介绍的方法也主要是基于api捕捉实现,这种方法的代码看起来似乎比较复杂(比较完整的实现代码见参考文献[3])。仔细阅读MSDN上关于ComboBox的内容[1],可以看到,更为简单的实现方法是通过ComboBox的DrawItem(绘制下拉菜单时产生的事件)。下面是我通过参考文献[1]与[2]得到的实现代码。主要思路是当下拉项目高亮时(DrawItemState.Selected),即显示TooLTip(这里我们先要new一个ToolTip的实例,这里为toolTip1)。如果你有多个ComboBox需要显示ToolTip,那么应该考虑新建一个ComboBox的继承类。这里我建议采用文献[2]中介绍的方法,文献[2]中的方法还可以实现一个功能,即如果下拉项目的内容长度没有超过ComboBox的宽度时,不显示ToolTip。要注意的一点是使用文献[2]中的代码时,你需要将显示ToolTip的条件改为(e.State & DrawItemState.Selected) == DrawItemState.Selected 并把Else后面的条件语句删除,不然可能得不到我们想要的结果。

         
 //[界面设计中的代码,desigener]
           // 建立名为kineticFileComboBox 下拉表单
            this.kineticFileComboBox.FormattingEnabled = true;
            this.kineticFileComboBox.Location = new System.Drawing.Point(213, 197);
            this.kineticFileComboBox.Name = "kineticFileComboBox";
            this.kineticFileComboBox.Size = new System.Drawing.Size(170, 20);
            this.kineticFileComboBox.TabIndex = 14;
            this.kineticFileComboBox.Text = "请先载入文件...";
           //重绘下拉表单窗口,需要在窗口设计代码中加入下面这一句
            this.kineticFileComboBox.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
            //下拉表单重绘事件
            this.kineticFileComboBox.DrawItem += new System.Windows.Forms.DrawItemEventHandler(kineticFileComboBox_DrawItem);
            this.kineticFileComboBox.DropDownClosed += new System.EventHandler(kineticFileComboBox_DropDownClosed);
 
 
  //[主程序中的代码]
  private void kineticFileComboBox_DrawItem(object sender, System.Windows.Forms.DrawItemEventArgs e)
        {
            // 绘制背景
            e.DrawBackground();
             //绘制列表项目
            e.Graphics.DrawString(kineticFileComboBox .Items [e.Index ].ToString (), e.Font , System.Drawing.Brushes.Black, e.Bounds );
          //将高亮的列表项目的文字传递到toolTip1(之前建立ToolTip的一个实例)
            if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
                toolTip1.Show(kineticFileComboBox.Items[e.Index].ToString(), kineticFileComboBox, e.Bounds.X + e.Bounds.Width, e.Bounds.Y + e.Bounds.Height);
            e.DrawFocusRectangle();
        }
        //关闭列表时,同时关闭toolTip1的显示
        private void kineticFileComboBox_DropDownClosed(object sender, System.EventArgs e)
        {  toolTip1.Hide(kineticFileComboBox ); }

 

这样就实现了我们的需求 下拉框项目里有提示信息

                                                             

转载于:https://www.cnblogs.com/ftchen/p/5321649.html

C#中,你可以使用ADO.NET库配合COMBOBOX控件来从Access数据库读取数据并填充下拉列表。以下是基本步骤: 1. 首先,你需要添加对System.Data.OleDb命名空间的引用,因为Access数据库通常通过OleDb连接。 ```csharp using System.Data.OleDb; ``` 2. 创建一个连接字符串,用于连接到你的Access数据库。例如,如果你的数据库文件名为"myDatabase.accdb",位置在应用程序的同级目录,连接可能看起来像这样: ```csharp string connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=myDatabase.accdb;Mode=ReadWrite;"; ``` 3. 定义一个方法来执行查询,并将结果填充到ComboBox的数据源中: ```csharp private void LoadComboBoxContent() { using (OleDbConnection conn = new OleDbConnection(connString)) { string sqlQuery = "SELECT * FROM myTable"; // 替换为你的表名 OleDbCommand cmd = new OleDbCommand(sqlQuery, conn); try { conn.Open(); OleDbDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { comboBox.DataSource = null; // 清空已有的数据源 comboBox.Items.Add(reader.GetString(0)); // 假设第一个字段是要显示内容 } comboBox.DisplayMember = "ColumnName"; // 设置展示字段,这里假设列名为"ColumnName" comboBox.ValueMember = "ColumnName"; // 如果需要关联值,设置为对应的字段 } catch (Exception ex) { Console.WriteLine($"Error: {ex.Message}"); } } } ``` 4. 调用`LoadComboBoxContent`函数,通常是在窗体加载完成或按钮点击事件中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值