2009-03-24 11:32 128人阅读 评论(0) 收藏 举报
/*-----2009-03-28
* ----主要实现ComboBox框的下拉功能TreeView 功能
* 当TreeView的CheckBoxes属性为false时,当前选择的节点的Name 存储在ComboBox的Tag属性里
*/
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.ComponentModel;
public class ComboBoxTree : ComboBox
{
/// <summary>
/// 定义鼠标左键点击消息
/// </summary>
private const int WM_LBUTTONDOWN = 0x201;
/// <summary>
/// 按下鼠标右键
/// </summary>
private const int WM_LBUTTONDBLCLK = 0x203;
//承载自定义控件
ToolStripControlHost treeViewHost;
ToolStripDropDown dropDown;
public ComboBoxTree()
{
TreeView treeView = new TreeView();
treeView.AfterSelect += new TreeViewEventHandler(treeView_AfterSelect);
treeView.BorderStyle = BorderStyle.None;
treeViewHost = new ToolStripControlHost(treeView);
dropDown = new ToolStripDropDown();
dropDown.Width = this.Width;
dropDown.Items.Add(treeViewHost);
}
public void treeView_AfterSelect(object sender, TreeViewEventArgs e)
{
if (TreeView.CheckBoxes)
{
string comboText = "";
foreach (TreeNode node in TreeView.Nodes)
{
if (node.Checked)
{
comboText += node.Text+",";
}
}
if (comboText != "")
{
comboText = comboText.Substring(0, comboText.Length - 1);
}
this.Text= comboText;
}
else
{
this.Text = TreeView.SelectedNode.Text;
this.Tag = TreeView.SelectedNode.Name;
}
dropDown.Close();
}
public TreeView TreeView
{
get { return treeViewHost.Control as TreeView; }
}
private void ShowDropDown()
{
if (dropDown != null)
{
treeViewHost.Size = new System.Drawing.Size(DropDownWidth - 2, DropDownHeight);
dropDown.Show(this, 0, this.Height);
}
}
//处理windows消息
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_LBUTTONDBLCLK || m.Msg == WM_LBUTTONDOWN)
{
ShowDropDown();
return;
}
base.WndProc(ref m);
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (dropDown != null)
{
dropDown.Dispose();
dropDown = null;
}
}
base.Dispose(disposing);
}
}
通过ComboBoxTree - 刘跃飞的专栏 - 博客频道 - CSDN.NET.
============ 欢迎各位老板打赏~ ===========
与本文相关的文章
- · The instance of entity type ‘Customer’ cannot be tracked because another instance with the same key value for {‘Id’} is already being tracked.
- · .NET8实时更新nginx ip地址归属地
- · 解决.NET Blazor子组件不刷新问题
- · .NET8如何在普通类库中引用 Microsoft.AspNetCore
- · .NET8 Mysql SSL error
- · ASP.NET Core MVC的Razor视图渲染中文乱码的问题
- · .NETCORE 依赖注入服务生命周期
- · asp.net zero改mysql
- · .NET5面试汇总
- · .Net连接Mysql数据库的Convert Zero Datetime日期问题
- · vue使用element-ui中的Message 、MessageBox 、Notification
- · Asp.Net Core Filter 深入浅出的那些事-AOP