解决方案 »
- C# File.ReadAllLines方法读取txt文件,读出来的中文为什么是乱码?
- 真诚求助,熟悉.net http编程的进~
- 救命啊,各大侠请帮忙看一下这代码阿!,
- 如何改变DataGridView中单元格的颜色
- 继承后设计器无法打开
- C#新手问个问题
- 关于控件上垂直,水平滚动条的问题。
- [不得不谈的问题之".NET选择"]选择.NET,还是ILASM?
- 求助一个困扰我一个月的问题:运行一段时间后就出现NullReferences
- 我是新加入c#的菜鸟,请大家多多指教,以前我是写vb,java的
- 【新手求助】插入数据库出现问题= =
- 我写了一个用户控件,页面调用多次,但是总是只能正常显示第一个,帮我找找一下错误.
不过,说真的,这个功能真的很少用到,甚至没见过
WinXP的Explorer.exe的地址栏也不是Combobox+TreeView,虽然有点像
然后在下拉和收缩时控制TreeView显示隐蔽行不行呢
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent(); ComboTree MyComboTree = new ComboTree();
this.Controls.Add(MyComboTree);
}
} public class ComboTree : UserControl
{
private System.Windows.Forms.TreeView treeView1;
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Panel panel1; /// <summary>
/// 设计器支持所需的方法 - 不要
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
System.Windows.Forms.TreeNode treeNode1 = new System.Windows.Forms.TreeNode("节点0");
System.Windows.Forms.TreeNode treeNode2 = new System.Windows.Forms.TreeNode("节点3");
System.Windows.Forms.TreeNode treeNode3 = new System.Windows.Forms.TreeNode("节点4");
System.Windows.Forms.TreeNode treeNode4 = new System.Windows.Forms.TreeNode("节点7");
System.Windows.Forms.TreeNode treeNode5 = new System.Windows.Forms.TreeNode("节点8");
System.Windows.Forms.TreeNode treeNode6 = new System.Windows.Forms.TreeNode("节点9");
System.Windows.Forms.TreeNode treeNode7 = new System.Windows.Forms.TreeNode("节点5", new System.Windows.Forms.TreeNode[] {
treeNode4,
treeNode5,
treeNode6});
System.Windows.Forms.TreeNode treeNode8 = new System.Windows.Forms.TreeNode("节点6");
System.Windows.Forms.TreeNode treeNode9 = new System.Windows.Forms.TreeNode("节点1", new System.Windows.Forms.TreeNode[] {
treeNode2,
treeNode3,
treeNode7,
treeNode8});
System.Windows.Forms.TreeNode treeNode10 = new System.Windows.Forms.TreeNode("节点2");
this.treeView1 = new System.Windows.Forms.TreeView();
this.textBox1 = new System.Windows.Forms.TextBox();
this.button1 = new System.Windows.Forms.Button();
this.panel1 = new System.Windows.Forms.Panel();
this.panel1.SuspendLayout();
this.SuspendLayout();
//
// treeView1
//
this.treeView1.Dock = System.Windows.Forms.DockStyle.Fill;
this.treeView1.Location = new System.Drawing.Point(0, 23);
this.treeView1.Name = "treeView1";
treeNode1.Name = "节点0";
treeNode1.Text = "节点0";
treeNode2.Name = "节点3";
treeNode2.Text = "节点3";
treeNode3.Name = "节点4";
treeNode3.Text = "节点4";
treeNode4.Name = "节点7";
treeNode4.Text = "节点7";
treeNode5.Name = "节点8";
treeNode5.Text = "节点8";
treeNode6.Name = "节点9";
treeNode6.Text = "节点9";
treeNode7.Name = "节点5";
treeNode7.Text = "节点5";
treeNode8.Name = "节点6";
treeNode8.Text = "节点6";
treeNode9.Name = "节点1";
treeNode9.Text = "节点1";
treeNode10.Name = "节点2";
treeNode10.Text = "节点2";
this.treeView1.Nodes.AddRange(new System.Windows.Forms.TreeNode[] {
treeNode1,
treeNode9,
treeNode10});
this.treeView1.Size = new System.Drawing.Size(380, 273);
this.treeView1.TabIndex = 1;
this.treeView1.Visible = false;
this.treeView1.VisibleChanged += new System.EventHandler(this.treeView1_VisibleChanged);
this.treeView1.NodeMouseClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this.treeView1_NodeMouseClick);
//
// textBox1
//
this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.textBox1.BackColor = System.Drawing.Color.White;
this.textBox1.Location = new System.Drawing.Point(0, 2);
this.textBox1.Name = "textBox1";
this.textBox1.ReadOnly = true;
this.textBox1.Size = new System.Drawing.Size(347, 21);
this.textBox1.TabIndex = 2;
//
// button1
//
this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.button1.Location = new System.Drawing.Point(350, 3);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(30, 20);
this.button1.TabIndex = 3;
this.button1.Text = "↓";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// panel1
//
this.panel1.Controls.Add(this.textBox1);
this.panel1.Controls.Add(this.button1);
this.panel1.Dock = System.Windows.Forms.DockStyle.Top;
this.panel1.Location = new System.Drawing.Point(0, 0);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(380, 23);
this.panel1.TabIndex = 4;
//
// ComboTree
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.Controls.Add(this.treeView1);
this.Controls.Add(this.panel1);
this.Name = "ComboTree";
this.Size = new System.Drawing.Size(380, 296);
this.panel1.ResumeLayout(false);
this.panel1.PerformLayout();
this.ResumeLayout(false); } public ComboTree()
{
InitializeComponent(); this.DoubleBuffered = true;
treeView1.Visible = false;
} private void button1_Click(object sender, EventArgs e)
{
treeView1.Visible = !treeView1.Visible;
} private void treeView1_VisibleChanged(object sender, EventArgs e)
{
if (treeView1.Visible)
{
this.Height = panel1.Height + treeView1.Height;
}
else
{
this.Height = panel1.Height;
}
} private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
if (e.Node.Bounds.Contains(e.Location))
{
textBox1.Text = e.Node.Text;
treeView1.Visible = false;
}
}
}
}
只会简单的方法
1 隐藏一个显示所有节点的大小的Treeview,在Combobox_DrawItem时遍历节点项,或者直接TreeViewer.DrawToBitmap2 纯代码绘制出一个TreeView我个人的实现方法(使用自定义控件,这个自定义控件不会接收焦点,但会响应鼠标事件,不会导致焦点抢占,内容绘制,使得整个自定义控件的显示内容是画上去的,只是通过实现鼠标交互来达到交互效果。其次,在展开自定义控件时,通过设置父窗体矩形,但不影响父窗体显示内容及背景来实现)。
,Mark 了,慢慢学习。