1、添加2个自定义控件:chartTC、TreeViewTc; 2、修复了一些bug,完善了功能;3、更新了gitignore,将bin等目录忽略;

This commit is contained in:
tangchao0503
2022-06-16 13:26:55 +08:00
parent b43227dc58
commit f36c5eaa39
50 changed files with 13043 additions and 3770 deletions

View File

@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// 有关程序集的一般信息由以下
// 控制。更改这些特性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle("TreeViewTc")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("TreeViewTc")]
[assembly: AssemblyCopyright("Copyright © 2022")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// 将 ComVisible 设置为 false 会使此程序集中的类型
//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
//请将此类型的 ComVisible 特性设置为 true。
[assembly: ComVisible(false)]
// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
[assembly: Guid("d8ed957e-4b79-4c20-a2aa-c70008e5dad8")]
// 程序集的版本信息由下列四个值组成:
//
// 主版本
// 次版本
// 生成号
// 修订号
//
// 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号
// 方法是按如下所示使用“*”: :
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@ -0,0 +1,60 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{D8ED957E-4B79-4C20-A2AA-C70008E5DAD8}</ProjectGuid>
<OutputType>Library</OutputType>
<RootNamespace>TreeViewTc</RootNamespace>
<AssemblyName>TreeViewTc</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Drawing" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="TreeViewTc2.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="TreeViewTc2.Designer.cs">
<DependentUpon>TreeViewTc2.cs</DependentUpon>
</Compile>
<Compile Include="Properties\AssemblyInfo.cs" />
<Service Include="{94E38DFF-614B-4cbd-B67C-F211BB35CE8B}" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="TreeViewTc2.resx">
<DependentUpon>TreeViewTc2.cs</DependentUpon>
</EmbeddedResource>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

99
TreeViewTc/TreeViewTc2.Designer.cs generated Normal file
View File

@ -0,0 +1,99 @@
namespace TreeViewTc
{
partial class TreeViewTc2
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.treeView1 = new System.Windows.Forms.TreeView();
this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
this.deleteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.saveAsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.contextMenuStrip1.SuspendLayout();
this.SuspendLayout();
//
// treeView1
//
this.treeView1.Dock = System.Windows.Forms.DockStyle.Fill;
this.treeView1.HotTracking = true;
this.treeView1.Location = new System.Drawing.Point(0, 0);
this.treeView1.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.treeView1.Name = "treeView1";
this.treeView1.Size = new System.Drawing.Size(209, 539);
this.treeView1.TabIndex = 0;
this.treeView1.BeforeExpand += new System.Windows.Forms.TreeViewCancelEventHandler(this.treeView1_BeforeExpand);
this.treeView1.AfterExpand += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterExpand);
this.treeView1.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterSelect);
this.treeView1.NodeMouseClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this.treeView1_NodeMouseClick);
this.treeView1.NodeMouseDoubleClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this.treeView1_NodeMouseDoubleClick);
this.treeView1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.treeView1_MouseUp);
//
// contextMenuStrip1
//
this.contextMenuStrip1.ImageScalingSize = new System.Drawing.Size(20, 20);
this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.deleteToolStripMenuItem,
this.saveAsToolStripMenuItem});
this.contextMenuStrip1.Name = "contextMenuStrip1";
this.contextMenuStrip1.Size = new System.Drawing.Size(211, 80);
//
// deleteToolStripMenuItem
//
this.deleteToolStripMenuItem.Name = "deleteToolStripMenuItem";
this.deleteToolStripMenuItem.Size = new System.Drawing.Size(210, 24);
this.deleteToolStripMenuItem.Text = "delete";
this.deleteToolStripMenuItem.Click += new System.EventHandler(this.deleteToolStripMenuItem_Click);
//
// saveAsToolStripMenuItem
//
this.saveAsToolStripMenuItem.Name = "saveAsToolStripMenuItem";
this.saveAsToolStripMenuItem.Size = new System.Drawing.Size(210, 24);
this.saveAsToolStripMenuItem.Text = "saveAs";
this.saveAsToolStripMenuItem.Click += new System.EventHandler(this.saveAsToolStripMenuItem_Click);
//
// TreeViewTc2
//
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.treeView1);
this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.Name = "TreeViewTc2";
this.Size = new System.Drawing.Size(209, 539);
this.Load += new System.EventHandler(this.TreeViewTc2_Load);
this.contextMenuStrip1.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
public System.Windows.Forms.TreeView treeView1;
private System.Windows.Forms.ContextMenuStrip contextMenuStrip1;
private System.Windows.Forms.ToolStripMenuItem deleteToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem saveAsToolStripMenuItem;
}
}

