當前位置:首頁 » 操作系統 » 樹控制項源碼

樹控制項源碼

發布時間: 2022-05-03 16:28:51

① 如何用js實現簡單的樹控制項

我之前寫過一個,很簡單,也就下面幾個函數:
function topOfList()
{
var btn = document.getElementById('topOfListBtn');
if(btn.state == 'spaned')
{
var forms = document.getElementsByTagName('form');
var timeSpan = 50;
for(var i = 0;i<forms.length;i++)
{
var form = forms[i];
if(form.id.indexOf('Top') > -1)
{
ShinkSlowly(form,timeSpan);
timeSpan += 50;
}
}
btn.state = 'unspaned';
changeBtnImg('topOfListImg','img/unspaned.jpg');
tellConsoleSpanSate();
}
else
{
var forms = document.getElementsByTagName('form');
var timeSpan = 50;
for(var i = 0;i<forms.length;i++)
{
var form = forms[i];
if(form.id.indexOf('Top') > -1)
{
SpanSlowly(form,timeSpan);
timeSpan += 50;
}
}
btn.state = 'spaned';
changeBtnImg('topOfListImg','img/spaned.jpg');
tellConsoleSpanSate();
}
}
function bottomOfList()
{
var btn = document.getElementById('bottomOfListBtn');
if(btn.state == 'spaned')
{
var forms = document.getElementsByTagName('form');
var timeSpan = 50;
for(var i = 0;i<forms.length;i++)
{
var form = forms[i];
if(form.id.indexOf('Bottom') > -1)
{
ShinkSlowly(form,timeSpan);
timeSpan += 50;
}
}
btn.state = 'unspaned';
changeBtnImg('bottomOfListImg','img/unspaned.jpg');
tellConsoleSpanSate();
}
else
{
var forms = document.getElementsByTagName('form');
var timeSpan = 50;
for(var i = 0;i<forms.length;i++)
{
var form = forms[i];
if(form.id.indexOf('Bottom') > -1)
{
SpanSlowly(form,timeSpan);
timeSpan += 50;
}
}
btn.state = 'spaned';
changeBtnImg('bottomOfListImg','img/spaned.jpg');
tellConsoleSpanSate();
}
}
function ShinkSlowly(form,timeSpan)//控制按鈕收縮的函數
{
setTimeout(function()
{
form.style.display = 'none';
}
,timeSpan);
}
function SpanSlowly(form,timeSpan)//控制按鈕展開的函數
{
setTimeout(function()
{
form.style.display = '';//alert(form.id);
}
,timeSpan);
}
function changeBtnImg(imgId, imgSrc)
{
document.getElementById(imgId).src=imgSrc;//'img/unspaned.jpg';'img/spaned.jpg';
}

其中,imgSrc要換成你硬碟里存在的圖片路徑。然後在你的+號圖片的單擊事件響應使用topOfList()函數即可,我測試過,可用。ShinkSlowly()函數內部可以控制張開和收縮的速度。

② c#語言asp.net實現treeview控制項讀資料庫動態生成樹的代碼

來自csdn上面的例子我試過可以
1.下載地址
http://msdn.microsoft.com/downloads/samples/internet/ASP_DOT_NET_ServerControls/WebControls/default.asp
安裝後,通過「自定義工具箱」->「.net框架組件」把TreeView添加到工具箱里
2.運行時無法顯示
一般是TreeView的版本問題,最好下載英文版自動安裝版本重新安裝,安裝前應該先到添加刪除程序里卸掉原版本

3.顯示格式出錯(非樹狀顯示)
TreeView要求客戶端瀏覽器版本為IE5.5及以上,最好要求客戶端升級為IE6.0

4.框架里使用TreeView
設置NavigateUrl、Target屬性,可更新另外的Frame

5.找不到TreeNode類
使用TreeView,最好添加namespace:using Microsoft.Web.UI.WebControls;

6.遍歷TreeView節點(遞歸演算法)
private void Page_Load(object sender, System.EventArgs e)
{
GetAllNodeText(TreeView1.Nodes);
}
void GetAllNodeText(TreeNodeCollection tnc)
{
foreach(TreeNode node in tnc)
{
if(node.Nodes.Count!=0)
GetAllNodeText(node.Nodes);
Response.Write(node.Text + " ");
}
}

7.得到node結點的父節點
TreeNode pnode;
if(node.Parent is TreeNode)
pnode=(TreeNode)node.Parent;
else
//node is root node

8.修改TreeView樣式(示例)
<iewc:TreeView id="TreeView1" runat="server" HoverStyle="color:blue;background:#00ffCC;"

