我在DGV中遇到MessageBox问题。因此,当我单击单元格打开上下文菜单时,接下来我单击此菜单并应显示MessageBox,但不显示。为什么呢?
这是我的代码:
private void DGV1_CellClick(object sender, DataGridViewCellEventArgs e)
{
ContextMenuStrip1.Show(Cursor.Position);
}
private void optionToolStripMenuItem_Click(object sender, EventArgs e)
{
DialogResult res = MessageBox.Show("Are You Sure?",
"Are You Sure", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (res == DialogResult.Yes)
{
......
}
}
此MessageBox未显示,但在应用程序中无法执行任何操作,就像MessageBox被隐藏一样。 我试过这个:
MessageBox.Show(new Form { TopMost = true }, "Message");
但仍然没有工作:(
答案 0 :(得分:0)
尝试以下内容 这样可能会在您的上下文代码和/或DGV事件中出现问题,您可以提供更多代码吗?
DialogResult dialogResult = MessageBox.Show("Are You Sure?", "Are You Sure", MessageBoxButtons.YesNo);
if(dialogResult == DialogResult.Yes)
{
//do something
}
else if (dialogResult == DialogResult.No)
{
//do something else
}
答案 1 :(得分:0)
感谢您的回复!
刚才我尝试这个:(DGV1.Visible = false)
private void optionToolStripMenuItem_Click(object sender, EventArgs e)
{
DGV1.Visible = false
DialogResult res = MessageBox.Show("Are You Sure?", "Are You Sure", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (res == DialogResult.Yes)
{
......
}
}
它的确有效。为什么MessageBox没有显示在顶部,但在DGV下?除了我的dgv中的数据,我使用了更多的绘画。这是通过这个吗?奇怪,因为在它工作之前。
答案 2 :(得分:0)
这是令人沮丧的问题。我有同样的问题,谷歌没有太多的帮助。最后我发现如果你已经实现了DataGridView的CellFormatting事件(以及可能覆盖显示逻辑的其他事件),那么在重绘窗口之前,MessageBoxes将不会显示在DataGridView上。要解决此问题,有几个选项,这里有两个。
1)奶酪方法(隐藏并显示网格)
MyGrid.Visible = false;
MessageBox.Show("my message text");
MyGrid.Visible = true;
2)更好的方法(在Message之前分离事件,然后重新连接)
MyGrid.CellFormatting -= MyGrid_CellFormatting;
MessageBox.Show("my message text");
MyGrid.CellFormatting += MyGrid_CellFormatting;
3)并将其作为帮助包装在您的表格上
private DialogResult ShowMessageBox(string p_text, string p_caption, MessageBoxButtons p_buttons, MessageBoxIcon p_icon) {
bool detached = false;
try {
// detach events
MyGrid.CellFormatting -= MyGrid_CellFormatting;
detached = true;
// show the message box
return MessageBox.Show(p_text, p_caption, p_buttons, p_icon);
}
catch(Exception ex) {
throw ex;
}
finally {
if(detached) {
// reattach
MyGrid.CellFormatting += MyGrid_CellFormatting;
}
MyGrid.Invalidate();
}
}