【问题标题】:c# set condition on contextmenustripc# 在 contextmenustrip 上设置条件
【发布时间】:2013-06-27 11:03:03
【问题描述】:

是否有设置条件,例如:

当我打开一个文件时,它会在 ListView 上加载一些信息,第五个子项(索引计数应该是 4)正在加载文本,如果它是“ETDF”,则在上下文菜单中启用一个项目,如果不是,禁用它,我在 contextmenustrip 中尝试了这个,但它只是给了我一个例外:

if (listView1.SelectedItems[4].ToString() != "ETDF")
        {
            editToolStripMenuItem.Enabled = false;
        }
        else if (listView1.SelectedItems[4].ToString() == "ETDF")
        {
            editToolStripMenuItem.Enabled = true;
        }

我做错了吗?

【问题讨论】:

    标签: c# winforms listview conditional-statements contextmenustrip


    【解决方案1】:

    Opening 事件中设置Enabled 属性。

    private void MyContextMenuStrip_Opening(object sender, CancelEventArgs e)
    {
        editToolStripMenuItem.Enabled = (listView1.SelectedItems[4].ToString() == "ETDF");
    }
    

    【讨论】:

    • 还是一样的异常(ArgumentOutOfRangeException),我之前也这样做过。
    • listView1.SelectedItems 实际上有 5 个值吗? ArgumentOutOfRangeException 似乎您的问题在于访问 SelectedItems 中不存在的索引。
    • 这取决于,我的意思是子项,但我无法用我的代码访问它:/
    • 我的意思是,listView1.SelectedItems[4].ToString() 行似乎引发了异常,因为您正在尝试访问第 4 个索引,但可能没有 5 个项目。在您的代码中,哪一行实际引发了异常?
    • @Omarrrio 我想你想谈谈 4 作为子项的索引。你可能想试试if(listView1.SelectedItems.Count == 1) editToolStripMenuItem.Enabled = listView1.SelectedItems[0].SubItems[4].ToString() == "ETDF");"
    【解决方案2】:

    您是否收到 ArgumentOutOfRangeException。如果有,请检查计数。

            if (listView1.Items.Count >= 5)
            {
                if (listView1.SelectedItems[4].ToString() != "ETDF")
                {
                    editToolStripMenuItem.Enabled = false;
                }
                else if (listView1.SelectedItems[4].ToString() == "ETDF")
                {
                    editToolStripMenuItem.Enabled = true;
                }
            }
    

    【讨论】:

    • 谢谢,您的解决方案只是修复了异常,但不能真正将其作为答案,抱歉。
    【解决方案3】:
    if (listView1.SelectedItems[4].Text != "ETDF")
            {
                editToolStripMenuItem.Enabled = false;
            }
            else if (listView1.SelectedItems[4].Text == "ETDF")
            {
                editToolStripMenuItem.Enabled = true;
            }
    

    这应该可以解决你的问题,错误是在应该是文本时调用 tostring()

    【讨论】:

    • 它实际上帮助我找到了真正的答案,谢谢,我自己无法发布答案,King 之前找到了它,这里是:(king 发布它以便我可以标记为答案)@987654322 @
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-20
    • 1970-01-01
    • 2019-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多