如何在另一个类中使用动态按钮

时间:2015-06-20 12:06:14

标签: c# winforms button dynamic

我想创建一个动态按钮并控制它。

但是我在行中出错了

MainMenuButton(true, Form);

我该如何纠正?

Form1.cs的

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        UI Teemp;

        ClientSize = new Size(Bounds.Width, Bounds.Height-35);
        Teemp.MainMenuButton(true, Form);
    }
}

和UI.cs

class UI
{
    public void MainMenuButton(Boolean Mode, Form Form1)
    {
        if (Mode == true) //Create
        {
            System.Windows.Forms.Button StartB = new System.Windows.Forms.Button();
            Form1.Controls.Add(StartB);
            StartB.Text = "Start";
            StartB.Top = 300;
            //StartB.Bottom = 100;
            StartB.Left = 400;
        }
        else
        {
            //  this.Controls.Remove(StartB);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您必须首先创建UI类的实例。 UI Teemp;仅声明 UI 类型的本地变量,但不会使用 UI 对象实例对其进行初始化。人们不能使用未初始化的局部变量。

声明 Teemp 变量时,您可以同时使用 UI 对象实例对其进行初始化:

UI Teemp = new UI();


您的代码存在第二个问题。调用 MainMenuButton 时,您需要传递Form对象实例。在您的代码中,Form是类型名称,不引用对象实例。使用 this 关键字:

Teemp.MainMenuButton(true, this);

this 关键字指的是正在使用它的类的当前实例。关于您的示例,this将引用 Form1 对象实例。


我还想评论另一件事。从技术上讲,这不是一个问题,而是命名 MainMenuButton " Form1"的第二个参数。可能会令人困惑,因为还有一个名为" Form1"的类型。关于C#,通常建议变量和参数名称中的第一个字母是小写,而类型名称中的第一个字母应该是大写。因此, MainMenuButton 方法的源代码可能看起来像这样:

public void MainMenuButton(bool createButton, Form form)
{
    if (createButton)
    {
        System.Windows.Forms.Button startB = new System.Windows.Forms.Button();
        form.Controls.Add(startB);
        startB.Text = "Start";
        startB.Top = 300;
        //startB.Bottom = 100;
        startB.Left = 400;
    }
    else
    {
        //  this.Controls.Remove(startB);
    }
}

保持变量和参数名称与类型名称不同可避免在读取和编写代码时出现混淆,从而降低引入错误的风险:)