我可以在设计时将表单置于 Visual Studio WinForms 设计器中吗

问题描述 投票:0回答:1

我目前正在制作一个小应用程序,它会在超时时自动按下某个按钮。 我正在用 visual studio 的窗口窗体做这个,但项目从 visual studio 左上角的窗体窗口开始。

现在我想让它在视觉本身的中间居中,但我不知道如何居中。

我在谷歌上只能找到如何在应用程序启动/执行时将其居中。但正如我提到的,我只希望它以视觉本身的工作空间为中心。

我希望有人能帮我解决这个奢侈品问题

Gert-Jan

c# .net visual-studio winforms windows-forms-designer
1个回答
0
投票

在 Windows 窗体设计器中设计时居中窗体与在运行时居中窗体不同,它们基本上没有任何关系。

在设计器中居中窗体只是让它出现在 VS 设计器中工作区的中间。可以使用以下任一解决方案:

  • 在定制设计师的帮助下设置位置
  • 稍作改动,修改基本形式的设计器位置
  • 通过处理基本窗体及其父窗体的 Layout 事件并检查 DesignMode 属性,无需使用设计器。

基本技巧是根据设计表面(表单的父级)的大小在设计模式中设置表单的位置:

在下面的示例中,我使用基本表单处理了它,并修改了设计器位置。要创建一个演示该功能的简单项目,请按照以下步骤操作:

  1. 创建一个新的 WinForms 项目(.NET Framework),并命名为

    FormDesignerExample
    .

  2. 添加对“System.Design”程序集的引用。 (右键单击,添加引用,在框架程序集中搜索它)。

  3. 在项目中添加以下

    MyBaseForm 
    类:

    using System.ComponentModel.Design;
    using System.Drawing;
    using System.Windows.Forms;
    using System.Windows.Forms.Design.Behavior;
    
    namespace FormDesignerExample
    {
        public class MyBaseForm : Form
        {
            protected override void CreateHandle()
            {
                base.CreateHandle();
                if (Site == null)
                    return;
                var host = (IDesignerHost)this.Site.GetService(typeof(IDesignerHost));
                var rootDesigner = (IRootDesigner)host.GetDesigner(host.RootComponent);
                var rootComponent = (Control)rootDesigner.Component;
                var designSurface = rootComponent.Parent;
    
                rootComponent.Layout += (sender, e) =>
                {
                    var left = (designSurface.Width - rootComponent.Width) / 2;
                    var top = (designSurface.Height - rootComponent.Height) / 2;
                    rootComponent.Location = new Point(left, top);
                };
                designSurface.SizeChanged += (sender, e) =>
                {
                    var left = (designSurface.Width - rootComponent.Width) / 2;
                    var top = (designSurface.Height - rootComponent.Height) / 2;
                    rootComponent.Location = new Point(left, top);
                    var bhSvc = (BehaviorService)host
                        .GetService(typeof(BehaviorService));
                    bhSvc.SyncSelection();
                };
            }
        }
    }
    
    
  4. 打开Form1.cs,从MyBaseForm驱动

    public partial class Form1 : MyBaseForm
    
  5. 关闭所有设计器窗体,重建项目。然后在设计模式下打开Form1。

给你。

© www.soinside.com 2019 - 2024. All rights reserved.