[英]How to display multiple processes in one user control?
一個有條件的例子。
有:
-數據文件(例如(文件“數據”)使用):
.. \\ 01 \\數據\\ fol_data_1 \\ fol_data_1.txt
.. \\ 01 \\數據\\ fol_data_2 \\ fol_data_2.txt
.. \\ 01 \\數據\\ fol_data_3 \\ fol_data_3.txt
“數據”文件顯示在樹形視圖中。
用戶可以添加,刪除,修改“數據”文件。
場景。
1.用戶。 在樹中選擇一個或多個“數據”文件(fol_data_“ N”); 通過將CheckBoxes轉換為“ true”來進行選擇。
2.用戶。 單擊“運行”按鈕(button3);
3.程序。 為每個文件“數據”創建表“ DateTable”;
4.程序。 為每個“數據”文件創建“ DateGrid”;
5.程序。 解析“數據”文件中的數據;
6.程序。 他在“ DateTable”中寫道;
7.程序。 帶入“ DataGrid”;
必須同時為所有選定的“數據”文件執行項目3-7。
項目3-7放置在用戶控件“ GridUserControl”中。
在程序執行將行從“數據”文件傳輸到“日期表”的過程時,用戶可以使用光標瀏覽樹。
如果用戶為已經為其運行的進程輸入“數據”文件,則“ panel3”顯示“ GridUserControl”以及當前“ DateGrid”填充狀態(以行/
題。
1.如何實現這種情況?
2.對實施此方案有何評論(建議)?
GridUserControl.cs
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();
}
}
}
}
是的
我是在正確的道路上還是有更好的方法?
*代碼Form1.cs *
創建TreeView
#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 ***
“運行”按鈕
// Выполнить
private void button3_Click(object sender, EventArgs e)
{
// Перебор выбранных узлов "treeView"
TreeNodeCollection Nodes;
Nodes = treeView1.Nodes;
CheckTrueTreeNode(Nodes);
}
招聘。 樹視圖。 CheckTrueTreeNode(TreeNodeCollection節點)
#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()
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)
{
}
段落:“程序正在執行將行從“數據”文件移動到“日期表”的過程時,用戶可以使用光標瀏覽樹。如果用戶輸入已經存在的過程的“數據”文件開始時,“ panel3”中會顯示“ GridUserControl”,並以“
Provides
// События TreeView/ Происходит после выбора узла дерева.
private void TreeView1_AfterSelect(Object sender, TreeViewEventArgs e)
{
panel1.Controls.Clear();
GridUserControl GridUsCont = new GridUserControl(????);
panel1.Controls.Add(GridUsCont);
}
* GridUserControl.cs *
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";
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.