C# 显示问题

C# 显示问题,c#,winforms,dialog,messagebox,C#,Winforms,Dialog,Messagebox,我有很多这样的代码,通常都能正常工作 private void button_Click(object sender, EventArgs e) { try { DialogResult result; result = MessageBox.Show( "Questa operazione potrebbe richiedere alcuni minuti,\r\nsei sicuro di voler continuare?", "Attenz

我有很多这样的代码,通常都能正常工作

private void button_Click(object sender, EventArgs e)
{
    try
    {
        DialogResult result;
        result = MessageBox.Show( "Questa operazione potrebbe richiedere alcuni minuti,\r\nsei sicuro di voler continuare?", "Attenzione", MessageBoxButtons.YesNo, MessageBoxIcon.Warning );
        if ( result == System.Windows.Forms.DialogResult.Yes )
        {
            DoSomething();
        }
        else
        {
            DoSomethingElse();
        }
    }
    Catch (Exception ex)
    {
        LogExceptio(ex);
    }
} 
但是由于某些原因,在特定的
Windows窗体上
没有显示
MessageBox
。 如果我按Enter键,它将继续,就像我单击YES一样; 如果我按ALT键,MessageBox会神奇地出现在屏幕上

有什么想法吗?
如何解决此问题?

尝试为消息框指定所有者(据我所知,应该有包含该参数的重载方法)。所有者应该是当前打开的窗口。

我通过设置DataGrid.visible=false来解决此问题

private void button_Click(object sender, EventArgs e)
{
try
{
    DialogResult result;
    DataGrid.visible=false;
    result = MessageBox.Show( "Questa operazione potrebbe richiedere alcuni minuti,\r\nsei sicuro di voler continuare?", "Attenzione", MessageBoxButtons.YesNo, MessageBoxIcon.Warning );
    if ( result == System.Windows.Forms.DialogResult.Yes )
    {
        DoSomething();
    }
    else
    {
        DoSomethingElse();
    }
}
DataGrid.visible=true;
Catch (Exception ex)
{
    LogExceptio(ex);
}
} 

由于在应用程序中使用了一些线程,MessageBox可能会出现在后台。 因此,您还必须在lambda表达式线程中传递MessageBox,如下所述

new Thread(() => 
 {
    MessageBox.Show("Your Text");
 }).Start();

希望它能帮助您……

我已尝试设置所有者,但没有改变,我仍然有相同的问题。无论如何谢谢更新:在
表单中
我有一个
DataGridView
,似乎只有当我有一些彩色行时,
MessageBox
问题才会追加,我在
RowPrePaint
事件中对这些行上色。实际上我已经对
DataRow.Cells[“Cells”]。Value=false在my
DataGridView_RowPrePaint
中,一切都在正常工作。