尝试在 C# 中生成按钮

Posted

技术标签:

【中文标题】尝试在 C# 中生成按钮【英文标题】:Attempting to generate buttons in C# 【发布时间】:2020-12-14 19:59:43 【问题描述】:

我最近一直在学习 WinForms,并找到了一些演示如何生成按钮的教程。但是,虽然它在我正在观看的视频中显然有效,但我没有看到表单加载时出现按钮。我想知道我是否缺少明显的东西。


 private void Form1_Load(object sender, EventArgs e)
        
            Button btn = new Button();
            btn.Text = "Connect";
            btn.Name = "Connect";
            btn.Size = new Size(140, 23);
            btn.Location = new Point(0, 137);
            btn.Click += (obj, eArgs) =>
            

            ;
            this.Controls.Add(btn);
            Button btn2 = new Button();
            btn2.Text = "Clear";
            btn2.Name = "Clear";
            btn2.Size = new Size(140, 23);
            btn2.Location = new Point(0, 160);
            btn2.Click += (obj, eArgs) =>
            

            ;
            this.Controls.Add(btn2);


        

【问题讨论】:

你绑定Form.Load事件了吗?在构造函数上绑定 Form 的 Load 事件.. this.Load += new System.EventHandler(this.Form1_Load); 【参考方案1】:

您确定按钮的位置在窗口的视野范围内吗?

如果添加这些断言会发生什么:

Debug.Assert(this.button1.Location.X + this.button1.Size.Height < this.Height);
Debug.Assert(this.button1.Location.Y + this.button1.Size.Width < this.Width);

我尝试了以下最小代码,按钮出现在位置 0,0

private void button1_Click(object sender, EventArgs e)

    var button = new System.Windows.Forms.Button();
    this.Controls.Add(button);

如果您使用 Visual Studio 表单项目,通常使用设计器添加按钮会更容易。只需将一个按钮从工具箱拖放到您想要的大致位置。使用属性窗口更改属性值。

public partial class Form1 : Form

    public Form1()
    
        this.InitializeComponent();
    

如果您查看 InitializeComponent,您会发现与您的代码类似的代码:

private System.Windows.Forms.Button button1;

private void InitializeComponent()

    this.button1 = new System.Windows.Forms.Button();

    this.SuspendLayout();
    // 
    // button1
    // 
    this.button1.Location = new System.Drawing.Point(58, 58);
    this.button1.Name = "button1";
    this.button1.Size = new System.Drawing.Size(75, 23);
    this.button1.TabIndex = 0;
    this.button1.Text = "button1";
    this.button1.UseVisualStyleBackColor = true;

    this.Controls.Add(this.button1);

唯一的区别是UseVisualStyleBackColor 和添加的属性。但我在顶部的程序表明,它们不是必需的。

顺便说一句,除了使用设计器创建按钮之外,通常最好在构造器中构造所有组件,即使您现在不想显示它们。只需将属性 Visible 设置为 false。

如果在构造函数中创建所有组件,则可以确定按钮在整个窗口生命周期中都存在。 您永远不必检查创建按钮的事件(在您的 case form load) 已经被处理了。

【讨论】:

【参考方案2】:

这个问题是由于您没有注册 Form1_Load 事件。有三种方法可以解决这个问题。第三种方法应用最广泛。

    在 Form.cs 中为表单手动注册 Load 事件。 如下:

    public Form1()
      
          InitializeComponent();
          this.Load+=new EventHandler(Form1_Load);
      
    

    Load 事件是表单的默认事件。您可以直接双击表格。这样,设计者自动生成Form_Load事件,无需手动注册。只需在其中添加您的代码即可。

    此外,您还可以在 Windows 窗体设计器上创建事件处理程序。了解这部分对你学习Winform很有帮助。To create an event handler on the Windows Forms designer

【讨论】:

以上是关于尝试在 C# 中生成按钮的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中生成颜色渐变

从 Blazor 中生成的按钮调用函数

在 React 组件中生成输入

如何在 asp.net 中生成刷新令牌?

在流分析查询中生成倒置时间戳

从 Azure autorest 中生成排除方法