gpt4 book ai didi

c# - 列表框更新#2

转载 作者:行者123 更新时间:2023-12-02 22:35:30 25 4
gpt4 key购买 nike

我正在尝试用 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()。我试过 this.refresh/update,没用。一个问题是如何更新列表框?我不知道如何完成它。

我这样做对吗?应该 List.Items.AddRange(getList());在 progHider_Load 方法中?另一个问题是,private void progHider_Load(object sender, 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();
}

然后回答你的问题。 progHider_Load 事件在表单首次加载时被调用。你不应该明确地调用它(尽管如果你真的想要,没有什么能阻止你)。


更新:

我可能会将您的流程相关代码从表单中提取出来,并将其放在另一个类中。然后用 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);
}
}

在您的 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();
}
}

关于c# - 列表框更新#2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11514604/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com