网络采集软件核心技术剖析系列(7)---如何使用C#语言搭建程序框架(经典Winform界面,顶部菜单栏,工具栏,左边树形列表,右边多Tab界面)
一 本系列随笔概览及产生的背景
自己开发的豆约翰博客备份专家软件工具问世3年多以来,深受广大博客写作和阅读爱好者的喜爱。同时也不乏一些技术爱好者咨询我,这个软件里面各种实用的功能是如何实现的。
该软件使用.NET技术开发,为回馈社区,现将该软件中用到的核心技术,开辟一个专栏,写一个系列文章,以飨广大技术爱好者。
本系列文章除了讲解网络采编发用到的各种重要技术之外,也提供了不少问题的解决思路和界面开发的编程经验,非常适合.NET开发的初级,中级读者,希望大家多多支持。
很多初学者常有此类困惑,“为什么我书也看了,C#相关的各个方面的知识都有所了解,但就是没法写出一个像样的应用呢?”,
这其实还是没有学会综合运用所学知识,锻炼出编程思维,建立起学习兴趣,我想该系列文章也许会帮到您,但愿如此。
开发环境:VS2008
本节源码位置:https://github.com/songboriceboy/SimpleFrameWork
源码下载办法:安装SVN客户端(本文最后提供下载地址),然后checkout以下的地址:https://github.com/songboriceboy/SimpleFrameWork
系列文章提纲如下:
二 第七节主要内容简介(如何使用C#语言搭建程序框架(经典Winform界面,顶部菜单栏,工具栏,左边树形列表,右边多Tab界面))
如何使用C#语言搭建程序框架(经典Winform界面,顶部菜单栏,工具栏,左边树形列表,右边多Tab界面)的解决方案,演示demo如下图所示:可执行文件下载
demo功能简介:
程序启动后,扫描程序所在目录的WebSiteDB文件夹(参见上一节,里面保存着各个博主的全部博文,xxx.db文件),在左边的树形控件上加载数据库名称;双击树形控件的某个子节点,在右边新增一个类似浏览器的tab界面,在新打开的界面中,自动加载博主的博文列表信息。
三 基本原理
这个简单框架,主要有3个比较重要的地方:
1.树形控件节点的递归加载;
2.右边tab窗体的创建(主要利用了大名鼎鼎的WeifenLuo.WinFormsUI.Docking.dll);
3.点击树形节点,打开新窗口(前2者的结合)。
首先来看第一点,树形控件节点的递归加载,主要代码如下:
private void LoadWebSiteTree()
{
this.treeViewTask.Nodes.Clear();
TreeNode nodeRoot = new TreeNode();
nodeRoot.Text = "站点列表";
nodeRoot.Tag = -;
this.treeViewTask.Nodes.Add(nodeRoot); GetSubDirectoryNodes(nodeRoot, m_strDBFolder,true);
this.treeViewTask.SelectedNode = this.treeViewTask.TopNode;
}
创建根节点,然后调用GetSubDirectoryNodes函数,递归地加载子节点:
private void GetSubDirectoryNodes(TreeNode parentNode, string fullName, bool getFileNames)
{
if (!Directory.Exists(fullName))
{
Directory.CreateDirectory(fullName);
}
DirectoryInfo dir = new DirectoryInfo(fullName);
DirectoryInfo[] dirSubs = dir.GetDirectories(); // 为每个子目录添加一个子节点
foreach (DirectoryInfo dirSub in dirSubs)
{
// 不显示隐藏文件夹
if ((dirSub.Attributes & FileAttributes.Hidden) != )
{
continue;
} TreeNode node = new TreeNode();
node.Text = dirSub.Name; node.Tag = ;
node.ImageIndex = ;
parentNode.Nodes.Add(node); // 递归调用
GetSubDirectoryNodes(node, dirSub.FullName, getFileNames); }
// 为每个子目录添加一个子节点
foreach (DirectoryInfo dirSub in dirSubs)
{
// 不显示隐藏文件夹
if ((dirSub.Attributes & FileAttributes.Hidden) != )
{
continue;
} }
if (getFileNames) // 书中源码中,这部分在foreach内部,不正确
{
// 获取此节点的所有文件
FileInfo[] files = dir.GetFiles(); // 放置节点后。放置子目录中的文件。
foreach (FileInfo file in files)
{
if (file.Extension.ToString() != ".db")
continue;
string strNodeName = file.Name.Remove(file.Name.Length - , );
if (strNodeName == "home")
continue; TreeNode node = new TreeNode();
node.Text = strNodeName; node.Tag = ;
node.ImageIndex = ;
parentNode.Nodes.Add(node);
}
}
}
接下来看第二点,2.右边tab窗体的创建(主要利用了大名鼎鼎的WeifenLuo.WinFormsUI.Docking.dll),主要代码如下:
public DockContent ShowContent(string caption/*, Type formType*/)
{ DockContent frm = FindDocument(caption); if (frm == null)
{
Frm_TargetUrlView frm_TargetUrlView = new Frm_TargetUrlView((string)this.treeViewTask.SelectedNode.Parent.Text
, m_strDBConStringPath + m_strTreeNodeName
, (string)this.treeViewTask.SelectedNode.Text, this);
frm_TargetUrlView.MdiParent = this;
frm_TargetUrlView.WindowState = FormWindowState.Maximized;
frm_TargetUrlView.Show(this.dockPanel1);
frm_TargetUrlView.Focus();
frm_TargetUrlView.BringToFront();
return frm_TargetUrlView;
} frm.Show(this.dockPanel1);
frm.Focus();
frm.BringToFront();
return frm;
}
首先调用FindDocument(caption),判断当前tab窗口是否已经打开了,如果已经打开,则激活它;如果还未打开,新建一个tab窗口,并使这个刚创建的窗口成为激活窗口。
3.点击树形节点,打开新窗口(前2者的结合)。主要代码如下:
private void treeViewTask_MouseDoubleClick(object sender, MouseEventArgs e)
{
Point pos = new Point(e.X, e.Y);
TreeNode nodeClick = this.treeViewTask.GetNodeAt(pos);
if (nodeClick.Text == "站点列表")
{ this.treeViewTask.ContextMenuStrip = null;
return;
}
if (nodeClick != null && e.Button == MouseButtons.Left)
{
int nTag = (int)nodeClick.Tag;
if (nTag == )
return;
this.treeViewTask.SelectedNode = nodeClick; LoadInfoByNode(); } ShowContent(this.treeViewTask.SelectedNode.Text);
}
在树形节点的鼠标双击处理函数中,调用上面第二步的ShowContent函数,弹出对应的tab窗体。
更详细的代码请自行下载研究。
出处:http://www.cnblogs.com/ice-river/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
正在看本人博客的这位童鞋,我看你气度不凡,谈吐间隐隐有王者之气,日后必有一番作为!旁边有“推荐”二字,你就顺手把它点了吧,相得准,我分文不收;相不准,你也好回来找我!
网络采集软件核心技术剖析系列(7)---如何使用C#语言搭建程序框架(经典Winform界面,顶部菜单栏,工具栏,左边树形列表,右边多Tab界面)的更多相关文章
- 网络采集软件核心技术剖析系列(6)---将任意博主的全部博文下载到SQLite数据库中并通过Webbrower显示(将之前的内容综合到一起)
一 本系列随笔目录及本节代码下载 自己开发的豆约翰博客备份专家软件工具问世3年多以来,深受广大博客写作和阅读爱好者的喜爱.同时也不乏一些技术爱好者咨询我,这个软件里面各种实用的功能是如何实现的. 该软 ...
- 网络采集软件核心技术剖析系列(5)---将任意博主的全部博文下载到内存中并通过Webbrower显示(将之前的内容综合到一起)
一 本系列随笔概览及产生的背景 自己开发的豆约翰博客备份专家软件工具问世3年多以来,深受广大博客写作和阅读爱好者的喜爱.同时也不乏一些技术爱好者咨询我,这个软件里面各种实用的功能是如何实现的. 该软件 ...
- 网络采集软件核心技术剖析系列(4)---使用C#语言如何将html网页转换成pdf(html2pdf)
一 本系列随笔概览及产生的背景 本系列开篇受到大家的热烈欢迎,这对博主是莫大的鼓励,此为本系列第四篇,希望大家继续支持,为我继续写作提供动力. 自己开发的豆约翰博客备份专家软件工具问世3年多以来,深受 ...
- 网络采集软件核心技术剖析系列(3)---如何使用C#语言下载博文中的全部图片到本地并可以离线浏览
一 本系列随笔概览及产生的背景 本系列开篇受到大家的热烈欢迎,这对博主是莫大的鼓励,此为本系列第三篇,希望大家继续支持,为我继续写作提供动力. 自己开发的豆约翰博客备份专家软件工具问世3年多以来,深受 ...
- 网络采集软件核心技术剖析系列(2)---如何使用C#语言获得任意站点博文的正文及标题
一 本系列随笔概览及产生的背景 本系列开篇受到大家的热烈欢迎,这对博主是莫大的鼓励,此为本系列第二篇,希望大家继续支持,为我继续写作提供动力. 自己开发的豆约翰博客备份专家软件工具问世3年多以来,深受 ...
- 《SDN核心技术剖析和实战指南》第一章小结
第一章主要是概况.新技术有一个特点是,每家都有不同的说法.这里我只说说我比较认同的部分. SDN的核心概念大概有两个:转发面与控制面分离.开发可编程化.书里还说逻辑上集中控制,其实这个就可以从转发与控 ...
- WorldWind源码剖析系列:星球球体的加载与渲染
WorldWind源码剖析系列:星球球体的加载与渲染 WorldWind中主函数Main()的分析 在文件WorldWind.cs中主函数Main()阐明了WorldWind的初始化运行机制(如图1所 ...
- 《SDN核心技术剖析和实战指南》2.3 OF-CONFIG配置管理协议小结
OpenFlow协议定义了交换机和控制器交换数据的方式和规范,但并没有定义如何配置和管理必需的网络参数和网络资源,OF-CONFIG的提出就是为了对OpenFlow提供配置管理支持.如下图所示,OF- ...
- 采用VSPD、ModbusTool模拟串口、MODBUS TCP设备进行Python采集软件开发
版权声明:本文为博主原创文章,欢迎转载,并请注明出处.联系方式:460356155@qq.com 不少仪器/设备都提供了数据采集的接口,其中不少是串口或网络的MODBUS/TCP协议. 串口是比较简单 ...
随机推荐
- cmd常用命令行
新建文件夹或文件 打开磁盘 F: 退出cmd exit 返回上一级 cd.. 创建文件夹 md 文件夹名 在d盘创建文件夹 md d:\文件夹名 在当前目录打开 ...
- 按小时或天切割Nginx日志
#按小时或天切割Nginx日志到备份文件夹 LOGS_PATH=/home/www/logs/thc SAVE_PATH=/home/www/logs/thc YESTERDAY=$(date -d ...
- 培训补坑(day10:双指针扫描+矩阵快速幂)
这是一个神奇的课题,其实我觉得用一个词来形容这个算法挺合适的:暴力. 是啊,就是循环+暴力.没什么难的... 先来看一道裸题. 那么对于这道题,显然我们的暴力算法就是枚举区间的左右端点,然后通过前缀和 ...
- elastaticsearch
# https://elasticsearch-dsl.readthedocs.io/en/latest/ # 文档:https://es.xiaoleilu.com/054_Query_DSL/70 ...
- Django-models class Meta:元类
Django模型之Meta选项详解 Model 元数据就是 "不是一个字段的任何数据" -- 比如排序选项, admin 选项等等. Django模型类的Meta是一个内部类, ...
- [Leetcode Week2]Sort Colors
Sort Colors题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/sort-colors/description/ Description Give ...
- 手把手教你配置苹果APNS推送服务|钿畑的博客 | 钿畑的博客
http://www.360doc.com/content/15/0118/17/1073512_441822850.shtml# 钿畑的文章索引 1. 什么是推送通知 2. 什么是APNS? 3. ...
- 关于oracle的连接时ORA-12519错误的解决方案
系统在运行时出现了ORA-12519的错误,无法连接数据库,后来在网上找了下,找到了如下的解决方法,共享下. OERR: ORA-12519 TNS:no appropriate service ha ...
- text-overflow的用法
在平时的网页制作中一定碰到过内容溢出的问题,比如说文章列表很长,而其宽度又受到限制,此时超出宽度的内容就会以(...)显示.以前实现这样的效果都是由后台程序截取一定的字符数在前台输出,另外一种方法就是 ...
- CentOS6.9下安装 Pika 2.2.5(新增了拷贝安装版本的办法+对于PID的位置及数据库位置的理解)
一.环境准备 yum install -y snappy-devel protobuf-compiler protobuf-devel bzip2-devel zlib-devel bzip2 ...