DefaultStyle="background:red;color:yellow;" SelectedStyle="color:red;background:#00ff00;">
用代碼:
TreeView1.DefaultStyle["font-size"] = "20pt";

9.TreeView展開無閃爍的解決方法
http://expert.csdn.net/Expert/topic/1300/1300576.xml

客戶端控制TreeView
http://expert.csdn.net/Expert/topic/1382/1382892.xml

1.設置所選節點,如選中第二個節點
function SetSelNode()
{
TreeView1.selectedNodeIndex="1";
}

2.得到所選節點的Text,ID或NodeData
function GetAttribute()
{
alert(TreeView1.getTreeNode(TreeView1.selectedNodeIndex).getAttribute("Text"));
}
替換Text為ID或NodeData,可分別得到所選節點的ID或NodeData

3.修改節點屬性,如修改第一個節點的Text
function ModifyNode()
{
var node=TreeView1.getTreeNode("0");
node.setAttribute("Text","hgknight");
}

4.得到點擊節點
function TreeView1.onclick()
{
alert(TreeView1.getTreeNode(TreeView1.clickedNodeIndex).getAttribute("Text"));
}

5.添加節點
function AddNode()
{
var node=TreeView1.createTreeNode();
node.setAttribute("Text","hgknight");
TreeView1.add(node);
}
6.js遍歷所有節點
//只針對根結點,大家把它可改為遞歸形式
var NodeArray=new Array();
NodeArray=TreeView1.getChildren();
for(i=0;i<NodeArray.length;i++)
{
cNode=NodeArray[i];
alert(cNode.getAttribute("Text"));
}

1、用代碼在treeview web控制項中,添加node的方法

表欄位:編號,父編號,名稱
數據:
1 0 中華人民共和國
2 1 湖南
3 1 湖北

void creattree(string text,TreeNode tnd,string pid)
{

TreeNode t2=new TreeNode();
t2.Text=text;

tnd.Nodes.Add(t2);

生成
string str1 ="父編號 = '"+pid+"'";
DataRow[] dryl = dataSet31.Tables [0].Select(str1);

for(int i=0;i<=dryl.GetUpperBound(0);i++)
{

creattree(dryl[i][2].ToString(),t2,dryl[i][0].ToString());
}
}

//
TreeNode t1=new TreeNode();
t1.Text="地區信息";
TreeView2.Nodes.Add(t1);

creattree("中華人民共和國",t1,"1");

2、如何為TreeView添加事件?

Private Sub TreeView1_indexChanged(ByVal sender As Object, ByVal e As
Microsoft.Web.UI.WebControls.TreeViewSelectEventArgs) Handles
TreeView1.SelectedIndexChange
Dim a As Integer
a = TreeView1.SelectedNodeIndex
TextBox1.Text = CStr(a)
End Sub
但是AutoPostBack設置為True的話,TreeView還要刷新,閃爍,我的TreeView比較龐大
,這可怎麼辦???苦惱中。。。

3、為什麼TreeView 中的SelectedIndexChange為什麼不執行???

AutoPostBack屬性為真,SelectedIndexChange才能被執行。
不過這樣的話你選擇時會感到刷新得讓你痛苦,根據你的具體實現的目的,採用變通的
方法,盡量不使用SelectedIndexChange事件吧。

selectedindexchange事件掛到控制項上沒有?
InitializeComponent方法中檢查檢查

4、如何判斷 TreeView 的一個節點下是否有子節點???

if(selNode.Nodes.Count==0){
//該節點沒有位元組點
}

5、如何得到 TreeView 的當前選擇節點???

1.Tree.GetNodeFromIndex(Tree.SelectedNodeIndex.ToString())
2.private void TreeView1_SelectedIndexChange(object sender,
Microsoft.Web.UI.WebControls.TreeViewSelectEventArgs e)
e.NewNode即為所選節點

6、treeview實現兩層節點沒問題,擴展到無限層就出問題了?

我的那個做法還不夠完善,對於節點數較少的情況可以這樣做,對於節點數較多的情況
,你就不能這樣做了,你應該只載入一級,當點擊節點展開時,再載入它的下一級子節
點。
資料庫結構如下:
表名:Table1
ParentID varchar 20:父節點
ID varchar 20:節點
Name varchar 50:名稱

來來來,這里給你個常式,再給個我的網頁上的TreeViwe看看,一萬個子節點都沒問題。
http://dev1.eraserver.net/czc888/webform1.aspx
至於那三個圖象的意義你看我的網頁就知道了。分別表示一頁紙(沒有子節點)、一本
關閉的書(有子節點),一本打開的書(當前節點被展開)

