首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在一个用户控件中显示多个进程?

如何在一个用户控件中显示多个进程?
EN

Stack Overflow用户
提问于 2018-08-23 13:48:09
回答 1查看 70关注 0票数 0

有条件的例子。

有:

  • 数据文件(例如(文件" data ")): 。。\ 01 \ data \ fol_data_1 \ fol_data_1.txt 。。\ 01 \ data \ fol_data_2 \ fol_data_2.txt 。。\ 01 \ data \ fol_data_3 \ fol_data_3.txt 将“数据”文件显示在树视图中。 用户可以添加、删除、修改“数据”文件。 2.假设情况。
  1. 用户。在树中选择一个或多个“数据”文件(fol_data_ "N"),通过将CheckBoxes转换为“true”进行选择;
  2. 用户。点击“运行”按钮(button3); 3.程序。为每个文件“数据”创建表"DateTable“;
  3. 那个节目。为每个“数据”文件创建"DateGrid“;
  4. 那个节目。解析“数据”文件中的数据;
  5. 那个节目。他在“DateTable”中写道;
  6. 那个节目。引入"DataGrid"; 对于所有选定的“数据”文件,必须同时执行第3-7项。 项目3-7被放置在用户控件"GridUserControl“中。 当程序执行将行从“数据”文件传输到"DateTable“的过程时,用户可以使用光标导航树。 如果用户输入其已在运行的进程的“数据”文件,则"panel3“在行/中显示当前"DateGrid”填充状态的"GridUserControl“。

有个问题。

  1. 如何实现此场景?
  2. 关于实施这一设想的评论(建议)是什么?

普罗吉特- 链接

1

GridUserControl.cs

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace TreeView_FolderTree
{
    public partial class GridUserControl : UserControl
    {

        public string pathFileData;

        public GridUserControl(string pathFileData)
        {
            InitializeComponent();

            // Обрабатываем данные
            //Или записываем их в поле
            this.pathFileData = pathFileData;

        }

        private void GridUserControl_Load(object sender, EventArgs e)
        {
            start_GridUserControl();
        }

        public void start_GridUserControl()
        {
            DataTable table_1;

            //привязка данных
            BindingSource bs;


            table_1 = new DataTable();
            table_1.Columns.Add("Content", typeof(string));
            table_1.Columns.Add("DateTime", typeof(DateTime));

            bs = new BindingSource(table_1, "");

            dataGridView1.DataSource = bs;
            dataGridView1.Columns["DateTime"].DefaultCellStyle.Format = "dd.MM.yyyy HH:mm:ss tt";



            // Читаем файл "Данные"
            string[] lines = System.IO.File.ReadAllLines(pathFileData);

            // System.Console.WriteLine("Contents of WriteLines2.txt = ");
            foreach (string line in lines)
            {
                //создаем новую запись
                DataRow newrow = table_1.NewRow();

                //заполняем ее данными
                newrow["Content"] = line;
                newrow["DateTime"] = DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss");

                //заносим запись в таблицу
                table_1.Rows.Add(newrow);

                //обновляем данные в гриде
                bs.ResetBindings(false);

                // Пауза
                System.Threading.Thread.Sleep(1500);
                Application.DoEvents();

            }
        }


    }
}
EN

回答 1

Stack Overflow用户

发布于 2018-08-25 09:51:43

是这样做的。

我是在正确的轨道上,还是有更好的方法?

*代码Form1.cs *

创建TreeView

代码语言:javascript
复制
#region  *** TreeView Создание***
        private void InitFolders()
        {
            //Отключаем любую перерисовку
            //иерархического представления.
            treeView1.BeginUpdate();

            //Инициализируем новую переменную предоставляющую методы экземпляра
            //класса для создания, перемещения и перечисления
            //в каталогах и подкаталогах.
            System.IO.DirectoryInfo di;
            try
            {
                //Вызываем метод GetDirectories с передачей в качестве параметра, пути к 
                //выбранной директории. Данный метод возвращает
                //массив имен подкаталогов.
                string[] root = System.IO.Directory.GetDirectories(path);

                //Проходимся по всем полученным подкаталогам.
                foreach (string s in root)
                {
                    try
                    {
                        //Заносим в переменную информацию
                        //о текущей директории.
                        di = new System.IO.DirectoryInfo(s);
                        //Вызов метода сканирования с
                        //передачей в качестве параметра, информации
                        //о текущей директории и объект 
                        //System.Windows.Forms.TreeNodeCollection,
                        //который предоставляет узлы
                        //дерева, назначенные элементу управления 
                        //иерархического представления.
                        BuildTree(di, treeView1.Nodes);
                    }
                    catch { }
                }
            }
            catch { }
            //Разрешаем перерисовку иерархического представления.
            treeView1.EndUpdate();
        }       

        //Процесс получения папок и файлов
        private void BuildTree(System.IO.DirectoryInfo directoryInfo, TreeNodeCollection addInMe)
        {
            //Добавляем новый узел в коллекцию Nodes
            //с именем текущей директории и указанием ключа 
            //со значением "Folder".
            TreeNode curNode = addInMe.Add("Folder", directoryInfo.Name);

            //addInMe.Add(directoryInfo.FullName, directoryInfo.Name, 
            //тут можно указать номер картинки для узла из imageCollection);

            //Перебираем папки.
            foreach (System.IO.DirectoryInfo subdir in directoryInfo.GetDirectories())
            {
                //Запускам процесс получения папок и файлов 
                //с текущей найденной директории.
                BuildTree(subdir, curNode.Nodes);
            }

            //Перебираем файлы
            foreach (System.IO.FileInfo file in directoryInfo.GetFiles())
            {
                //Добавляем новый узел в коллекцию Nodes
                //С именем текущей директории и указанием ключа 
                //со значением "File".
                curNode.Nodes.Add("File", file.Name);

                //curNode.Nodes.Add("File", file.Name, 
                //тут можно указать номер картинки для узла из imageCollection);  
            }
        }
        #endregion *** TreeView ***

