c# - 如何以编程方式选择 ListView 项目?

标签 c# winforms listview selecteditem

从今天早上开始,我一直在寻找解决方案,即使在阅读了大量有关此主题的其他线程之后,它对我来说也不起作用。话不多说,让我们检查一下这个代码示例:

// Create Dictionary, Keys = Ids, Values = Names

Dictionary<int, string> ff_names = new Dictionary<int, string>();
ff_names.Add(0, "Cloud");
ff_names.Add(1, "Barret");
ff_names.Add(2, "Tifa");
ff_names.Add(3, "Aerith");
ff_names.Add(4, "Red XIII");

// Populating ListView

foreach( KeyValuePair<int, string> dict in ff_names )
{
    ListViewItem lvi = new ListViewItem(dict.Key.ToString());
    lvi.SubItems.Add(dict.Value);

    listView1.Items.Add(lvi);
}

// Test Item Selection

listView1.Focus();
listView1.Select();
listView1.Items[0].Focused = true;
listView1.Items[0].Selected = true;

string s = listView1.SelectedItems.Count.ToString();

label1.text = s; // sadly, it's equal to 0;
textBox1.Text = listView1.SelectedItems[0].SubItems[0].Text; // program will crash

从技术上讲,我想选择 ListView 的一项并在文本框中显示其元素之一。当我手动选择一个项目时它有效,但是当我尝试以编程方式选择(如上所示)时它不想选择任何内容,SelectedItems 计数等于零...

感谢您的帮助,希望有人能找到我所缺少的解决方案!

最佳答案

给你。您必须为 listView1_SelectedIndexChanged 创建事件处理程序。

    public Form1() {
        InitializeComponent();
        listView1.View = View.Details;
        listView1.Columns.Add("Key");
        listView1.Columns.Add("Value");
        LoadListView();
    }

    private void LoadListView() {
        // Create Dictionary, Keys = Ids, Values = Names

        Dictionary<int, string> ff_names = new Dictionary<int, string>();
        ff_names.Add(0, "Cloud");
        ff_names.Add(1, "Barret");
        ff_names.Add(2, "Tifa");
        ff_names.Add(3, "Aerith");
        ff_names.Add(4, "Red XIII");

        // Populating ListView

        foreach (KeyValuePair<int, string> dict in ff_names) {
            ListViewItem lvi = new ListViewItem(new string[] { dict.Key.ToString(), dict.Value });
            listView1.Items.Add(lvi);
        }

        // Test Item Selection

        listView1.Focus();
        listView1.Select();
        listView1.Items[0].Focused = true;
        listView1.Items[0].Selected = true;

    }

    private void listView1_SelectedIndexChanged(object sender, EventArgs e) {
        if (listView1.SelectedItems.Count > 0) {
            label1.Text = (string)listView1.SelectedItems[0].Text; // sadly, it's equal to 0;
            textBox1.Text = (string)listView1.SelectedItems[0].SubItems[1].Text;
        }
    }

关于c# - 如何以编程方式选择 ListView 项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20447596/

相关文章:

c# - 在 ASP.NET Core Identity 中删除登录用户的策略

c# - .NET 应用程序是否有最大程序集数?

c# - 空引用异常 C#

android - 返回 fragment 后 ListView 为空

Android:onItemClick 仅返回第一个选定的项目

java - 我可以在android ListView中调用多个适配器类吗?

c# - ServiceStack 'Access is denied' 又来了,还有其他问题

c# - 我应该为域和 EF 使用单独的模型吗?

c# - XNA Waterphysicals 自上而下的基于六角形的网格

c# - 如何安全访问对象的属性