在winform中怎样把整个treeview加入combobox?
在winform中怎样把整个treeview加入combobox?winform没有dropdownlist --------------------编程问答-------------------- 自己做个usercontrol吧,放一个combox下面放treeview,点击下拉时,当然可以不用combox,用一个edit+button模仿,点击button时,显示treeview --------------------编程问答-------------------- 好像只能自己写个自定义控件,vs肯定是不带的 --------------------编程问答-------------------- http://www.codeproject.com/Articles/17592/DropDownPanel
http://www.codeproject.com/Articles/3994/Custom-ComboBoxes-with-Advanced-Drop-down-Features --------------------编程问答--------------------
用一个edit+button模仿,点击button时,显示treeview,但是隐藏时treeview会占用空间 --------------------编程问答--------------------
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using IMSP.Sysmodule.Agent;
namespace IMSP.Sysmodule.UIControl
{
public class ComboBoxTreeView : ComboBox
{
private const int WM_LBUTTONDOWN = 0x201, WM_LBUTTONDBLCLK = 0x203;
ToolStripControlHost treeViewHost;
ToolStripDropDown dropDown;
private TreeNode curnode;
private Int32 keyid;
private string showtext;
TreeView treeView;
public ComboBoxTreeView()
{
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);
this.TextChanged += new EventHandler(ComboBoxTreeView_TextChanged);
}
void ComboBoxTreeView_TextChanged(object sender, EventArgs e)
{
if (curnode != null)
this.Text = curnode.Text;
else
this.Text = "无";
}
public TreeNode CurrNode
{
get { return curnode; }
set { curnode = value; }
}
public Int32 KeyId
{
get { return keyid; }
set
{
keyid = value;
try
{
foreach (OctrNode node in get_currnode_allson())
{
if (node.Key == keyid)
{
curnode = node;
TreeView.SelectedNode = node;
this.Text = curnode.Text;
return;
}
}
}
catch { };
curnode = null;
this.Text = "无";
return;
}
}
ArrayList tmpnode = new ArrayList();
private void set_curnode_alllist(OctrNode _curnode)
{
foreach (OctrNode node in _curnode.Nodes)
{
tmpnode.Add(node);
set_curnode_alllist(node);
}
}
public OctrNode[] get_currnode_allson()
{
tmpnode.Clear();
foreach (OctrNode _node in TreeView.Nodes)
{
//if (_inculdself) tmpnode.Add(curnode);
tmpnode.Add(_node);
set_curnode_alllist(_node);
}
OctrNode[] retnode = new OctrNode[tmpnode.Count];
tmpnode.CopyTo(retnode);
return retnode;
}
public OctrNode[] get_currnode_allson(bool _inculdself)
{
tmpnode.Clear();
if (_inculdself) tmpnode.Add(curnode);
foreach (OctrNode _node in curnode.Nodes)
{
tmpnode.Add(_node);
set_curnode_alllist(_node);
}
OctrNode[] retnode = new OctrNode[tmpnode.Count];
tmpnode.CopyTo(retnode);
return retnode;
}
public string ShowText
{
get { return showtext; }
set { showtext = value; }
}
public void treeView_AfterSelect(object sender, TreeViewEventArgs e)
{
curnode = TreeView.SelectedNode;
this.Text = curnode.Text;
try
{
keyid = ((OctrNode)curnode).Key;
}
catch
{
// keyid = 0;
}
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);
}
}
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);
}
}
}
一个组件,仅供参考。 --------------------编程问答--------------------
正解
补充:.NET技术 , C#