如何将按钮添加到布局中?-C#

如何将按钮添加到布局中?-C#,c#,winforms,user-interface,desktop-application,desktop,C#,Winforms,User Interface,Desktop Application,Desktop,我找不到任何方法将按钮添加到布局中 我正在尝试将子项(按钮)添加到布局中,但找不到任何方法 源代码: using System; using System.Windows.Forms; namespace WinForms { internal static class Program { /// <summary> /// The main entry point for the application. /

我找不到任何方法将按钮添加到布局中

我正在尝试将子项(按钮)添加到布局中,但找不到任何方法

源代码:

using System;
using System.Windows.Forms;

namespace WinForms
{
    internal static class Program
    {
        /// <summary>
        ///     The main entry point for the application.
        /// </summary>
        [STAThread]
        private static void Main()
        {
            Application.SetHighDpiMode(HighDpiMode.SystemAware);
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());

            Button button = new Button {Height = 100, Width = 100, Text = "Test"};
            

        }
    }
}
使用系统;
使用System.Windows.Forms;
名称空间WinForms
{
内部静态类程序
{
/// 
///应用程序的主要入口点。
/// 
[状态线程]
私有静态void Main()
{
Application.SetHighDpiMode(HighDpiMode.SystemAware);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(新Form1());
按钮按钮=新按钮{Height=100,Width=100,Text=“Test”};
}
}
}

您需要将按钮添加到表单中,而不是添加到主方法中

代码的问题在于它位于错误的位置-实际上,它只在表单关闭后运行,因为
Application.Run
将在消息循环中运行表单,从而允许触发UI事件

您可以使用Visual Studio WinForms Designer(如果使用Visual Studio),也可以在构造函数中或任何窗体启动事件(如Load或Showed)中的
InitializeComponent()
方法-so之后手动添加代码

同样,将
按钮
(或任何动态实例化的控件)添加到表单的
控件
集合中也非常重要-否则,您的
按钮
将不会显示:

Button-Button=new按钮{Height=100,Width=100,Text=“Test”};
此.Controls.Add(按钮);
当然也有动态生成控件的用例;但是,在窗体运行之前手动构建控件是非常罕见的—在大多数动态控件生成的情况下,窗体已启动并运行—动态生成是对某些用户操作的响应。我建议使用设计器进行一般UI布局。

  • 您可以在Visual Studio 2019(不是Visual Studio代码,不是JetBrains Rider)中打开您的项目,如果您的上下文符合许可证的条件,则可以使用免费版本。如果您没有资格获得免费许可证,那么您[r workplace]很容易就能获得某种形式的许可证

  • 您在解决方案资源管理器中双击Form1,然后您会看到运行该程序时窗体的外观,然后打开“控件”工具面板,从中拖动一个按钮并将其放到窗体上

但是,如果您想着手编写大量枯燥重复的代码来构建UI,那么您可以将控件添加到其他控件的控件集合中,即:

        Form1 f = new Form1();
        Button button = new Button {Height = 100, Width = 100, Text = "Test"};
        f.Controls.Add(button);

        Application.Run(f);
每个控件都有一个控件集合,可以向其中添加其他控件(不仅仅是您认为“具有子控件的对象,如Panel或GroupBox”-有些控件是其他控件的集合,如NumericUpDown是一个文本框和两个按钮)

例如,您需要编写多少代码,请在“设计”视图中布置一个外观合理的UI,然后打开Form1.Designer.cs-您将看到为什么我们要借助设计工具来完成此操作!:)


如果我没有使用Designer工具,学习不是会更快吗

不,这就像说“如果我在记事本中手工编写SVG代码,而不是使用Inkscape/Gimp直观地绘制图像……或者通过在十六进制编辑器中键入字节来创建PNG,学习速度不是更快吗?”


如此接近原始的低水平意味着你最终“看不见树木,看不见树木”,这阻碍了你的学习。关于抽象的长篇论述,以及我们为什么使用它们/它们如何应用于包括生活中的学习和操作在内的每一个日常过程,请参见评论线索

您应该在
表单1
的构造函数中这样做:
按钮=新按钮{…};此.Controls.Add(按钮)。如果出于某种原因,您想在
Main()
中执行此操作(我认为没有什么好的理由),只需将表单实例分配给变量,并将按钮添加到其
控件
集合中即可<代码>Form1 frm=新Form1();frm.控件.添加(按钮);应用程序运行(frm)。当我尝试打开设计器工具时,它不起作用。我还有一个问题:如果我不使用Designer工具(针对windows窗体),学习不是会更快吗?不,绝对不是。这就像是在问“如果我取下汽车发动机的顶部,用手上下推动位置,上班不是更快吗?”。我们在生活中有一种叫做“抽象层”的东西——我们对最终用户隐藏某些任务的复杂性,因为深入到每一个小细节都是无法抗拒的,毫无意义。它很早就开始了,告诉孩子们“当你只有2个糖果时,你不能拿走3个”,然后是“实际上我们可以有负数,但你不能平方根”,然后是“所以有虚数…”我必须同意你的观点。当我试着打开Designer工具时,这不管用,我们不会直接教3岁的孩子量子纠缠。计算机也一样;你开始编程的时候,并不是拿一本汇编语言的书,或者在一个实验板上构建一个cpu,编写网卡驱动程序,然后实现两个,http,等等,只是为了发出一个web请求——你只是写了一行代码,上面写着webclient.downloadstring(url)和大量的细节对你来说是隐藏的。在C#winforms存在的整个时间里,我一直在使用它,我唯一一次手动编写ui代码是发布一个带有“将其粘贴到新项目”的演示