void creat_node(string
name,Microsoft.Web.UI.WebControls.TreeNode t1,string number)
{
//定義一個新的結點

Microsoft.Web.UI.WebControls.TreeNode t2=new
Microsoft.Web.UI.WebControls.TreeNode();
t2.ID=number;
t2.Text=name;

//判斷是否為根結點
TreeView1.ExpandedImageUrl="images/Depart03.bmp";
if(t1.ID.Trim()=="###")
{
TreeView1.Nodes.Add(t2);
t2.ImageUrl="images/Depart01.bmp";
}
else
{
t1.Nodes.Add(t2);
t2.ImageUrl="images/Depart01.bmp";
t1.ImageUrl="images/Depart02.bmp";
}

//取得這個結點的所有子結點,利用遞歸自動生成
string mySelectQuery = "SELECT ParentID, ID,Name FROM table1
where ParentID='" + number +"'";
string MyConnString="provider=Microsoft.Jet.OLEDB.4.0;Data
Source="+Server.MapPath(".")+"/dt/mydata.mdb";
OleDbConnection myConnection = new
OleDbConnection(MyConnString);
OleDbCommand myCommand = new
OleDbCommand(mySelectQuery,myConnection);
myConnection.Open();
OleDbDataReader myReader;
myReader = myCommand.ExecuteReader();
while (myReader.Read())
{
creat_node(myReader.GetString(2),t2,myReader.GetString(1));

}
myReader.Close();
myConnection.Close();

}

