【问题标题】:How to center a form using showdialog (.NET Compact Framework)如何使用 showdialog (.NET Compact Framework) 使表单居中
【发布时间】:2010-01-16 07:48:36
【问题描述】:

我想在 .NET Compact Framework 中将使用 Form.ShowDialog() 启动的弹出表单居中。我在 .NET CF Form 对象中看不到任何像 StartPosition 这样的属性。

有人可以建议我如何在 .NET CF 3.5 中居中弹出窗口吗?

【问题讨论】:

标签: c# .net compact-framework


【解决方案1】:

您可以创建一个为您工作的扩展方法:

public static class FormExtensions
{
    public static void CenterForm(this Form theForm)
    {
        theForm.Location = new Point(
            Screen.PrimaryScreen.WorkingArea.Width / 2 - theForm.Width / 2,
            Screen.PrimaryScreen.WorkingArea.Height / 2 - theForm.Height / 2);
    }
}

你这样称呼它:

TheDialogForm f = new TheDialogForm();
f.CenterForm();            
f.ShowDialog();

【讨论】:

  • 这不起作用!我仍然看到表单被随机放置在屏幕上。
  • @Gopinath:这很奇怪;我在发布之前尝试了代码。是否还有其他代码设置表单的LocationBounds 属性?
  • 感谢弗雷德里克。在设备上进行测试时,弹出窗口按预期居中。但是当应用程序在 PC 上运行时,它没有正确居中。非常感谢您的帮助。
【解决方案2】:

如果没有为对话框定义父级,则使用

login.StartPosition = FormStartPosition.CenterScreen;
login.ShowDialog(); 

其中 login 是 Form 对象

或者,如果您在现有父 Form 之上调用,您也可以使用

login.StartPosition = FormStartPosition.CenterParent;
login.ShowDialog();

这个属性也可以在Form的属性对话框中设置,如果你认为这个属性对你来说总是一样的。默认情况下,它应该设置为 CenterParent,如果您在某些情况下在父 Form 之前调用您的 Form,这将不起作用,例如第一次登录屏幕等。

【讨论】:

    【解决方案3】:

    如果您希望弹出表单默认显示在屏幕中心,您可以在表单属性中为其设置起始位置,它应该听起来像“中心父级”。

    类似这样的:

    form1.StartPosition = FormStartPosition.CenterScreen;
    

    【讨论】:

    • 如问题中所述,StartPosition 属性在 .NET Compact Framework 中不可用。
    • 该死的!我不会回答我很久以前用过的东西..真的:)
    【解决方案4】:

    我知道这是旧帖子,但我遇到了同样的问题,我用这种方式解决了:

    我创建一个接口:

    public interface FormExtensions
        {
            void CenterForm(Form forma);
        }
    

    在我的类上实现了接口之后:

        public partial class frmFirma : Form, FormExtensions
        {
            public frmFirma()
            {
                InitializeComponent();
            }
            public void CenterForm(Form forma)
            {
                forma.Location = new Point(
                Screen.PrimaryScreen.WorkingArea.Width / 2 - forma.Width / 2,
                Screen.PrimaryScreen.WorkingArea.Height / 2 - forma.Height / 2);
            }
        }
    

    然后我可以创建一个实例:“frmFirma”并调用方法“CenterForm”:

    private void pictureBox1_DoubleClick(object sender, EventArgs e)
            {
                Formas.frmFirma firma = new Formas.frmFirma();
                firma.CenterForm(firma);
                firma.ShowDialog();     
            }
    

    我希望这对某人有用。

    【讨论】:

      【解决方案5】:

      在'frmDialog_Activated事件中设置表单的left和Top属性

      Private Sub frmDialog_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Activated
              Me.Left = (frmMain.Width - Me.Width) / 2 ' AS Your Wish
              Me.Top = (frmMain.Height - Me.Height) / 2 + 165 '' AS Your Wish
          End Sub
      

      【讨论】:

        【解决方案6】:

        这是最简单的方法

        Form f= new AmrDealForm();
        f.CenterToScreen();
        f.ShowDialog();
        

        【讨论】:

          猜你喜欢
          • 2011-05-11
          • 2012-11-26
          • 2012-03-30
          • 1970-01-01
          • 2010-09-22
          • 2020-05-14
          • 1970-01-01
          • 1970-01-01
          • 2020-12-09
          相关资源
          最近更新 更多