256
TreeViewTc/TreeViewTc2.cs Normal file
View File

@ -0,0 +1,256 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
//自定义封装控件:
//1控件为成员【本代码使用此方法】https://blog.csdn.net/wanlong360599336/article/details/7578447
//2继承控件https://blog.csdn.net/aoshilang2249/article/details/41252781?utm_medium=distribute.pc_relevant_bbs_down.none-task-blog-baidujs-2.nonecase&depth_1-utm_source=distribute.pc_relevant_bbs_down.none-task-blog-baidujs-2.nonecase
namespace TreeViewTc
{
public delegate void Delegate1(string vinfo);//申明委托类型:用于进度条的更新
public partial class TreeViewTc2 : UserControl
{
public TreeViewTc2()
{
InitializeComponent();
treeView1.ExpandAll();
//treeView1.NodeMouseClick += new TreeNodeMouseClickEventHandler(treeView1_NodeMouseClick);
//this.treeView1.ContextMenuStrip = this.contextMenuStrip1;//这行代码有问题在控件treeView1任何位置鼠标右击都会显示右键菜单
}
void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
if (e.Button != MouseButtons.Right) return;
if (e.Node.Parent == null || e.Node == null) return;
treeView1.SelectedNode = e.Node;
contextMenuStrip1.Show(treeView1, e.X, e.Y);
}
public event Delegate1 PlotSifEvent;//申明事件
private void treeView1_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
{
if (e.Button != MouseButtons.Left) return;
if (e.Node.Parent == null || e.Node == null) return;
treeView1.SelectedNode = e.Node;
string nodeName = treeView1.SelectedNode.Name;
if (PlotSifEvent != null)
{
PlotSifEvent(nodeName);
}
}
private void TreeViewTc2_Load(object sender, EventArgs e)
{
////实例化TreeNode类 TreeNode(string text,int imageIndex,int selectImageIndex)
//TreeNode rootNode = new TreeNode("我的电脑"); //载入显示 选择显示
//rootNode.Tag = "我的电脑"; //树节点数据
//rootNode.Text = "我的电脑"; //树节点标签内容
//treeView1.Nodes.Add(rootNode); //树中添加根目录
////显示MyDocuments(我的文档)结点
//var myDocuments = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);//获取计算机我的文档文件夹
//TreeNode DocNode = new TreeNode(myDocuments);
//DocNode.Tag = "我的文档"; //设置结点名称
//DocNode.Text = "我的文档";
////DocNode.ImageIndex = IconIndexes.MyDocuments; //设置获取结点显示图片
////DocNode.SelectedImageIndex = IconIndexes.MyDocuments; //设置选择显示图片
//rootNode.Nodes.Add(DocNode); //rootNode目录下加载节点
//DocNode.Nodes.Add("");
////循环遍历计算机所有逻辑驱动器名称(盘符)
//foreach (string drive in Environment.GetLogicalDrives())
//{
// //实例化DriveInfo对象 命名空间System.IO
// var dir = new DriveInfo(drive);
// switch (dir.DriveType) //判断驱动器类型
// {
// case DriveType.Fixed: //仅取固定磁盘盘符 Removable-U盘
// {
// //Split仅获取盘符字母
// TreeNode tNode = new TreeNode(dir.Name.Split(':')[0]);
// tNode.Name = dir.Name;
// tNode.Tag = tNode.Name;
// //tNode.ImageIndex = IconIndexes.FixedDrive; //获取结点显示图片
// //tNode.SelectedImageIndex = IconIndexes.FixedDrive; //选择显示图片
// treeView1.Nodes.Add(tNode); //加载驱动节点
// tNode.Nodes.Add("");
// }
// break;
// }
//}
//rootNode.Expand();//展开树状视图
//string path = @"D:\Desktop\0easySifProject";
//Initialize(path);
}
private string mPath;
public void Initialize(string path)
{
string[] dics = Directory.GetDirectories(path);
foreach (string dic in dics)
{
if (dic.Contains("sifTmp"))
{
continue;
}
TreeNode subNode = new TreeNode(new DirectoryInfo(dic).Name);//实例化
subNode.Name = new DirectoryInfo(dic).FullName;//完整目录
subNode.Tag = subNode.Name;
treeView1.Nodes.Add(subNode);
subNode.Nodes.Add("");//加载空节点 实现+号
}
mPath = path;
}
public void reInitialize()
{
clearAll();
Initialize(mPath);
}
public void clearAll()
{
treeView1.Nodes.Clear();
}
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
}
public void AddRootNode(string NodeName)
{
//添加根节点
treeView1.Nodes.Add(NodeName.Trim());
}
private void btnAddSonNode_Click(string SonNodeName)
{
if (treeView1.SelectedNode == null)
{
MessageBox.Show("请选择要添加子节点的节点!");
return;
}
treeView1.SelectedNode.Nodes.Add(SonNodeName.Trim());
}
private void btnDelete_Click(object sender, EventArgs e)
{
}
private void treeView1_AfterExpand(object sender, TreeViewEventArgs e)
{
e.Node.Expand();
}
private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e)
{
TreeViewItems.Add(e.Node);
}
public event Delegate1 DeleteEvent;//申明事件
private void deleteToolStripMenuItem_Click(object sender, EventArgs e)
{
string nodeName = treeView1.SelectedNode.Name;
if (MessageBox.Show("确认删除?", "此删除不可恢复", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
if (DeleteEvent != null)
{
DeleteEvent(nodeName);
treeView1.SelectedNode.Remove();
}
}
}
private void treeView1_MouseUp(object sender, MouseEventArgs e)
{
}
public event Delegate1 SaveAsEvent;//申明事件
private void saveAsToolStripMenuItem_Click(object sender, EventArgs e)
{
string nodeName = treeView1.SelectedNode.Name;
if (SaveAsEvent != null)
{
SaveAsEvent(nodeName);
}
}
}
public static class TreeViewItems
{
public static void Add(TreeNode treeNode)
{
//try..catch异常处理
try
{
//判断"我的电脑"Tag 上面加载的该结点没指定其路径
if (treeNode.Tag.ToString() != "我的电脑")
{
treeNode.Nodes.Clear();//清除空节点再加载子节点
TreeNode tNode = treeNode;//获取选中\展开\折叠结点
string path = tNode.Name;//路径
//获取"我的文档"路径
if (treeNode.Tag.ToString() == "我的文档")
{
path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);//获取计算机我的文档文件夹
}
//获取指定目录中的子目录名称并加载结点
string[] dics = Directory.GetDirectories(path);
foreach (string dic in dics)
{
TreeNode subNode = new TreeNode(new DirectoryInfo(dic).Name);//实例化
subNode.Name = new DirectoryInfo(dic).FullName;//完整目录
subNode.Tag = subNode.Name;
//subNode.ImageIndex = IconIndexes.ClosedFolder;//获取节点显示图片
//subNode.SelectedImageIndex = IconIndexes.OpenFolder;//选择节点显示图片
tNode.Nodes.Add(subNode);
subNode.Nodes.Add("");//加载空节点 实现+号
}
//获取目录中的文件
string[] files = Directory.GetFiles(path);
foreach (string file in files)
{
string[] nameTmp = file.Split('\\');
string name = nameTmp[nameTmp.Length - 1];
TreeNode subNode = new TreeNode(name);//实例化
subNode.Name = file;//完整目录
subNode.Tag = subNode.Name;
//subNode.ImageIndex = IconIndexes.ClosedFolder;//获取节点显示图片
//subNode.SelectedImageIndex = IconIndexes.OpenFolder;//选择节点显示图片
tNode.Nodes.Add(subNode);
}
}
}
catch (Exception msg)
{
MessageBox.Show(msg.Message);//异常处理
}
}
}
}

123
TreeViewTc/TreeViewTc2.resx Normal file
View File

@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>