C# 始终在顶部表单上,但需要消息框和组合框

C# 始终在顶部表单上,但需要消息框和组合框,c#,combobox,modal-dialog,messagebox,C#,Combobox,Modal Dialog,Messagebox,我有一个表单设置为“始终打开”。我通过下面代码中显示的计时器强制每500毫秒执行一次。 计时器正在从子线程启动 表单有时必须引发错误,但这不是模态,用户最终不得不单击两次-一次使其成为模态,一次确认它(如果他们做得足够快) 用户也可以在主窗体中打开面板中的组合框,但当选择此选项时,由于计时器使窗体处于模态状态,下拉列表再次变得清晰(与用户刚从组合框中单击时的效果相同) 如何修复Messagebox,使其处于模态状态? 如何修复组合框,使其在不清除的情况下继续列出其中的项目 谢谢 达莫 使窗体始终

我有一个表单设置为“始终打开”。我通过下面代码中显示的计时器强制每500毫秒执行一次。 计时器正在从子线程启动

表单有时必须引发错误,但这不是模态,用户最终不得不单击两次-一次使其成为模态,一次确认它(如果他们做得足够快)

用户也可以在主窗体中打开面板中的组合框,但当选择此选项时,由于计时器使窗体处于模态状态,下拉列表再次变得清晰(与用户刚从组合框中单击时的效果相同)

如何修复Messagebox,使其处于模态状态? 如何修复组合框,使其在不清除的情况下继续列出其中的项目 谢谢 达莫

使窗体始终位于顶部的计时器

// Restore the form.
this.Visible = true;
this.TopMost = true;
this.WindowState = FormWindowState.Maximized;
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable;
this.Show();
消息框

MessageBox.Show(this,"hello world", "myApplication");

只需在显示messagebox之前禁用计时器,并在显示messagebox之后重新启用:

timer1.Enabled = false;
MessageBox.Show(this,"hello world", "myApplication");
timer1.Enabled = true;
这当然可以包含在方法中,因此您不必重复代码:

public void ShowMessage(string title, string message)
{
   timer1.Enabled = false;
   MessageBox.Show(this,message, title);
   timer1.Enabled = true;
}

由于
MessageBox.Show
是一个阻塞命令,计时器只有在MessageBox关闭后才会重新启用

只需在显示MessageBox之前禁用计时器,然后在显示MessageBox之后重新启用:

timer1.Enabled = false;
MessageBox.Show(this,"hello world", "myApplication");
timer1.Enabled = true;
这当然可以包含在方法中,因此您不必重复代码:

public void ShowMessage(string title, string message)
{
   timer1.Enabled = false;
   MessageBox.Show(this,message, title);
   timer1.Enabled = true;
}

由于
MessageBox.Show
是一个阻塞命令,计时器只有在MessageBox关闭后才会重新启用

计时器是否唯一用于将窗体设置回顶部?是-它唯一的任务是使窗体始终位于顶部是唯一用于将窗体设置回顶部的计时器?是-它唯一的任务是使窗体始终位于顶部我听到了您关于阻塞命令的说法,但它没有有影响该消息框上的焦点丢失,就好像计时器一直在运行一样。我最初启用计时器是从一个单独的线程调用的,这可能会解释这个问题。让我们从您在初始问题中发布更多代码开始。具体来说,计时器的确切声明以及如何启用它……我听到了您对阻塞命令的看法,但这没有什么区别。该消息框上的焦点丢失,就好像计时器一直在运行一样。我最初启用计时器是从一个单独的线程调用的,这可能会解释这个问题。让我们从您在初始问题中发布更多代码开始。具体来说,计时器的确切声明以及如何启用它。。。