【问题标题】:How can I create a button programmatically in C# window app?如何在 C# 窗口应用程序中以编程方式创建按钮?
【发布时间】:2018-05-23 18:34:24
【问题描述】:

我知道拖放按钮很容易,但是讲师坚持以编程方式创建按钮。

在 Form1_Load 方法中我应该写什么代码来创建一个简单的按钮?

 private void Form1_Load(object sender, System.EventArgs e)
 {

 }

所以在加载按钮时会显示?

【问题讨论】:

  • 这是用于 winforms 的吗?
  • 是的,它是 windows 窗体
  • @YahyaHussein 这个问题针对的是 Winforms 而不是 WPF。
  • 根据您的 cmets 它根本不起作用,我们只能猜测您没有正确连接 Load() 事件导致这些行永远不会运行,或者您有表单上的其他控件遮挡了按钮,或者您可能以某种方式显示了错误的表单?...

标签: c# winforms visual-studio button programmatically-created


【解决方案1】:

正如你所说的是Winforms,你可以做以下...

首先创建一个新的Button 对象。

Button newButton = new Button();

然后将其添加到该函数内的表单中:

this.Controls.Add(newButton);

您可以设置的额外属性...

newButton.Text = "Created Button";
newButton.Location = new Point(70,70);
newButton.Size = new Size(50, 100);

您遇到的问题是您试图在 Form_Load 事件上设置它,在那个阶段表单还不存在并且您的按钮被覆盖。您需要 ShownActivated 事件的委托才能显示按钮。

例如在您的 Form1 构造函数中,

public Form1()
{
    InitializeComponent();
    this.Shown += CreateButtonDelegate;
}

您的实际委托是您创建按钮并将其添加到表单的地方,这样的事情会起作用。

private void CreateButtonDelegate(object sender, EventArgs e)
{
    Button newButton= new Button();
    this.Controls.Add(newButton);
    newButton.Text = "Created Button";
    newButton.Location = new Point(70,70);
    newButton.Size = new Size(50, 100);
    newButton.Location = new Point(20, 50);
}

【讨论】:

  • 命名空间 SimplePiano { public partial class Form1 : Form { Button nb = new Button();公共 Form1() { InitializeComponent(); } private void Form1_Load(object sender, System.EventArgs e) { this.Controls.Add(nb); }
  • 我运行代码时没有显示按钮。我在方法之外创建了按钮对象,然后在 Load() 方法中我做了 this.controls.add(newButton) 但它不起作用。
  • 还是同样的问题。我会尝试创建一个新的解决方案,以防我目前正在使用的解决方案出现问题。感谢您的帮助
【解决方案2】:

在您的事件加载表单上输入此代码

 private void Form1_Load(object sender, EventArgs e)
    {
        Button testbutton = new Button();
        testbutton.Text = "button1";
        testbutton.Location = new Point(70, 70);
        testbutton.Size = new Size(100, 100);
        testbutton.Visible = true;
        testbutton.BringToFront();
        this.Controls.Add(testbutton);

    }

【讨论】:

    【解决方案3】:

    很简单:

    private void Form1_Load(object sender, System.EventArgs e)
     {
         Button btn1 = new Button();
         this.Controls.add(btn1);
         btn1.Top=100;
         btn1.Left=100;
         btn1.Text="My Button";
    
     }
    

    【讨论】:

    • 为什么? @KurtCamilleri。有什么问题?
    • @nAviD 我有你 -2 和 2 天后你仍然没有注意到你的错误。您在分配按钮后修改的任何属性都不会生效。你已经发送了这个对象,你的TopLeftText 对按钮没有影响。如果我错了纠正我。 Kurt,你做错了,我的代码不可能不适合你,我用一个空的 WinForms 项目测试过。
    • @Adriani6 对象不会通过将它们添加到另一个集合中而消失。你太天真了。
    • @nAviD 正如我所说的“如果我错了,请纠正我”。我确实得到了纠正,我对此进行了测试,并且确实有效。这不是我对我的回答给出负面评价的理由。事实上,在“专业”环境中这样做是很幼稚的。无论如何,当你编辑你的帖子时,我承认我不公平地删除了我的 -1。你有一个错字。 .add() 应该是 .Add()
    猜你喜欢
    • 1970-01-01
    • 2010-10-26
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多