MainForm()

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using WindowsFormsApplication3.Model;
using WindowsFormsApplication3.Enums;
using WindowsFormsApplication3.FormPage;
using WindowsFormsApplication3.DataStorge;
using System.Threading;

namespace WindowsFormsApplication3
{
    public partial class MainForm : Form
    {
        protected static readonly Color[] TREE_VIEW_FORE_COLOR = new Color[] { Color.Black, Color.Black, Color.Black, Color.Red, Color.Black };

        protected BaseWorkerForm activeForm;
        protected Dictionary<string, BaseWorkerForm> formDictionary;
        protected Dictionary<string, TreeNode> nodeDictionary;
        protected FormStatus status;
        protected CheckoutContext checkoutContext;
        public CheckoutContext CheckoutContext
        {
            get { return checkoutContext; }
        }

        public MainForm():base()
        {
            this.checkoutContext = new CheckoutContext();
            InitializeComponent();
        }

        protected void BuildNodeDictionary(TreeNodeCollection nodes) {
            foreach (TreeNode node in nodes) {
            if(formDictionary.ContainsKey(node.Name)){
                node.Tag=formDictionary[node.Name];
                nodeDictionary.Add(node.Name,node);
            }
            BuildNodeDictionary(node.Nodes);
            }
        }

        private void buttonTroubleshoot_Click(object sender, EventArgs e)
        {
            Execute();
        }

        public void Execute() {
            status = FormStatus.Processing;
            buttonTroubleshoot.Enabled = false;
            foreach (var childf in checkoutContext.formHierachy)
            {
                childf.childForm.ResetForm();;
                childf.childForm.RefreshForm();
            }
            RefreshForm();
            ExecuteForm();

        }

        protected void ExecuteForm() {
            foreach (var childf in checkoutContext.formHierachy)
            {

                ThreadPool.QueueUserWorkItem(new WaitCallback(childf.childForm.Execute),null);
            }
        }

        public void ChildFormStatusChanged() {
           // RefreshForm();
        }
        private void MainForm_Load(object sender, System.EventArgs e) {

            nodeDictionary=new Dictionary<string,TreeNode>();
            checkoutContext.formHierachy.Add(new FormHierachy("null", new IntroductionForm(checkoutContext, CheckoutStep.Introduction)));
            //checkoutContext.formHierachy.Add(new FormHierachy("IntroductionForm", new ClientForm(checkoutContext, CheckoutStep.Client)));
            //checkoutContext.formHierachy.Add(new FormHierachy("IntroductionForm", new ServerForm(checkoutContext, CheckoutStep.Server)));
            //checkoutContext.formHierachy.Add(new FormHierachy("ServerForm", new CellsForm(checkoutContext, CheckoutStep.Cells)));
            //checkoutContext.formHierachy.Add(new FormHierachy("ServerForm", new VolumesForm(checkoutContext, CheckoutStep.Volumes)));
            checkoutContext.formHierachy.Add(new FormHierachy("ClientForm", new OperationSystemForm(checkoutContext, CheckoutStep.OperationSystem)));

            foreach (var childf in checkoutContext.formHierachy)
            {
                childf.childForm.TopLevel = false;
                childf.childForm.Dock = DockStyle.Fill;
                childf.childForm.Visible = true;
                childf.childForm.FormBorderStyle = FormBorderStyle.None;
            }

            formDictionary=new Dictionary<string,BaseWorkerForm>();
            foreach (var childf in checkoutContext.formHierachy)
            {
                formDictionary.Add(childf.childForm.Text, childf.childForm);
                childf.childForm.FormStatusChanged += ChildFormStatusChanged;
            }
            activeForm = formDictionary["IntroductionForm"] as BaseWorkerForm;
            splitContainer1.Panel2.Controls.Add(activeForm);
            BuildNodeDictionary(treeViewSteps.Nodes);
            treeViewSteps.ImageList = ImageConstants.IMAGE_LIST_FORM_STATUS;
            treeViewSteps.ExpandAll();
            RefreshForm();
        }

        public void RefreshForm() {
            richTextBox.Clear();
            RefreshTreeNodes(treeViewSteps.Nodes);
            foreach(LogEntry le in checkoutContext.logData.logList){
                richTextBox.AppendText(le.ToString());
            }
        }

        public void RefreshTreeNodes(TreeNodeCollection nodes) {
            foreach (TreeNode node in nodes) {
                BaseWorkerForm form = node.Tag as BaseWorkerForm;
                FormStatus formstatus = form == null ? FormStatus.Waiting : form.Status;
                node.ForeColor = TREE_VIEW_FORE_COLOR[(int)formstatus];
                node.SelectedImageIndex = node.ImageIndex = (int)formstatus;
                RefreshTreeNodes(node.Nodes);
            }
        }

        private void treeViewSteps_AfterSelect(object sender, TreeViewEventArgs e)
        {
            TreeNode treeNode = e.Node;
            if (activeForm != null)
                splitContainer1.Panel2.Controls.Remove(activeForm);
            activeForm = treeNode.Tag as BaseWorkerForm;
            if (activeForm != null)
                splitContainer1.Panel2.Controls.Add(activeForm);
        }
     }
}

MainForm()

时间: 2024-10-21 22:09:24

MainForm()的相关文章

windows+nginx+iis+redis+Task.MainForm构建分布式架构 之 (nginx+iis构建服务集群)

