【问题标题】:How to add several buttons and their click events dynamically in c# code behind?如何在后面的c#代码中动态添加几个按钮及其点击事件?
【发布时间】:2017-07-03 21:06:18
【问题描述】:

您好,我想在我的代码后面的代码中将几个按钮及其点击事件动态添加到我的 Windows 窗体应用程序中,我的按钮将在其中执行 System.Diagnostics.Process.Start(targetURL); 我怎样才能实现这一点?

【问题讨论】:

    标签: c# winforms code-behind


    【解决方案1】:

    您只需要创建按钮,设置它的属性和事件处理程序,然后将其添加到表单上的Controls 集合中。

    var button = new Button();
    try
    {
        button.Text = "Button 1";
        button.Click += (sender, e) => System.Diagnostics.Process.Start(targetURL);
        //Or if you don't want to use a lambda and would rather have a method;
        //button.Click += MyButton_Click;
        Controls.Add(button);
    }
    catch
    {
        button.Dispose();
        throw;
    }
    
    //Only needed when not using a lambda;
    void MyButton_Click(Object sender, EventArgs e)
    {
        System.Diagnostics.Process.Start(targetURL);
    }
    

    【讨论】:

      【解决方案2】:

      声明你的按钮变量。

      添加事件处理程序

      将它们添加到表单控件属性中。

      利润

      【讨论】:

        【解决方案3】:

        您可以将任何您喜欢的控件添加到表单的Controls 集合中:

        var targetURL = // ...
        
        try
        {
            SuspendLayout();
        
            for (int i = 0; i < 10; i++)
            {
                var button = new Button();
                button.Text = String.Format("Button {0}", i);
                button.Location = new Point(0, i * 25);
                button.Click += (object sender, EventArgs e) => System.Diagnostics.Process.Start(targetURL);
                this.Controls.Add(button);
            }
        }
        finally
        {
            ResumeLayout();
        }
        

        向父控件添加多个控件时,建议在初始化要添加的控件之前调用SuspendLayout方法。将控件添加到父控件后,调用ResumeLayout 方法。这样做将提高具有许多控件的应用程序的性能。

        【讨论】:

          【解决方案4】:

          您可以编写一个包含文本框“txbURL”、按钮“btnNavigateToURL”的用户控件并编写按钮的事件处理程序,以执行您的代码 (System.Diagnostics.Process.Start(targetURL);)

          完成后,很容易在运行时将控件添加到表单中,编写类似这样的代码(目前没有 c# 编辑器,因此您可能需要验证代码)

          MyControlClassName userControl = new MyControlClassName(string targetUrl);
          userControl.Parent = yourForm;
          yourForm.Controls.Add(userControl);
          

          就是这样。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-03-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-08-18
            相关资源
            最近更新 更多