zoukankan      html  css  js  c++  java
  • C# 动态创建出来的窗体间的通讯 delegate3

     附件1:http://files.cnblogs.com/xe2011/CSharp_WindowsForms_delegate03.rar

    一个RTF文件管理器

    描述

      Form2,Form3,Form4都是独立存在的,同时完成独立的功能,相互不依赖。

    最后把Form2,Form3,Form4集合放在FORM1上,实际上需要这3个的窗体Form2,Form3,Form4间相互得到改变后的变量值。

    FORM2 文件夹列表

          在FORM1中设置一初始文件夹路径  

      要实现的功能:当单击本窗体中的TreeView.node时,要求Form3.ListView的文件列表同时更新。

    FORM3 文件列表

      需要得到Form2当前选中的文件夹路径

         要实现的功能:当本窗体中的ListView选中一个节点时时,同时Form4.RichtextBox 打开并读取这个文件。

    FORM4是一个RFT编辑器

      需要得到FORM3 文件列表中选中的文件完整路径

         要实现的功能:当单击本窗体中的保存按钮,要保存Form3.ListView中选中的那个文件。

    实现步骤

    1 创建4个空窗体分别为:Form1.cs,Form2.cs,Form3.cs,Form4.cs

    Form1:3个Panel

     

    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 System.IO;
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
    
            }
    
            Form2 f2 = new Form2();
            Form3 f3 = new Form3();
            Form4 f4 = new Form4();
    
            private void Form1_Load(object sender, EventArgs e)
            {
                f2.Dock = DockStyle.Fill;
                f2.TopLevel = false;
                f2.FormBorderStyle = FormBorderStyle.FixedToolWindow;
                f2.Parent = panel1;
                f2.Show();
    
                
                f3.Dock = DockStyle.Fill;
                f3.TopLevel = false;
                f3.FormBorderStyle = FormBorderStyle.FixedToolWindow;
                panel2.Controls.Add(f3);
                f3.Show();
    
    
                
                f4.Dock = DockStyle.Fill;
                f4.TopLevel = false;
                f4.FormBorderStyle = FormBorderStyle.FixedToolWindow;
                panel3.Controls.Add(f4);
                f4.Show();
    
                f2.CallBackPro += new Form2.CallBack(GetForm2TreeViewNodePath);
                f3.CallBackPro += new Form3.CallBack(GetForm3ListViewFileFullPath);
            }
    
            private void GetForm2TreeViewNodePath(string path)
            {
                f3.DirPath = path;
                f3.UpdateFileListView();
            }
    
            private void GetForm3ListViewFileFullPath(string s)
            {
                 f4.FileName =s;
                 f4.LoadFile();
            }
        }
    }
    View Code

    Form2:treeView1,textBox1

    代码:

    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 System.IO;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form2 : Form
        {
            public Form2()
            {
                InitializeComponent();
            }
            #region 添加目录
    
            //目录 D:AdministratorDocumentsTestData
            //返回 D:AdministratorDocuments
            public string GetDirectoryParentPath(string path)
            {
                DirectoryInfo d = new DirectoryInfo(path);
                return d.Parent.FullName;
            }
    
    
            /// <summary>
            /// 把一个文件夹的所有文件夹添加 到TREEVIEW中
            /// DirectoryToTreeNode(@"D:AdministratorDocumentsTestData", treeViewCtrl1);
            /// </summary>
            /// <param name="dirPath"></param>
            /// <param name="treeView"></param>
            public void DirectoryToTreeNode(string dirPath, TreeView treeView)
            {
                treeView.Nodes.Clear();
                DirectoryInfo di = new DirectoryInfo(dirPath);
                TreeNode rootNode = new TreeNode(di.Name);
                GetDirs(di.GetDirectories(), rootNode);
                treeView.Nodes.Add(rootNode);
                rootNode.Expand();
            }
    
    
            public void GetDirs(DirectoryInfo[] subDirs, TreeNode treeNode)
            {
                foreach (DirectoryInfo d in subDirs)
                {
                    TreeNode node = new TreeNode(d.Name, 0, 0);
                    DirectoryInfo[] subSubDirs = d.GetDirectories();
                    GetDirs(subSubDirs, node);
                    treeNode.Nodes.Add(node);
                }
            }
            #endregion
    
    
            public delegate void CallBack(string path);
            public event CallBack CallBackPro;
    
            //public delegate string s ="s";
            public string DirPath = "TestData";// @"D:AdministratorDocumentsTestData";
            private string RootDir = ""; //返回 D:AdministratorDocuments
            public string CurrentPath = "";//当前选中的文件夹
            public string FileExtend = "";//.rtf
            public ListView listView1 = null;  
    
            private void Form2_Load(object sender, EventArgs e)
            {
    
             
                RootDir = GetDirectoryParentPath(DirPath);
                DirectoryToTreeNode(DirPath, treeView1);
    
                CurrentPath = RootDir;
                textBox1.Text = CurrentPath;
            }
    
            private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
            {
                TreeNode node = e.Node;
                if (e.Button == MouseButtons.Right)
                { //右键选择节点
                    treeView1.SelectedNode = node;
                }
                CurrentPath = RootDir + "\" + e.Node.FullPath;
                textBox1.Text = CurrentPath;
    
                CallBackPro(CurrentPath);
                //UpdateListViewFileList(CurrentPath);
            }
        }
    }
    View Code

    Form3:listView1,textBox1

    代码

    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 System.IO;
    namespace WindowsFormsApplication1
    {
        public partial class Form3 : Form
        {
            public Form3()
            {
                InitializeComponent();
            }
    
            #region  function...
            public static void AddFileListToListView1(ListView listView, string path, string FileExtended)
            {
                DirectoryInfo di = new DirectoryInfo(path);
                FileInfo[] fi = di.GetFiles("*" + FileExtended);//只添加.txt的文件
    
                for (int i = 0; i < fi.Length; i++)
                {
                    string fileName1 = fi[i].ToString();
                    string fileName2 = RemoveFileExt(fileName1, FileExtended);// fileName1.Replace(FileExtended, "");
                    listView.Items.Add(fileName2);
                    //listView.Items[i].ImageIndex = 0;
                }
            }
            #region 复制一个文件名不包括扩展名
            //Text = RemoveFileExt(@"C:Tmpquickview_src.zip", ".zip");
            //返回 C:Tmpquickview_src
            public static string RemoveFileExt(string s, string FileExt)
            {
                string value = s;
                string f1 = s.Substring(s.Length - 4, 4);
                if (f1 == FileExt)
                    value = s.Substring(0, s.Length - 4);
                return value;
            }
            #endregion
    
            /// <summary>
            /// 更新目录文件
            /// </summary>
            public void UpdateFileListView()
            {
                listView1.BeginUpdate();
                listView1.Items.Clear();
                AddFileListToListView1(listView1, DirPath, FileExtend);
                //listViewCtrl1.SetSmallIcon(imageList1, 0);
                listView1.EndUpdate();
            }
    
            #endregion
    
    
            public delegate void CallBack(string path);
            public event CallBack CallBackPro;
    
            public  string DirPath ="";//= "TestData";// @"D:AdministratorDocumentsTestData";
            public string CurrentFileName = "";//当前选中的文件夹
            public string FileExtend = ".rtf";//.rtf
    
            private void Form3_Load(object sender, EventArgs e)
            {
                DirPath = System.Windows.Forms.Application.StartupPath + "\TestData";
                UpdateFileListView();
                textBox1.Text = CurrentFileName;
            }
    
            private void listView1_SelectedIndexChanged(object sender, EventArgs e)
            {
                if (listView1.SelectedIndices != null)
                {
                    if (listView1.SelectedItems.Count == 1)
                        //--------------------------------"C:abc"  21312 ".rtf"
                        CurrentFileName = DirPath + "\" + listView1.SelectedItems[0].SubItems[0].Text + FileExtend;
                }
                else
                {
                    CurrentFileName = ""; 
                }
                textBox1.Text = CurrentFileName;
                CallBackPro(CurrentFileName);
            }
        }
    }
    View Code

    Form4:richTextBox1,toolStrip1,toolStrip1.按钮,textBox1

    代码

    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;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form4 : Form
        {
            public Form4()
            {
                InitializeComponent();
            }
    
            public string FileName = "";
    
            public void LoadFile()
            {
                richTextBox1.LoadFile(FileName);
            }
    
            private void 保存SToolStripButton_Click(object sender, EventArgs e)
            {
                try
                {
                    richTextBox1.SaveFile(FileName);
                }
                catch (System.Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                
            }
    
            private void richTextBox1_TextChanged(object sender, EventArgs e)
            {
                textBox1.Text = FileName;
            }
    
    
    
    
    
        }
    }
    View Code

    一个SpilterContain拖拽好结果正确的模型架 可以保存SpilterContain的位置 用的是XML

    关于效果你可以自己用个splitContainer1 做3个面板 去做个拖拽窗体时大小改变和WINDOWS的EXPLORER一样的 结果为正确

    附件2:http://files.cnblogs.com/xe2011/WinForm_ExplorerFrame_Read_AndSave_XML.rar

  • 相关阅读:
    指针与数组的区别 —— 《C语言深度剖析》读书心得
    console ouput 与 重定向输出 效率对比
    First day in 阿里
    TestNG 使用入门教程
    Spring简单使用简介
    玩转Spring JUnit+mockito+powermock单元测试(使用详解)
    Spring Boot Junit 单元测试详解
    spring @Value注入map、List、Bean、static变量方式及详细使用
    单元测试Junit使用详解
    Mockito & PowerMock详解
  • 原文地址:https://www.cnblogs.com/xe2011/p/3440340.html
Copyright © 2011-2022 走看看