如何检测用户在 ListBox winforms 中单击了哪个项目

How to detect which item the user clicked in a ListBox win forms

我正在努力做的是

  1. 找出 SelectedItems[]
  2. 的通配符

我想要一个基于 SelectedItem 的 var uploadDir。 我目前的处理方式我觉得只是重复的代码,可能是更好的处理方式。

Listbox1

它也不会让我将 x 设置为 null 并在 SelectedItems[x]

中使用它

当前调试代码

        private void button1_Click(object sender, EventArgs e)
        {
            if (ReportPeriod == "Daily Call Data")
            {
                MessageBox.Show(ReportPeriod);
            }else if(ReportPeriod == "Weekly Call Data")
            {
                MessageBox.Show(ReportPeriod);
            }
        }
        public string ReportPeriod;
        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            int x;
              ReportPeriod = listBox1.SelectedItems[x].ToString();
         }

非常感谢任何建议。

我正在开发一个工作小程序,通过 excel 模板和 VLOOKUPS 更新我们的 KPI 仪表板。

所以我有一个用户界面,允许经理select他们将从列表框加载的数据类型

例如:每日通话数据、每日CSAT数据、每周通话数据等。

然后他们浏览下载的 csv 文件并按更新 csv 被移动并重命名,旧文件重命名为前一天、前一个月、前一年等。

快速伪代码

int x;
ReportPeriod = listBox1.SelectedItems[x].ToString();

if(ReportPeriod == "Daily Call Data"){
  try{
       string UploadDir = "C:\folder\daily\filename.xls";
       more code...
 }catch(Exception){
    More code...
 }
}
Else If (ReportPeriod == "Weekly Call Data"{
 try{
       string uploadDir = "C:\folder\weekly\filename.xls";
     }
}

我需要做的是检测哪个项目被 selected 并将其分配给 ReportPeriod 并从那里创建 IF 和 ELSE IF 语句,或者我是否可以分配一个值到列表框项目(例如静态目录路径)。

我只是不知道如何从用户鼠标点击中获取 selected 项目。

您并不是通过鼠标点击本身抓取所选项目;列表框会告诉您选择了哪些项目与相关 属性:

如果您只希望用户从列表中选择一项,请将 SelectionMode 设置为 One,然后访问 SelectedItem 属性

如果您希望用户选择多个报告并 运行 将它们全部保存到一个通用的 csv 中,请将选择模式设置为允许多个的模式,然后循环遍历 SelectedItems 集合 运行为每一个报告

我假设您使用字符串(文本)加载了列表项集合。重要的是要注意,您会将它们作为对象取回,因此在与字符串比较以找出所选择的内容之前,您可能需要强制转换或 .ToString()

至于什么时候是在代码中获取值的好时机,你的按钮点击适合我:

    private void button1_Click(object sender, EventArgs e)
    {
        var rp= listbox1.SelectedItem.ToString();
        if (rp == "Daily Call Data")
        {
            MessageBox.Show("day");
        }else if(rp == "Weekly Call Data")
        {
            MessageBox.Show("week");
        }
    }