“运行”按钮

代码语言:javascript
复制
 // Выполнить 
        private void button3_Click(object sender, EventArgs e)
        {            
            // Перебор выбранных узлов "treeView"
               TreeNodeCollection Nodes;
               Nodes = treeView1.Nodes;

               CheckTrueTreeNode(Nodes);
        }

招募人员。树视图。CheckTrueTreeNode (TreeNodeCollection节点)

代码语言:javascript
复制
#region *** Рекруссия. treeView ***
        void CheckTrueTreeNode(TreeNodeCollection Nodes)
        {
                foreach (TreeNode tn in Nodes)
                {
                    if (tn.Checked == true)
                    {
                    // textBox1.Text += (tn.Name + " -**//**- " + path + tn.FullPath + "\r\n");  // инфо сообщение 
                    //treeView1.SelectedNode = null;
                    //treeView1.SelectedNode = tn;
                    //tn.EnsureVisible();
                    //return;

                    // путь к выбранному файлу 
                    pathFileData = path + tn.FullPath;

                    // BackgroundWorker. Старт
                    bw_start();

                    }

                    CheckTrueTreeNode(tn.Nodes);
                }
        }
        #endregion *** Рекруссия ***

开始"BackgroundWorker“。bw_start ()

代码语言:javascript
复制
private void bw_start()
         {
                // bw = new BackgroundWorker[];                
                i++;

                //новый поток
                bw[i] = new BackgroundWorker();
                bw[i].WorkerReportsProgress = true;
                bw[i].WorkerSupportsCancellation = true;

                bw[i].DoWork += new DoWorkEventHandler(bw_DoWork); 
                bw[i].RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted); //обработчик 
                bw[i].ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged);

                if (bw[i].IsBusy != true)
                bw[i].RunWorkerAsync();
        }

        private void bw_DoWork(object sender, DoWorkEventArgs e)
            {
                DataTable table_1;

                //привязка данных
                BindingSource bs;


                table_1 = new DataTable();
                table_1.Columns.Add("Content", typeof(string));
                table_1.Columns.Add("DateTime", typeof(DateTime));

                bs = new BindingSource(table_1, "");


                // Читаем файл "Данные"
                string[] lines = System.IO.File.ReadAllLines(pathFileData);

                // System.Console.WriteLine("Contents of WriteLines2.txt = ");
                foreach (string line in lines)
                {
                    // создаем новую запись
                    DataRow newrow = table_1.NewRow();

                    // заполняем ее данными
                    newrow["Content"] = line;
                    newrow["DateTime"] = DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss");

                    // заносим запись в таблицу
                    table_1.Rows.Add(newrow);

                    // обновляем данные в грид
                    bs.ResetBindings(false);

                    // Пауза
                    System.Threading.Thread.Sleep(1500);
                    Application.DoEvents();
                }
            }

        private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
            {

            }

        static void bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
            {

            }

当程序正在执行将行从“数据”文件移动到“DateTable”的过程时,用户可以用光标导航树。如果用户输入已启动的进程的“数据”文件,则"GridUserControl“显示在"panel3”中,当前状态为"DateGrid“填充”DateGrid“。

代码语言:javascript
复制
Provides 
// События TreeView/ Происходит после выбора узла дерева.
        private void TreeView1_AfterSelect(Object sender, TreeViewEventArgs e)
        {
            panel1.Controls.Clear();

            GridUserControl GridUsCont = new GridUserControl(????);

            panel1.Controls.Add(GridUsCont);

        }

* GridUserControl.cs *

代码语言:javascript
复制
namespace TreeView_FolderTree
{
    public partial class GridUserControl : UserControl
    {

        public string pathFileData;

        public GridUserControl(string pathFileData)
        {
            InitializeComponent();

            // Обрабатываем данные
            //Или записываем их в поле
* *         this.pathFileData = pathFileData;

        }

        private void GridUserControl_Load(object sender, EventArgs e)
        {
            start_GridUserControl();
        }

        public void start_GridUserControl()
        {            
            // dataGridView1
            dataGridView1.DataSource = bs;
            dataGridView1.Columns["DateTime"].DefaultCellStyle.Format = "dd.MM.yyyy HH:mm:ss tt";            

        }


    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51987373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档