首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >列表框更新#2

列表框更新#2
EN

Stack Overflow用户
提问于 2012-07-17 08:43:45
回答 2查看 490关注 0票数 2

我正在尝试在C#中更新此列表框。这是我用C#编写的第一个程序,我不太确定它是如何工作的。

代码语言:javascript
复制
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应用程序模式,它只显示了分部类的代码。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-17 09:27:42

好吧,我会采用完全不同的方法,但是为了与您所拥有的保持一致,请将这两个方法更改为我在这里所拥有的方法(假设List是您的ListBox对象的名称):

代码语言:javascript
复制
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)。下面是一个示例类:

代码语言:javascript
复制
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表单中,您可以获得以下内容:

代码语言:javascript
复制
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();
    }
}
票数 5
EN

Stack Overflow用户

发布于 2012-07-17 09:22:45

即使你需要调用List.Items.AddRange(getList()),它也会在你点击按钮时显示出来;

出于示例的目的,您可以调用progHider_Load..但在我的opnion调用中,事件处理程序是脏池

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11514604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档