public DetailsForm(ProcessInformation selectedProcessInformation) { InitializeComponent(); SelectedProcessInformation = selectedProcessInformation; Text = String.Format("Свойства: {0} ({1})", SelectedProcessInformation.Name, SelectedProcessInformation.PID); InitializeProcessData(); ActiveControl = label1; }
/// <summary> /// Получает информацию обо всех процессах, существующих в данный момент в операционной системе /// </summary> /// <returns>Массив объектов ProcessInformation, соответствующих существующим процессам</returns> public static ProcessInformation[] GetProcessesInformation() { Process[] processes = Process.GetProcesses(); ProcessInformation[] processesInformation = new ProcessInformation[processes.Length]; for (int i = 0; i < processesInformation.Length; i++) { processesInformation[i] = new ProcessInformation(processes[i]); } return(processesInformation); }
private void listView1_DoubleClick(object sender, EventArgs e) { /*ProcessInformation[] processesInformationToForm2 = new ProcessInformation[processesInformation.Length]; * for (int i = 0; i < processesInformationToForm2.Length; i++) * { * processesInformationToForm2[i] = new ProcessInformation(processesInformation[i]); * }*/ ListViewItem doubleClickedListViewItem = (sender as ListView).FocusedItem; ProcessInformation selectedProcessInformation = Array.Find <ProcessInformation>(processesInformation, pi => pi.PID == Int32.Parse(doubleClickedListViewItem.SubItems[1].Text)); DetailsForm form2 = new DetailsForm(selectedProcessInformation); form2.Show(); }
/// <summary> /// Обновляет данные в элементе формы listView1 /// </summary> private void RenewDataInListView() { processesInformation = ProcessInformation.GetProcessesInformation(); Array.Sort <ProcessInformation>(processesInformation, processesInformationComparison); if (processesInformation.Length == listView1.Items.Count) //если число процессов не изменилось, но могли измениться сами процессы, { for (int i = 0; i < listView1.Items.Count; i++) //то нужно переписать текстовую информацию в listView1 { if (listView1.Items[i].Text != processesInformation[i].Name) { listView1.Items[i].Text = processesInformation[i].Name; } if (listView1.Items[i].SubItems[1].Text != String.Format("{0}", processesInformation[i].PID)) { listView1.Items[i].SubItems[1].Text = String.Format("{0}", processesInformation[i].PID); } } } else if (processesInformation.Length > listView1.Items.Count) //если число процессов увеличилось, { for (int i = 0; i < listView1.Items.Count; i++) //то нужно переписать текстовую информацию в listView1 { if (listView1.Items[i].Text != processesInformation[i].Name) { listView1.Items[i].Text = processesInformation[i].Name; } if (listView1.Items[i].SubItems[1].Text != String.Format("{0}", processesInformation[i].PID)) { listView1.Items[i].SubItems[1].Text = String.Format("{0}", processesInformation[i].PID); } } ListViewItem listViewItem; for (int i = listView1.Items.Count; i < processesInformation.Length; i++)//и добавить в него новые записи { listViewItem = new ListViewItem(processesInformation[i].Name); listViewItem.SubItems.Add(String.Format("{0}", processesInformation[i].PID)); listView1.Items.Add(listViewItem); } } else if (processesInformation.Length < listView1.Items.Count) //если число процессов уменьшилось { for (int i = 0; i < processesInformation.Length; i++) //то нужно переписать текстовую информацию в listView1 { if (listView1.Items[i].Text != processesInformation[i].Name) { listView1.Items[i].Text = processesInformation[i].Name; } if (listView1.Items[i].SubItems[1].Text != String.Format("{0}", processesInformation[i].PID)) { listView1.Items[i].SubItems[1].Text = String.Format("{0}", processesInformation[i].PID); } } int numberOfDeletingItems = listView1.Items.Count - processesInformation.Length; //количество записей для удаления нужно посчитать заранее, так как this.listView1.Items.Count немедленно изменяется при удалении элементов for (int i = processesInformation.Length; i < processesInformation.Length + numberOfDeletingItems; i++) //и удалить остальные записи { listView1.Items.RemoveAt(processesInformation.Length); //при удалении i-го элемента коллекции, индексы всех последующих элементов уменьшаются на 1 } } }
public ProcessInformation(ProcessInformation processInformation) { process = processInformation.process; PID = processInformation.PID; Name = processInformation.Name; }