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 和控件签名列的选定行是否为空。如果它有签名日期,我想隐藏或取消隐藏“签名”,如果它没有签名日期,则隐藏上下文菜单条上的“取消签名”项。
编辑:事件的名称是 MouseDown。 编辑2:通过编辑此代码,我可以获取列数据并将其显示在消息框上。但我不能用那些数据作为条件。因此它不起作用。例如,当我选择没有“签名日期”的行并将其显示在消息框上时,它正在工作。但是当我使用签名日期数据作为条件时它不起作用。我知道这很奇怪,而且太容易克服,但我不能因此而没有抓住任何东西。
编辑4(已解决):我创建了上下文条菜单并没有指定其中任何一个 作为 Datagridview 的上下文条菜单。
通过 Datagridview_MouseDown 事件,我正在获取签名日期列数据并检查它是否为空/空。如果它为空/空,我将第一个上下文菜单条指定为 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;
}
}
要将
ToolStripMenuItem
隐藏在 ContextMenuStrip
中,请将其 Available
属性设置为 false
(而不是其 Visible
属性)。