Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ListView.FindItemWithText在第一行ListView之后循环失败_C#_Listview_Visual Studio 2013 - Fatal编程技术网

C# ListView.FindItemWithText在第一行ListView之后循环失败

C# ListView.FindItemWithText在第一行ListView之后循环失败,c#,listview,visual-studio-2013,C#,Listview,Visual Studio 2013,我想更改列表视图每行第2列的内容,并根据找到的不同数据进行更改 我的问题是,第2行的from将覆盖前面的列,例如,当我想更改内容时,搜索保留在第1行的文本效果良好,请参见: 当我要更改内容搜索第二行的文本时,会发生以下情况: 代码如下: public void fillData(string search, string data, ListView haystack) { if (haystack.Items.Count > 0) { int idx

我想更改
列表视图
每行第2列的内容,并根据找到的不同数据进行更改

我的问题是,第2行的from将覆盖前面的列,例如,当我想更改内容时,搜索保留在第1行的文本效果良好,请参见:

当我要更改内容搜索第二行的文本时,会发生以下情况:

代码如下:

public void fillData(string search, string data, ListView haystack)
{
    if (haystack.Items.Count > 0)
    {
        int idx = 0;
        ListViewItem found;

        while (idx < haystack.Items.Count)
        {

            found = haystack.FindItemWithText(search, true, idx);

            if (found != null)
            {
                haystack.Items[idx].SubItems[1].Text = data.ToString();
            }

            idx++;
        }
    }
}

private void button3_Click(object sender, EventArgs e)
{
    int i = 0;

    while (i < 3)
    {

        ListViewItem item = new ListViewItem();
        item.Text = i.ToString();
        item.SubItems.Add("192.168.0." + i.ToString());

        listView1.Items.Add(item);

        i++;
    }
}

private void button1_Click(object sender, EventArgs e)
{
    fillData("192.168.0.0", "AAA", listView1);
}

private void button2_Click(object sender, EventArgs e)
{
    fillData("192.168.0.1", "BBB", listView1);
}
public void fillData(字符串搜索、字符串数据、ListView haystack)
{
如果(haystack.Items.Count>0)
{
int-idx=0;
找到ListViewItem;
while(idx
这是因为用于
FindItemWithText
的重载函数一直在搜索传入索引中的所有项目

当循环的idx=0时,
FindItemWithText
将尝试搜索所有三项0,1,2

当循环的idx=1时,
FindItemWithText
将尝试搜索两个项目1,2

当循环的idx=2时,
FindItemWithText
将尝试只搜索一个项目2

现在在第一种情况下,当您搜索第一项时,您的循环只找到了一次。但在第二种情况下,您正在搜索第二项,它被两次(idx=0---0,1,2)和(idx=1---1,2)迭代找到。因此,您正在更新idx=0和idx=1的两个值

这里是文档链接

任何方式
FindItemWithText
返回
System.Windows.Forms.ListViewItem
。从零开始搜索一次。使用该项目进行更新。

谢谢。这起作用了!=>“
任何FindItemWithText如何返回System.Windows.Forms.ListViewItem。只需从零开始搜索一次。使用该项进行更新。