繁体   English   中英

隐藏和取消隐藏上下文条菜单项c#

[英]hide and unhide context strip menu item c#

        if(e.Button == MouseButtons.Right)
        {
            string signatureDate = dataGridView3.CurrentRow.Cells[8].Value.ToString();
            // MessageBox.Show(signatureDate);
            if(signatureDate.Length > 5)
            {
                contextMenuStrip1.Items[0].Visible = false;
                contextMenuStrip1.Items[1].Visible = true;
            }else
            {
                contextMenuStrip1.Items[0].Visible = true;
                contextMenuStrip1.Items[1].Visible = false;
            }
        }

我的datagridview中有一个上下文条菜单。 我选择它作为“行上下文条菜单”。

我想做的是获取datagridview和控件签名列的选定行是否为null。 如果它具有签名日期,我想隐藏或取消隐藏“签名”,如果它没有签名日期,则在上下文菜单栏上隐藏“取消签名”项。

您可以在附上的图片中看到。 上下文菜单条

编辑:事件的名称是MouseDown。 编辑2:通过编辑此代码,我可以获取列数据并将其显示在messageBox上。 但是我不能使用这些数据作为条件。 因此,它不起作用。 例如,当我选择不包含“签名日期”的行并将其显示在messageBox上时,它就可以正常工作。 但是,当我使用签名日期数据作为条件时,它不起作用。 我知道这太奇怪了并且太容易克服了,但是我不知道为什么我什么也没抓住。

编辑3: 事件

编辑4(已解决):我创建了“上下文条菜单”,并且没有指定任何一个作为Datagridview的“上下文条菜单”。

通过Datagridview_MouseDown事件,我正在获取“签名日期”列数据,并检查其是否为null / empty。 如果它为null / empty,则将第一个“上下文菜单”条指定为Datagridview的“上下文条菜单”,否则不进行修改。 我以这种方式想出了解决方案:)

我认为您的问题是在上下文菜单条的情况下使用此菜单项看看是否有帮助。

if(e.Button == MouseButtons.Right)
        {
            string signatureDate = dataGridView3.CurrentRow.Cells[8].Value.ToString();
            // MessageBox.Show(signatureDate);
            if(signatureDate.Length > 5)
            {
                dataGridView3.ContextMenu.Items[0].Visible = false;
                dataGridView3.ContextMenu.Items[1].Visible = true;
            }else
            {
                dataGridView3.ContextMenu.Items[0].Visible = true;
                dataGridView3.ContextMenu.Items[1].Visible = false;
            }
        }

您的活动可能没有触发。 除了使用鼠标按下,您还可以使用contextMenuStrip的Opening事件

这应该可以解决您的问题

private void Form1_Load(object sender, EventArgs e)
        {
            dataGridView3.ContextMenu = contextMenuStrip1;
            contextMenuStrip1.Opening += contextMenuStrip1_Opening;
        }


private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
        {
            string signatureDate = dataGridView3.CurrentRow.Cells[8].Value.ToString();
            // MessageBox.Show(signatureDate);
            if (signatureDate.Length > 5)
            {
                contextMenuStrip1.Items[0].Visible = false;
                contextMenuStrip1.Items[1].Visible = true;
            }
            else
            {
                contextMenuStrip1.Items[0].Visible = true;
                contextMenuStrip1.Items[1].Visible = false;
            }
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM