32

我的表单上有一个 listView。我想在程序运行期间添加一些东西。

这是我使用的代码

public void FillList(string[] Name,int[] empty,int[] Population,int[] Max,int[] Check,int size)
{
    if (this.InvokeRequired)
    {
        this.Invoke((MethodInvoker)delegate
        {
            for (int i = 0; i < size; i++)
            {
                ListViewItem item = new ListViewItem(Name[i]);

                item.SubItems.Add(empty[i].ToString); //error
                item.SubItems.Add(Population[i].ToString); //error
                item.SubItems.Add(Max[i].ToString);   //error

                if (Check != 1)
                    item.SubItems.Add("No");
                else
                    item.SubItems.Add("Yes");
                listView1.Items.Add(item);
            }
        });
    }
}

参数必须是字符串,我试过了.ToString,但我明白了:

参数“1”:无法从“方法组”转换为“字符串”

4

3 回答 3

101

您缺少方法调用的括号:

ToString()

如果没有括号,则表达式是一个方法组 ——即对一个或多个重载方法的引用。

于 2009-04-08T11:56:03.933 回答
8

你忘了括号。

它应该是.ToString()

于 2009-04-08T11:56:34.197 回答
1

约翰这是题外话,但您是否考虑过使用此方法传入一个由要添加的每个子项组成的类。所以:

class ListItem 
{
 public string Name {get; set;}
 public int Empty {get; set;}
 public int Population {get; set;}
 public int Max {get; set;}
 public bool Checked {get; set;}
} 

这样,您需要将传入的数组中的每个项目排成一行。尝试在许多数组中排列项目通常会使界面难以使用。你的方法看起来像

FillList(IList<ListItem> listItems)
{
if (this.InvokeRequired)
    {
        this.Invoke((MethodInvoker)delegate
        {
            foreach (ListItem listItem in listItems)
            {
                ListViewItem item = new ListViewItem(listItem .Name);

                item.SubItems.Add(listItem.Empty.ToString());
                item.SubItems.Add(listItem.Population.ToString());
                item.SubItems.Add(listItem.Max.ToString());

                item.SubItems.Add(listItem.Checked ? "No" : "Yes");

                listView1.Items.Add(item);
            }
        }
    }
}

我刚刚直接写了这段代码,所以可能需要一些代码清理

于 2009-04-20T07:06:43.530 回答