private void CreateProviderTreeBtn_Click(object sender,
System.EventArgs e)
{
Microsoft.Web.UI.WebControls.TreeNode t1=new
Microsoft.Web.UI.WebControls.TreeNode();
creat_node("",t1,"###");

7、怎樣使用TreeView???

//初始化TreeView數據
private void InitTV(int intVOrderLen)
{
SqlDataReader dr;
SqlCommand myCommand;
string strSel = "select * from bas_enterprise where
len(vieworder)="+intVOrderLen+" order by vieworder";
myCommand = new SqlCommand (strSel, myConnection);
dr=myCommand.ExecuteReader();
while (dr.Read ())
{
TreeNode pNode=new TreeNode ();
pNode.Text =dr["EntpName"].ToString ();
pNode.ID =dr["ViewOrder"].ToString ();
TreeView1.Nodes .Add (pNode);

}
dr.Close ();

}

private void TreeView1_SelectedIndexChange(object sender,
Microsoft.Web.UI.WebControls.TreeViewSelectEventArgs e)
{
TreeNode NewNode=TreeView1.GetNodeFromIndex
(TreeView1.SelectedNodeIndex);
string strNodeId=NewNode.ID .ToString ();
SqlDataReader dr;
SqlCommand myCommand;
int intVOrderLen=strNodeId.Length+2;
string strSel = "select * from bas_enterprise where
len(vieworder)="+intVOrderLen+" and vieworder like '%"+strNodeId+"__%'
order by vieworder";
myCommand = new SqlCommand (strSel, myConnection);
dr=myCommand.ExecuteReader();
NewNode.Nodes .Clear();
while (dr.Read ())
{
TreeNode pNode=new TreeNode ();
pNode.Text =dr["EntpName"].ToString ();
pNode.ID =dr["ViewOrder"].ToString ();
NewNode.Nodes.Add (pNode);
}
dr.Close ();
TreeView1.ExpandLevel=1;
}

8、在treeview中如何查找一個值,並選中它?

問題:
各位,在已經建好的樹中如何查找一個文本或者是treenodes的id,找到後選中它?

答案:
for(int i=0;i<TreeView1.Nodes.Count;i++)
if(TreeView1.Nodes[i]==TextBox1.Text)
{
string index1=TreeView1.Nodes[i].GetNodeIndex();//取得index
TreeView1.SelectedNodeIndex=index1;
}

9、如何取得TreeView中各項的值??

private void TreeView1_SelectedIndexChange(object sender,
Microsoft.Web.UI.WebControls.TreeViewSelectEventArgs e)
{
Microsoft.Web.UI.WebControls.TreeNode
NewNode=TreeView1.GetNodeFromIndex(TreeView1.SelectedNodeIndex);
Label1.Text =NewNo

如果通過代碼要在父結點中增加子節點,代碼如何實現?
父節點代碼如下:
TreeNode pNode = new TreeNode();
pNode.ID = "Root";
pNode.Text = strNodeName;
TreeView1.Nodes.Add(pNode);
如果要在根結點"Root"下面再增加子節點,如何寫代碼?
TreeView1.Nodes.AddAt(pNode);這種方式好象不行.
TreeView1.Nodes[0].Nodes.Add(pNewNode);

/*************.Cs 中的代碼****************************

string strScript="<script language=\"javascript\" >";
strScript+=" function GetNode() \n"+"{ \n";
strScript+=" alert(TreeView1.getTreeNode(TreeView1.clickedNodeIndex).getAttribute('Text'));\n" ;
strScript+=" alert(TreeView1.getTreeNode(TreeView1.clickedNodeIndex).getAttribute('CheckBox'));\n";
strScript+=" alert(TreeView1.getTreeNode(TreeView1.clickedNodeIndex).getAttribute('Checked'));\n";
strScript+=" if (TreeView1.getTreeNode(TreeView1.clickedNodeIndex).getAttribute('Checked'))\n";
strScript+=" TreeView1.getTreeNode(TreeView1.clickedNodeIndex).setAttribute('Checked','false');\n";
strScript+=" else \n";
strScript+=" TreeView1.getTreeNode(TreeView1.clickedNodeIndex).setAttribute('Checked','true');\n";
strScript+=" \n } \n";
strScript+="</script>";
if(! this.IsClientScriptBlockRegistered("myjs"))
{
this.RegisterClientScriptBlock("myjs",strScript);
}

***************************************************//

現在我想在客戶端點擊父節點的checkbox則下級也被選中,可是使用下面的代碼,只能表面選中,在伺服器端卻得不到,請問有什麼其它好法子
<script language=\"javascript\" >
function GetNode()
{
var choose;
var indexid;
indexid=TreeView1.clickedNodeIndex;
if (TreeView1.getTreeNode(indexid).getAttribute('Checked'))
{
choose=false;
}
else
{
choose=true;
}
TreeView1.getTreeNode(indexid).setAttribute('Checked',choose);
var NodeArray=new Array();
NodeArray=TreeView1.getTreeNode(indexid).getChildren();
for(i=0;i<NodeArray.length;i++)
{
var tempindex=indexid+"."+i;
TreeView1.getTreeNode(indexid).setAttribute('Checked',choose);
}
}
//-->
</script>

③ 用MFC做一個簡單界面,左邊用樹控制項製作目錄,點擊目錄在右邊顯示目錄內容,比如圖片等。求源代碼

有相似源碼,是vc6的,左邊是硬碟目錄樹,右邊顯示目錄文件(不是顯示圖片),可以在此基礎上改進,如需要留郵箱

④ java樹形控制項

我寫過,你要的話可以發給你,可以後台聯系,為了符合回答規范,還是把代碼貼出來(鑒於篇幅僅帖一個文件):

package ui;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Vector;

public class TreePanel extends JPanel {
private Vector<TreePanelNode> nodes;
private Vector<Integer> selectedNodes;

private int tmpX, tmpY;
private int editingNode = -1;
private int addingParent = -2;
private int mouseX, mouseY;

public TreePanel () {
nodes = new Vector<TreePanelNode>();
selectedNodes = new Vector<Integer>();

setBackground(Color.WHITE);
addMouseListener(new MouseAdapter() {
public void mousePressed (MouseEvent me) {
tmpX = me.getX();
tmpY = me.getY();
if (nodes.size() == 0) {
addingParent = -1;
}
int i = 0;
for (; i<nodes.size(); i++) {
if (nodes.get(i).getBounds().contains(mouseX, mouseY)) {
if (me.isControlDown()) {
if (!selectedNodes.contains(i))
selectedNodes.add(i);
else
selectedNodes.removeElement(i);
} else if (!selectedNodes.contains(i)) {
selectedNodes = new Vector<Integer>();
selectedNodes.add(i);
}
if (me.getClickCount() == 2) {
nodes.get(i).setValue("");
editingNode = i;
}
break;
}
}
if (i == nodes.size())
if (!me.isControlDown())
selectedNodes = new Vector<Integer>();
repaint();
}

public void mouseReleased (MouseEvent me) {
addingParent = -2;
}
});
addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged (MouseEvent me) {
mouseX = me.getX();
mouseY = me.getY();
int i = 0;
for (; i<selectedNodes.size(); i++) {
if (nodes.get(selectedNodes.get(i)).getBounds().contains(mouseX, mouseY))
break;
}
if (i != selectedNodes.size()) {
if (me.isAltDown() && addingParent != -3) {
addingParent = selectedNodes.get(i);
} else {
for (i=0; i<selectedNodes.size(); i++) {
nodes.get(selectedNodes.get(i)).setLocation(nodes.get(selectedNodes.get(i)).getLocation().x + mouseX - tmpX,
nodes.get(selectedNodes.get(i)).getLocation().y + mouseY - tmpY);
}
tmpX = mouseX;
tmpY = mouseY;
}
}
repaint();
}

public void mouseMoved (MouseEvent me) {
mouseX = me.getX();
mouseY = me.getY();
}
});
addKeyListener(new KeyAdapter() {
public void keyTyped (KeyEvent ke) {
if (editingNode != -1) {
if (ke.getKeyCode() == KeyEvent.VK_ENTER)
editingNode = -1;
else
nodes.get(editingNode).setValue(nodes.get(editingNode).getValue().toString()+ke.getKeyChar());
} else if (ke.getKeyCode() == KeyEvent.VK_DELETE) {
for (int i=0; i<selectedNodes.size(); i++)
nodes.remove(selectedNodes.get(i));
}
repaint();
}
});
}

public void paint (Graphics g) {
super.paint(g);
FontMetrics fm = g.getFontMetrics();
if (addingParent > -2) {
String str = "node" + nodes.size();
int width = fm.stringWidth(str);
int height = fm.getHeight();

TreePanelNode pnt = null;
if (addingParent != -1)
pnt = nodes.get(addingParent);

nodes.add(new TreePanelNode(pnt, mouseX-width/2-10, mouseY-height/2-20, width+20, height+40, str));
addingParent = -3;
selectedNodes = new Vector<Integer>();
selectedNodes.add(nodes.size()-1);
}
for (int i=0; i<nodes.size(); i++) {
String str = nodes.get(i).getValue().toString();
int width = fm.stringWidth(str);
int height = fm.getHeight();
nodes.get(i).setSize(width + 20, height + 40);

if (selectedNodes.contains(i))
g.setColor(Color.RED);
else
g.setColor(Color.BLACK);

if (nodes.get(i).getParent() != null)
g.drawLine(nodes.get(i).getLocation().x+nodes.get(i).getWidth()/2,
nodes.get(i).getLocation().y+nodes.get(i).getHeight()/2,
nodes.get(i).getParent().getLocation().x+nodes.get(i).getParent().getWidth()/2,
nodes.get(i).getParent().getLocation().y+nodes.get(i).getParent().getHeight()/2);

g.drawString(str, nodes.get(i).getLocation().x + 10, nodes.get(i).getLocation().y + 20);
g.drawRect(nodes.get(i).getLocation().x, nodes.get(i).getLocation().y, nodes.get(i).getWidth(), nodes.get(i).getHeight());
}
grabFocus();
}
}

