C# 如何检测用户在列表框中单击的项目

C# 如何检测用户在列表框中单击的项目,c#,winforms,.net-4.0,C#,Winforms,.net 4.0,我正在努力做的是 找出SelectedItems的通配符[] 我希望var uploadDir基于SelectedItem。 我觉得目前的做法只是重复代码,可能是更好的做法 它也不允许我将x设置为null,并在SelectedItems[x]中使用它 当前调试代码 非常感谢您的任何建议 我正在使用一个小的工作程序,通过excel模板和VLOOKUPS更新我们的KPI仪表盘 因此,我拥有的是一个用户界面,允许管理员选择从列表框加载的数据类型 例如:每日通话数据、每日CSAT数据、每周通话数据等 然

我正在努力做的是

找出SelectedItems的通配符[] 我希望var uploadDir基于SelectedItem。 我觉得目前的做法只是重复代码,可能是更好的做法

它也不允许我将x设置为null,并在SelectedItems[x]中使用它

当前调试代码 非常感谢您的任何建议

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

因此,我拥有的是一个用户界面,允许管理员选择从列表框加载的数据类型

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

然后浏览下载的csv文件并按update 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";
     }
}
我需要做的是检测选择了哪个项目并将其分配给ReportPeriod,然后从那里创建IF和ELSE IF语句,或者我是否可以为Listbox项目分配一个值,例如静态dir路径


我只是不知道如何从用户的鼠标点击中抓取所选项目。

您不能从鼠标点击本身抓取所选项目;列表框将告诉您使用相关属性选择了哪些项目:

如果您只希望用户从列表中选择一项,请将SelectionMode设置为一,然后访问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");
        }
    }

不能使用未初始化的变量x。在尝试使用它做任何事情之前,应该为它赋值。在您的情况下,我认为您需要阅读SelectedIndexproperty@steve将x设置为SelectedIndex的值几乎肯定会导致IndexOutOfBoundsException。这个代码太复杂了。不钩住index changed事件,然后保留一个与所选索引的文本相关的变量,以便通过单击按钮检查变量。我们只需在想知道选择了哪个项目时询问列表框,SelectedItem可能正在检查是否有SelectedItem是个好主意?好的,我会尝试一下。我对c比较陌生,熟悉PHP,所以我感谢所有的帮助。现在将SelectionMode设置为1,这样可以将数组变量保持在SelectedItems[0]并且可以使用.ToString,只为不同的字符串值创建IF循环,还是会重复?@TaW可能,但是您在哪里停止-实现整个应用程序?关于NullRef的很多建议是如此..@Joe不确定您为什么关注SelectedItems复数-如果您的列表框是单选的,那么您可以使用SelectedItem单数属性,尽管SelectedItems[0]也可以工作我在发布评论之前没有看到您的更新。太好了,谢谢!这么简单的事情我完全想过头了。
    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");
        }
    }