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和control signature列的选定行是否为null。如果它有签名日期我想隐藏或取消隐藏“签名”,如果它没有签名日期隐藏上下文菜单条上的“取消签名”项目。
你可以看到我附上的图片。Context menu Strip
编辑:事件的名称是MouseDown。 编辑2:通过编辑此代码,我可以获取列数据并在messageBox上显示它们。但我不能将这些数据用作条件。因此它不起作用。例如,当我选择没有“签名日期”的行并在messageBox上显示它时,它正在工作。但是当我使用签名日期数据作为条件它不起作用。我知道它太奇怪了,太容易克服,但我不能因为我没有抓到任何东西。
编辑3:Event
编辑4(求助):我创建了Context Strip菜单并指定其中没有一个 作为Datagridview的上下文条带菜单。
使用Datagridview_MouseDown事件,我获取签名日期列数据并检查它是否为空/空。如果它为null / empty,我将第一个Context Menu条指定为Datagridview的Context Strip菜单,或者不指定我修改。我用这种方式找出了解决方案:)
答案 0 :(得分:2)
我认为您的问题是在上下文菜单条的实例中使用此问题,看看它是否有帮助。
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;
}
}
答案 1 :(得分:0)
可能你的活动没有解雇。 您也可以使用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;
}
}