DataGridView和MessageBox

时间:2014-06-09 20:52:13

标签: c# datagridview messagebox

我在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");

但仍然没有工作:(

3 个答案:

答案 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();        
    }         
}