網(wǎng)站改版申請(qǐng)制作網(wǎng)頁(yè)教程
C# 使用 TreeView 實(shí)踐 WinRiver II 的測(cè)量管理功能
- 一、WinRiver II 的測(cè)量管理界面
- 二、C# 實(shí)現(xiàn) TreeView 的測(cè)量管理界面
- 三、C# 2017 .Net FrameWork 框架代碼實(shí)現(xiàn)
- 3.1、圖像中圖標(biāo)拆分的代碼實(shí)現(xiàn)
- 3.1.1 準(zhǔn)備包含圖標(biāo)的 PNG 圖片
- 3.1.2 在 C# 2017 .Net FrameWork 框架項(xiàng)目中,添加該圖片資源。
- 3.1.3 在項(xiàng)目代碼中使用 imageList 載入圖標(biāo)集合
- 3.2、C# 實(shí)現(xiàn) TreeView 的測(cè)量管理的代碼
一、WinRiver II 的測(cè)量管理界面
WinRiver II 是ADCP 測(cè)量軟件,其測(cè)量管理界面實(shí)際是 TreeView 控件的應(yīng)用。
二、C# 實(shí)現(xiàn) TreeView 的測(cè)量管理界面
1、TreeView 圖標(biāo)載入
2、只點(diǎn)擊復(fù)選框圖標(biāo),改變復(fù)選框選擇,點(diǎn)擊文字部分不改變復(fù)選框選擇。
三、C# 2017 .Net FrameWork 框架代碼實(shí)現(xiàn)
3.1、圖像中圖標(biāo)拆分的代碼實(shí)現(xiàn)
3.1.1 準(zhǔn)備包含圖標(biāo)的 PNG 圖片
如下 PNG 圖片,每個(gè)圖標(biāo)大小為 16*16。
3.1.2 在 C# 2017 .Net FrameWork 框架項(xiàng)目中,添加該圖片資源。
3.1.3 在項(xiàng)目代碼中使用 imageList 載入圖標(biāo)集合
引用聲明
using System;using System.Drawing;using System.Windows.Forms;
圖片拆分為圖標(biāo),并加載到 imageList
Image sourceImage = Properties.Resources.PicturesGroup;//從資源中獲取圖像ImageList imageList = new ImageList();//新建圖像集合列表for (int i = 0; i <= 272; i += 16){Bitmap targetImage = new Bitmap(16, 16);//目標(biāo)圖像using (Graphics g = Graphics.FromImage(targetImage))// 使用Graphics對(duì)象繪制原始圖片的一部分到目標(biāo)Bitmap上{g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;// 設(shè)置高質(zhì)量插值法g.DrawImage(sourceImage, new Rectangle(0, 0, 16, 16), new Rectangle(i, 0, 16, 16), GraphicsUnit.Pixel);// 繪制圖片的一部分到目標(biāo)Bitmap上,指定源和目標(biāo)區(qū)域的坐標(biāo)和尺寸}imageList.Images.Add(targetImage);//將拆分的圖像加載到圖像集合列表}
3.2、C# 實(shí)現(xiàn) TreeView 的測(cè)量管理的代碼
treeView1.FullRowSelect = false; // 確保不選中整行treeView1.StateImageList = imageList;//將圖像集合列表賦與treeViewTreeNode Root1 = new TreeNode("項(xiàng)目文件");Root1.StateImageIndex = 1;//圖片列表中第2個(gè)圖標(biāo)treeView1.Nodes.Add(Root1);TreeNode Root2 = new TreeNode("項(xiàng)目測(cè)站信息");Root2.StateImageIndex = 5;//圖片列表中第6個(gè)圖標(biāo)treeView1.Nodes.Add(Root2);TreeNode Root3 = new TreeNode("項(xiàng)目測(cè)量");Root3.StateImageIndex = 5;treeView1.Nodes.Add(Root3);// 然后,向根節(jié)點(diǎn)添加子節(jié)點(diǎn)TreeNode childNode1 = new TreeNode("測(cè)次 000");childNode1.StateImageIndex = 2;//圖片列表中第3個(gè)圖標(biāo),未選中childNode1.Checked = false;Root3.Nodes.Add(childNode1);TreeNode childNode2 = new TreeNode("測(cè)次 001");childNode2.StateImageIndex = 2;//圖片列表中第3個(gè)圖標(biāo),未選中childNode2.Checked = false;Root3.Nodes.Add(childNode2);treeView1.ExpandAll();//自動(dòng)展開所有節(jié)點(diǎn)
節(jié)點(diǎn)點(diǎn)擊事件
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e){TreeNode node = e.Node;//當(dāng)前鼠標(biāo)的單擊節(jié)點(diǎn)if (node != null && e.Button == MouseButtons.Left){Point checkBoxPosition = new Point(e.Node.Bounds.Left - 16, e.Node.Bounds.Top + (e.Node.Bounds.Height - 16) / 2); // 估算復(fù)選框位置if (e.X >= checkBoxPosition.X && e.X <= checkBoxPosition.X + 16 && e.Y >= checkBoxPosition.Y && e.Y <= checkBoxPosition.Y + 16){string NodeText = node.Text.Substring(0, 2);if (NodeText == "測(cè)次"){if (node.Checked){node.Checked = false;node.StateImageIndex = 2;//圖片列表中第3個(gè)圖標(biāo),未選中}else{node.Checked = true;node.StateImageIndex = 3;//圖片列表中第4個(gè)圖標(biāo),已選中}}Console.WriteLine(node.Checked);}}}
為什么不采用 treeView1.CheckBoxes = true ,使用 treeView 復(fù)選框,因?yàn)椴捎么斯δ?#xff0c;所有的節(jié)點(diǎn)都有復(fù)選框,這是不需要的。