J13*_*t0u 2 c# listbox winforms
我正在尝试用C#更新这个Listbox.这是我在C#中的第一个程序,不完全确定它是如何工作的.
public partial class progHider : Form
{
String[] processList;
public progHider()
{
InitializeComponent();
}
private void progHider_Load(object sender, EventArgs e)
{
List.Items.AddRange(getList());
}
private String[] getList()
{
Process[] processlist = Process.GetProcesses();
processList = new String[Process.GetProcesses().Length];
int index = 0;
foreach (Process process in processlist)
{
if (!String.IsNullOrEmpty(process.MainWindowTitle))
{
processList[index] = process.MainWindowTitle;
index++;
}
}
return processList;
}
private void btnrefresh_Click(object sender, EventArgs e)
{
List.DataSource = null;
this.Update();
}
Run Code Online (Sandbox Code Playgroud)
所以刷新按钮假设通过调用getList()来更新Listbox,但我不知道如何完成它.在java中,您只需要调用该方法并执行repaint().我试过这个.刷新/更新,没用.一个问题是如何更新Listbox?我无法弄清楚如何实现它.
我甚至这样做了吗?应该List.Items.AddRange(getList()); 在progHider_Load方法?另一个问题是,private void progHider_Load(对象发送者,EventArgs e)如何工作?它只用过一次吗?你能打电话吗?另外,Main方法在哪里?我正在使用Visual Studio 2010的Windows应用程序模式,它只显示了部分类的代码.
好吧,我会以完全不同的方式做到这一点,但是为了与你所拥有的一致,将这两个方法更改为我在这里(假设List是ListBox对象的名称):
private void progHider_Load(object sender, EventArgs e)
{
List.DataSource = getList();
}
private void btnrefresh_Click(object sender, EventArgs e)
{
List.DataSource = getList();
}
Run Code Online (Sandbox Code Playgroud)
并回答你的问题.首次加载表单时会调用progHider_Load事件.你不应该明确地调用它(虽然没有什么能阻止你,如果你真的想要).
更新:
我可能会从表单中提取您的进程相关代码并将其放在另一个类中.然后用a创建一个属性BindingList<String>(对于WinForms ...或者如果你使用的是WPF,你可能会使用它ObservableCollection<String>).这是一个示例类:
using System;
using System.ComponentModel;
using System.Diagnostics;
public class ProcessListGenerator
{
public ProcessListGenerator()
{
ProcessList = new BindingList<String>();
}
public BindingList<String> ProcessList
{
get;
private set;
}
public void UpdateProcessList()
{
ProcessList.Clear();
foreach (var proc in Process.GetProcesses()
.Where(p => !String.IsNullOrEmpty(p.MainWindowTitle)))
{
ProcessList.Add(proc.MainWindowTitle);
}
}
Run Code Online (Sandbox Code Playgroud)
在您的progHider表单中,您可以拥有:
public partial class progHider : Form
{
ProcessListGenerator _processes;
public progHider()
{
InitializeComponent();
}
private void progHider_Load(object sender, EventArgs e)
{
_processes = new ProcessListGenerator();
_processes.UpdateProcessList();
listBox1.DataSource = _processes.ProcessList;
}
private void btnRefresh_Click(object sender, EventArgs e)
{
_processes.UpdateProcessList();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
472 次 |
| 最近记录: |