⑤ 求一個動態樹源碼(基於java

要求做個小程序:先輸入兩個String:分別是這個二叉樹的中序和後序,程序會算出這個樹的前序我實在寫不出那個遞歸。。頭要想爆了 終止搞定,inorder

⑥ 在vb中如何對樹控制項treeview進行以下的編程操作,要求給出詳細代碼

你自己好好分析下TreeView的使用方法。嘗試摸索下,否則永遠不會精進

⑦ 誰有ASP。net樹控制項的代碼 讓俺學習一下吧

現在西安某軟體公司工作,對於你提出的問題我大學剛畢業時也是很迷茫,但是我很幸運的是我遇到了我的幸福之星,他是一個非常牛的人。其實C和C 是一個想學編程的最好的入門語言。但是如果你要走這條路的話那你可要准備做好受打擊了心裡准備了,因為這兩門語言的確是很難的,要學的的話你至少要學四到五年才能去做一些東西。它倆都是和底層打交道的,所以要考慮計算機硬體的一些東西。除此之外你還要懂好多的,不過任何事都一樣難學肯定是學出山也很牛了,是這樣的你可以看看美國微軟的程序員不就是搞底層開發的嗎?當然對這兩門語言你做到這樣就可以了。對C你只要把譚浩強《C程序設計》上的每一道題練的很熟就可以了,一定要記得只有你自己編出來才是你的,看懂的永遠也不是你的。對於C 它不是練你的編程的邏輯思維的,而是讓你有一個面向對象的思想。你要做的是不停的去思考。還有等你學完之後,可試著朝「B/S模式」開發應用發展。當然這只是我的意見。我覺的咱現在還是以掙錢為主,其他的以後再說了,你覺的呢。最後祝你學業有成!好了就給你說到此了。有問題網路見!

⑧ c#列表和樹形控制項

列表可以用listview控制項,如果有多行的話可以用循環,這里只用一行進行說明:
ListViewItem lv = new ListViewItem(); //先實例化
lv.Text =「」; 一行的第一個元素,雙引號裡面填寫元素
lv.SubItems.Add(); 一行的第二個元素,括弧號裡面填寫元素
lv.SubItems.Add(); 一行的第二個元素,括弧號裡面填寫元素,以此類推
listViewname.Items.Add(lv); 將實例化添加到listview裡面, listViewname為所用控制項的名字

⑨ 求C#下拉樹控制項

using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;

namespace UserControls
{
/// <summary>
/// TreeViewComboBox 的摘要說明。
/// </summary>
public class TreeViewComboBox : UserControl
{
/// <summary>
/// 必需的設計器變數。
/// </summary>
private Container components = null;

public delegate void EventHandle(TreeNode n);
public event EventHandle AfterSelectedNode;

private bool _allowSelectParentNode = false;

public TreeViewComboBox()
{
this.InitializeComponent();

// Initializing Controls
this.pnlBack = new Panel();
this.pnlBack.BorderStyle = BorderStyle.Fixed3D;
this.pnlBack.BackColor = Color.White;
this.pnlBack.AutoScroll = false;

this.tbSelectedValue = new TextBox();
this.tbSelectedValue.BorderStyle = BorderStyle.None;
this.tbSelectedValue.ReadOnlyChanged += new EventHandler(tbSelectedValue_ReadOnlyChanged);

this.btnSelect = new ButtonEx();
this.btnSelect.Click += new EventHandler(ToggleTreeView);
this.btnSelect.FlatStyle = FlatStyle.Flat;

this.lblSizingGrip = new LabelEx();
this.lblSizingGrip.Size = new Size(9,9);
this.lblSizingGrip.BackColor = Color.Transparent;
this.lblSizingGrip.Cursor = Cursors.SizeNWSE;
this.lblSizingGrip.MouseMove += new MouseEventHandler(SizingGripMouseMove);
this.lblSizingGrip.MouseDown += new MouseEventHandler(SizingGripMouseDown);

this.tvTreeView = new TreeView();
this.tvTreeView.BorderStyle = BorderStyle.None;
this.tvTreeView.DoubleClick += new EventHandler(TreeViewNodeSelect);
this.tvTreeView.Location = new Point(0,0);
this.tvTreeView.LostFocus += new EventHandler(TreeViewLostFocus);
//this.tvTreeView.Scrollable = false;

this.frmTreeView = new Form();
this.frmTreeView.FormBorderStyle = FormBorderStyle.None;
this.frmTreeView.BringToFront();
this.frmTreeView.StartPosition = FormStartPosition.Manual;
this.frmTreeView.ShowInTaskbar = false;
this.frmTreeView.BackColor = SystemColors.Control;

this.pnlTree = new Panel();
this.pnlTree.BorderStyle = BorderStyle.FixedSingle;
this.pnlTree.BackColor = Color.White;

SetStyle(ControlStyles.DoubleBuffer,true);
SetStyle(ControlStyles.ResizeRedraw,true);

// Adding Controls to UserControl
this.pnlTree.Controls.Add(this.lblSizingGrip);
this.pnlTree.Controls.Add(this.tvTreeView);
this.frmTreeView.Controls.Add(this.pnlTree);
this.pnlBack.Controls.AddRange(new Control[]{btnSelect, tbSelectedValue});
this.Controls.Add(this.pnlBack);
}

/// <summary>
/// 清理所有正在使用的資源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region 組件設計器生成的代碼
/// <summary>
/// 設計器支持所需的方法 - 不要使用代碼編輯器
/// 修改此方法的內容。
/// </summary>
private void InitializeComponent()
{
//
// ComboBoxTree
//
this.Name = "ComboBoxTree";
// this._ = true;
this.Layout += new LayoutEventHandler(this.ComboBoxTree_Layout);

}
#endregion

#region Private 屬性
private Panel pnlBack;
private Panel pnlTree;
private TextBox tbSelectedValue;
private ButtonEx btnSelect;
private TreeView tvTreeView;
private LabelEx lblSizingGrip;
private Form frmTreeView;

// private string _branchSeparator;
// private bool _;
private Point DragOffset;
#endregion

#region Public 屬性

/// <summary>
/// 是否允許選擇非葉子節點
/// </summary>
public bool AllowSelectParentNode
{
set
{
_allowSelectParentNode = value;
}
get
{
return _allowSelectParentNode;
}
}

public Color TextForeColor
{
set { this.tbSelectedValue.ForeColor = value; }
}

public Color TextBackColor
{
set { this.tbSelectedValue.BackColor = value; }
}

/// <summary>
/// 文本只讀屬性
/// </summary>
public bool TextReadOnly
{
set { this.tbSelectedValue.ReadOnly = value; }
}

/// <summary>
/// 樹節點集合
/// </summary>
public TreeNodeCollection Nodes
{
get
{
return this.tvTreeView.Nodes;
}
}

/// <summary>
/// 選中的節點
/// </summary>
public TreeNode SelectedNode
{
set
{
this.tvTreeView.SelectedNode = value;
}
get
{
return this.tvTreeView.SelectedNode;
}
}

/// <summary>
/// ImageList
/// </summary>
public ImageList Imagelist
{
get {return this.tvTreeView.ImageList;}
set {this.tvTreeView.ImageList = value;}
}

/// <summary>
/// 顯示選中的值
/// </summary>
public override string Text
{
get {return this.tbSelectedValue.Text;}
set {this.tbSelectedValue.Text = value;}
}

// /// <summary>
// /// 顯示完整樹節點路徑時,路經的分隔符(1位字元)
// /// </summary>
// public string BranchSeparator
// {
// get {return this._branchSeparator;}
// set
// {
// if(value.Length > 0)
// this._branchSeparator = value.Substring(0,1);
// }
// }
//
// /// <summary>
// /// 是否是葉子節點
// /// </summary>
// public bool
// {
// get {return this._;}
// set {this._ = value;}
// }
#endregion

/// <summary>
/// 拖動樹背景,改變背景大小
/// </summary>
private void RelocateGrip()
{
this.lblSizingGrip.Top = this.frmTreeView.Height - lblSizingGrip.Height - 1;
this.lblSizingGrip.Left = this.frmTreeView.Width - lblSizingGrip.Width - 1;
}

/// <summary>
/// 點擊三角按鈕,顯示樹Form
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ToggleTreeView(object sender, EventArgs e)
{
if(!this.frmTreeView.Visible)
{
Rectangle CBRect = this.RectangleToScreen(this.ClientRectangle);
this.frmTreeView.Location = new Point(CBRect.X, CBRect.Y + this.pnlBack.Height);
this.tvTreeView.Nodes[0].Expand();
this.frmTreeView.Show();
this.frmTreeView.BringToFront();

this.RelocateGrip();
//this.tbSelectedValue.Text = "";
}
else
{
this.frmTreeView.Hide();
}
}

/// <summary>
/// 驗證選中的是否是葉子節點
/// </summary>
/// <returns></returns>
// public bool ValidateText()
// {
// string ValidatorText = this.Text;
// TreeNodeCollection TNC = this.tvTreeView.Nodes;
//
// for(int i = 0; i < ValidatorText.Split(this._branchSeparator.ToCharArray()[0]).Length; i++)
// {
// bool NodeFound = false;
// string NodeToFind = ValidatorText.Split(this._branchSeparator.ToCharArray()[0])[i];
// for(int j = 0; j < TNC.Count; j++)
// {
// if(TNC[j].Text == NodeToFind)
// {
// NodeFound = true;
// TNC = TNC[j].Nodes;
// break;
// }
// }
//
// if(!NodeFound)
// return false;
// }
//
// return true;
// }

#region 事件
/// <summary>
/// 改變背景大小,在滑鼠移動時發生
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void SizingGripMouseMove(object sender, MouseEventArgs e)
{
if(e.Button == MouseButtons.Left)
{
int TvWidth, TvHeight;
TvWidth = Cursor.Position.X - this.frmTreeView.Location.X;
TvWidth = TvWidth + this.DragOffset.X;
TvHeight = Cursor.Position.Y - this.frmTreeView.Location.Y;
TvHeight = TvHeight + this.DragOffset.Y;

if(TvWidth < 50)
TvWidth = 50;
if(TvHeight < 50)
TvHeight = 50;

this.frmTreeView.Size = new Size(TvWidth, TvHeight);
this.pnlTree.Size = this.frmTreeView.Size;
this.tvTreeView.Size = new Size(this.frmTreeView.Size.Width - this.lblSizingGrip.Width, this.frmTreeView.Size.Height - this.lblSizingGrip.Width);;
RelocateGrip();
}
}

/// <summary>
/// 改變背景大小,在按下滑鼠時發生
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void SizingGripMouseDown(object sender, MouseEventArgs e)
{
if(e.Button == MouseButtons.Left)
{
int OffsetX = Math.Abs(Cursor.Position.X - this.frmTreeView.RectangleToScreen(this.frmTreeView.ClientRectangle).Right);
int OffsetY = Math.Abs(Cursor.Position.Y - this.frmTreeView.RectangleToScreen(this.frmTreeView.ClientRectangle).Bottom);

this.DragOffset = new Point(OffsetX, OffsetY);
}
}

/// <summary>
/// 樹型控制項失去焦點
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void TreeViewLostFocus(object sender, EventArgs e)
{
if(!this.btnSelect.RectangleToScreen(this.btnSelect.ClientRectangle).Contains(Cursor.Position))
this.frmTreeView.Hide();
}

/// <summary>
/// 選中樹型空間節點
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void TreeViewNodeSelect(object sender, EventArgs e)
{
if(this._allowSelectParentNode && this.tvTreeView.SelectedNode != this.tvTreeView.Nodes[0])
{
this.tbSelectedValue.Text = this.tvTreeView.SelectedNode.Text;

this.ToggleTreeView(sender,null);

AfterSelectedNode(this.tvTreeView.SelectedNode);
}
else
{
if(this.tvTreeView.SelectedNode.Nodes.Count == 0)
{
this.tbSelectedValue.Text = this.tvTreeView.SelectedNode.Text;

this.ToggleTreeView(sender,null);

AfterSelectedNode(this.tvTreeView.SelectedNode);
}
}
}

private void ComboBoxTree_Layout(object sender, LayoutEventArgs e)
{
this.Height = this.tbSelectedValue.Height + 8;
this.pnlBack.Size = new Size(this.Width, this.Height - 2);

this.btnSelect.Size = new Size(16, this.Height - 6);
this.btnSelect.Location = new Point(this.Width - this.btnSelect.Width - 4, 0);

this.tbSelectedValue.Location = new Point(2, 2);
this.tbSelectedValue.Width = this.Width - this.btnSelect.Width - 4;
this.frmTreeView.Size = new Size(this.Width + 60, 250);
this.pnlTree.Size = this.frmTreeView.Size;
this.tvTreeView.Width = this.frmTreeView.Width - this.lblSizingGrip.Width;
this.tvTreeView.Height = this.frmTreeView.Height - this.lblSizingGrip.Width;
this.RelocateGrip();
}

/// <summary>
/// 文本只讀事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void tbSelectedValue_ReadOnlyChanged(object sender, EventArgs e)
{
if(this.tbSelectedValue.ReadOnly)
{
this.tbSelectedValue.BackColor = Color.White;
}
}
#endregion

#region 樹型背景Label
private class LabelEx : Label
{
/// <summary>
///
/// </summary>
public LabelEx()
{
this.SetStyle(ControlStyles.UserPaint,true);
this.SetStyle(ControlStyles.DoubleBuffer,true);
this.SetStyle(ControlStyles.AllPaintingInWmPaint,true);
}

/// <summary>
///
/// </summary>
/// <param name="e"></param>
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
ControlPaint.DrawSizeGrip(e.Graphics,Color.Black, 1, 0, this.Size.Width, this.Size.Height);
}
}
#endregion

#region 三角形按鈕
private class ButtonEx : Button
{
ButtonState state;

/// <summary>
///
/// </summary>
public ButtonEx()
{
this.SetStyle(ControlStyles.UserPaint,true);
this.SetStyle(ControlStyles.DoubleBuffer,true);
this.SetStyle(ControlStyles.AllPaintingInWmPaint,true);

}
/// <summary>
///
/// </summary>
/// <param name="e"></param>
protected override void OnMouseDown(MouseEventArgs e)
{
state = ButtonState.Pushed;
base.OnMouseDown(e);
}

/// <summary>
///
/// </summary>
/// <param name="e"></param>
protected override void OnMouseUp(MouseEventArgs e)
{
state = ButtonState.Normal;
base.OnMouseUp(e);
}

/// <summary>
///
/// </summary>
/// <param name="e"></param>
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
ControlPaint.DrawComboButton(e.Graphics, 0, 0, this.Width, this.Height, state);
}
}
#endregion

}

}

⑩ 有沒有現成的C#.net關於樹形結構的代碼或控制項。

樹形結構的控制項有,但只有插入,編輯,刪除的功能.
調序得自己寫方法```

熱點內容
編程兒歌 發布:2024-10-06 14:03:32 瀏覽:635
所有程序都能反編譯嗎 發布:2024-10-06 13:48:39 瀏覽:604
城際快車源碼 發布:2024-10-06 13:28:10 瀏覽:132
什麼配置主機直播好 發布:2024-10-06 13:22:11 瀏覽:906
office緩存 發布:2024-10-06 13:20:03 瀏覽:540
我的世界國際版比較熱門的伺服器 發布:2024-10-06 13:04:10 瀏覽:534
8g緩存還剩多少怎麼看 發布:2024-10-06 12:59:52 瀏覽:232
物流公司怎麼配置電子面單 發布:2024-10-06 12:54:12 瀏覽:804
魔域歸來手游掛機腳本 發布:2024-10-06 12:42:54 瀏覽:350
福建伺服器雲空間 發布:2024-10-06 12:42:42 瀏覽:100