Class MainForm:Form {
Public CheckValidation()
{
var controller = new FormController();
controller.checkValidation();
}
}
class FormController {
public checkValidation ()
{
MessageBox.Show('test_a',MessageBoxButtons.OK, MessageBoxDefaultButton.Button1, MessageBoxOptions.ServiceNotification);
MessageBox.Show('test_b',MessageBoxButtons.OK, MessageBoxDefaultButton.Button1, MessageBoxOptions.ServiceNotification);
}
}
问题是在第一个消息框弹出框关闭后,焦点会丢失到windows等窗口上的其他应用程序。
期望是焦点被发送到弹出的第二个消息框,该消息框排队等待下一个执行。因此,我不必手动点击第二个弹出框以激活它以关闭它。在第二个弹出框关闭后,焦点返回到主窗体。
答案 0 :(得分:0)
我能够像这样解决这个问题
namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public void CheckValidation()
{
var controller = new FormController(this);
controller.checkValidation();
}
class FormController
{
Form1 form;
public FormController(Form1 form)
{
this.form = form;
}
public void checkValidation()
{
MessageBox.Show("test_a", "test_a", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.ServiceNotification);
this.form.Activate();
MessageBox.Show("test_b", "test_b", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.ServiceNotification);
this.form.Activate();
}
}
private void button1_Click(object sender, EventArgs e)
{
CheckValidation();
}
}
}
看看是否有帮助
答案 1 :(得分:0)
<强>解决方案:强>
删除'MessageBoxOptions.ServiceNotification'
参数已有效。
替代解决方案1:
如果我们希望明确指定消息框应始终位于前面和最上面的窗口中,我们可以指定参数((0x40000),它是MB_TOPMOST选项的标志。
MessageBox.Show('test_a', MessageBoxButtons.OK, MessageBoxDefaultButton.Button1, (MessageBoxOptions)0x40000); //Message Box Top Most (MB_TOPMOST) = 0x40000
替代解决方案2: 另一种明确指定消息框应始终位于前面和最顶层窗口的方法,我们可以创建一个新的表单对象并将'TopMost'布尔选项设置为'True'。
MessageBox.Show(new Form() { TopMost = true }, 'test_b', MessageBoxButtons.OK, MessageBoxDefaultButton.Button1);