在winforms的MessageBox中居中确定按钮

问题描述:

我正在学习C#,作为它的一部分,我编写了一个小型应用程序,它包含两组按钮,每组按钮各有两个按钮。还添加了关闭应用程序的按钮。一切正常。还有MessageBox,显示应用程序将被关闭。 这里是一个小问题,我错误:该消息框内的确定按钮不是水平居中。我想有一种方法来对齐该按钮,但是让我感到困惑的是为什么它不是默认居中?作为解说这里是截图:在winforms的MessageBox中居中确定按钮

Form with radio buttons

MessageBox with OK button

这里是代码,以及:

using System; 
using System.Drawing; 
using System.Windows.Forms; 

public class myForm : Form 
{ 
    private GroupBox gboxGrp1; 
    private GroupBox gboxGrp2; 

    private RadioButton butn1a; 
    private RadioButton butn1b; 
    private RadioButton butn2a; 
    private RadioButton butn2b; 
    private Button btnClose; 

    public myForm() 
    { 
     InitializeComponent(); 
    } 

    private void InitializeComponent() 
    { 
     this.btnClose = new Button(); 

     this.gboxGrp1 = new GroupBox(); 
     this.gboxGrp2 = new GroupBox(); 

     this.butn1a = new RadioButton(); 
     this.butn1b = new RadioButton(); 
     this.butn2a = new RadioButton(); 
     this.butn2b = new RadioButton(); 

     //myForm 
     this.Text = "My Form"; 
     this.StartPosition = FormStartPosition.CenterScreen; 
     this.Height = 350; 
     this.Width = 200; 

     //btnClose 
     this.Controls.Add(btnClose); 
     this.btnClose.Text = "Close"; 
     this.btnClose.Location = new Point(60, 260); 
     this.btnClose.Click += new EventHandler(btnClose_Click); 

     //gboxgrp1 
     this.gboxGrp1.Location = new Point(20, 20); 
     this.gboxGrp1.Text = "Group Box 1"; 
     this.gboxGrp1.Width = 150; 
     this.gboxGrp1.Height = 100; 

     //gboxgrp2 
     this.gboxGrp2.Text = "Group Box 2"; 
     this.gboxGrp2.Location = new Point(20, 130); 
     this.gboxGrp2.Width = 150; 
     this.gboxGrp2.Height = 100; 

     //Radio buttons 
     this.butn1a.Text = "Radio 1a"; 
     this.butn1a.Location = new Point(30, 30); 
     this.butn1a.Size = new Size(90, 15); 

     this.butn1b.Text = "Radio 1b"; 
     this.butn1b.Location = new Point(30, 60); 
     this.butn1b.Size = new Size(90, 15); 

     this.butn2a.Text = "Radio 2a"; 
     this.butn2a.Location = new Point(30, 30); 
     this.butn2a.Size = new Size(90, 15); 

     this.butn2b.Text = "Radio 2b"; 
     this.butn2b.Location = new Point(30, 70); 
     this.butn2b.Size = new Size(90, 15); 

     //Controls 
     this.Controls.Add(gboxGrp1); 
     this.Controls.Add(gboxGrp2); 

     this.gboxGrp1.Controls.Add(butn1a); 
     this.gboxGrp1.Controls.Add(butn1b); 
     this.gboxGrp2.Controls.Add(butn2a); 
     this.gboxGrp2.Controls.Add(butn2b); 
    } 

    private void btnClose_Click(object sender, EventArgs e) 
    { 
     MessageBox.Show("Closing Application"); 
     Application.Exit(); 
    } 
} 

public class MyApp 
{ 
    public static void Main() 
    { 
     Application.Run(new myForm()); 
    } 
} 
+1

'MessageBox'类在内部调用一些您无法控制的Windows API。我认为没有办法改变这一点。 – 2013-05-02 15:17:27

+1

我想,如果你要在Windows XP中运行你的程序,它将被集中。我认为(可能是错误的),但如果你要改变.Net框架,你的应用程序的目标是旧版本,它将集中。它基本上管理什么微软喜欢的外观 – Sayse 2013-05-02 15:19:05

+1

检查[如何自定义消息框](http://stackoverflow.com/questions/3734796/how-to-customize-message-box) – Damith 2013-05-02 15:23:45

不能restyle默认的MessageBox因为这是完全依赖于Windows操作系统主题。不过,您可以通过创建一个新窗体来创建自己的消息框,然后使用newMessagebox.ShowDialog()来调用它。