我正在尝试在C#中更新此列表框。这是我用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();
}因此,刷新按钮应该通过调用getList()来更新列表框,但我不确定如何完成它。在java中,您只需调用该方法并执行repaint()。我尝试了这个.refresh/update,没有用。一个问题是我如何更新列表框?我想不出该怎么做。
我这样做是对的吗?List.Items.AddRange(getList());是否应在progHider_Load方法中?另一个问题是,私有无效发送器(object sender,EventArgs e)是如何工作的?它只使用一次吗?你能打个电话吗?另外,Main方法在哪里?我使用的是Visual Studio2010 windows应用程序模式,它只显示了分部类的代码。
发布于 2012-07-17 09:27:42
好吧,我会采用完全不同的方法,但是为了与您所拥有的保持一致,请将这两个方法更改为我在这里所拥有的方法(假设List是您的ListBox对象的名称):
private void progHider_Load(object sender, EventArgs e)
{
List.DataSource = getList();
}
private void btnrefresh_Click(object sender, EventArgs e)
{
List.DataSource = getList();
}回答你的问题。第一次加载窗体时会调用progHider_Load事件。你不应该显式地调用它(尽管如果你真的想要的话,没有什么可以阻止你)。
更新:
我可能会从表单中取出与流程相关的代码,并将其放入另一个类中。然后创建一个带有BindingList的属性(对于WinForms...或者,如果您使用的是WPF,您可能会使用ObservableCollection)。下面是一个示例类:
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);
}
}在您的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();
}
}发布于 2012-07-17 09:22:45
即使你需要调用List.Items.AddRange(getList()),它也会在你点击按钮时显示出来;
出于示例的目的,您可以调用progHider_Load..但在我的opnion调用中,事件处理程序是脏池
https://stackoverflow.com/questions/11514604
复制相似问题