本次要分享的是利用windows+nginx+iis+redis+Task.MainForm组建分布式架构,由标题就能看出此内容不是一篇分享文章能说完的,所以我打算分几篇分享文章来讲解,一步一步实现分布式架构:下面将先给出整个架构的核心节点简介,希望各位多多点赞: . 架构设计图展示 . nginx+iis构建服务集群 . redis存储分布式共享的session及共享session运作流程 . redis主从配置及Sentinel管理多个Redis集群 . 定时框架Task.MainForm提

开源一个跨平台运行的服务插件 - TaskCore.MainForm

本次将要很大家分享的是一个跨平台运行的服务插件 - TaskCore.MainForm,此框架是使用.netcore来写的,现在netcore已经支持很多系统平台运行了,所以将以前的Task.MainForm改良成跨平台的服务共大家使用和相互交流:本来这篇应该分享的是nginx+iis+redis+Task.MainForm构建分布式架构后续文章,但使用.netcore来定义一个服务插件和跨平台测试经过让我既兴奋又头痛,不说了下次再分享分布式后续文章吧:那么开始今天的分享内容,希望各位多多支持:

登录窗体登录失败但是MainForm依然弹出无法结束的解决方法

问题描述:登录窗体登录失败但是MainForm依然弹出无法结束的解决方法 解决方法:把form3.close,exit; 改为application.terminate 结束退出程序: 参考链接:http://www.delphitop.com/html/chengxu/131.html delphi关闭程序Close,application.Terminate与halt区别 当Close是一个主窗体时,程序会退出.Close会发生FormClose事件,FormCloseQuery事件Halt

FormShortCut MainForm 和 二级FORM

发现,主FORM 定义的快捷键,在二级FORM里也有效. 反过来,就无效. 这样的话,就要考虑 快捷键的冲突问题 了,本来以为不同的FORM 是独立的. http://codeverge.com/embarcadero.delphi.vcl.using/shortcuts-of-the-main-form-acces/1076501 John Schmidt wrote: > Hi, > > I experience problems when using keys in nonmoda

.Net WinForm 控件键盘消息处理剖析

在WinForm控件上我们可以看到很多关于键盘消息处理的方法,比如OnKeyDown, OnKeyPress, ProcessCmdKey, ProcessDialogKey,IsInputKey等等,那么这些方法是如何被组织的,每一个方法的具体含义又是什么哪?Win32的键盘消息又是如何到达控件上的这些方法的,本文将着重阐述这些问题,对.Net WinForm控件的键盘消息处理过程进行剖析.  1.      WinForm消息循环 大家都知道WinForm也是依赖于底层的消息机制的,通常我们

[连载]《C#通讯(串口和网络)框架的设计与实现》- 11.调试器的设计

目       录 第十一章     调试器设计... 2 11.1         调试接口... 2 11.2         界面方式调试... 3 11.3         命令行方式调试... 5 11.4         小结... 6 第十一章      调试器设计 SuperIO 框架平台设计.开发完毕后,想把代码编译成程序集(DLL),二次开发都通过引用DLL实现接口.继承类库来实现驱动和插件的开发,SuperIO框架的代码不会轻易去改变.这是框架设计最终要达到的效果,但是在二

【工业串口和网络软件通讯平台(SuperIO)教程】六.二次开发导出数据驱动

SuperIO相关资料下载:http://pan.baidu.com/s/1pJ7lZWf 1.1    导出数据接口的作用 在数据集成系统项目中,要么是自已集成其他厂家的设备,要么是其他厂家集成自己家的设备,在没有统一的标准前提下,就会有各种集成数据的格式.为了满足此类的场景,为设备输出数据专门设计了接口,开发者可以继承该接口,设备在处理完数据后,会把数据自动传输到该接口,可以按规定的数据格式进行输出了. 1.2    接口功能说明 开发设备输出接口,主要考虑到在集成项目中,集成过程中或被集成

【转】可在广域网部署运行的QQ高仿版 -- GG叽叽V3.2,增加离线消息、离线文件功能(源码)

(几句题外话:虽然就如何将GG发展为一个有商业价值的产品,我还没有很清晰明确的思路,但是从GG发布以来,通过GG认识了一些朋友,也接了一些小单子,赚了一点小钱.有了一点甜头,目前和2.3个好朋友一起做做小项目也是不错的,这未尝不是一条养家糊口之路了?呵呵) 距离上次更新(GG叽叽V3.0,完善基础功能)正好有1个月了,在这个月中,我主要为GG增加了离线消息和离线文件的功能.之所以将这两个功能提前实现,是因为至GG发布以来,就有很多朋友问我在GG的基础上如何实现离线消息和离线文件.看来作为一个能用

【转】可在广域网部署运行的QQ高仿版 -- GG叽叽V3.4,增加系统设置、最近联系人、群功能(源码)

自从上次版本(GG叽叽V3.2,增加离线消息.离线文件功能)发布后,我个人觉得主要的大功能都实现得差不多了,接下来的几个版本将不断优化GG的细节,提高其可用性.这次版本更新的内容主要是为GG增加了系统设置.并完善的了群所需的基础功能. 一.GG V3.4 新增功能展现 1.群功能完善 (1)创建群 (2)退出群(同时,通知其它群成员) 2.系统设置 (1)叉掉主窗口时,关闭程序还是隐藏窗口. (2)麦克风设备索引 (3)摄像头设备索引 (4)开机自动启动 3.其它 (1)最近联系人列表. (2)