尝试在 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# 中生成按钮的主要内容,如果未能解决你的问题,请参考以下文章