首页 > 解决方案 > C#:不能使用创建动态对象的库中的 Controls 属性

问题描述

我刚开始,我想创建一个可以在我的主表单中使用的库。库的作用是为我的表单创建动态对象(标签),但是当我编译项目时,我在this.Controls.Add(genLabel)这一行收到了这条消息:

错误 CS0120 非静态字段、方法或属性“Control.Controls”需要对象引用

如果我复制库包含并放入表单中,则不会出现此错误。有人可以向我解释我应该如何更正代码吗?

我的库中的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing;
using mainProgram;

namespace LabelClass
{
    class labelClass
    {
        public void genLabel(string x)
        {
            List<char> bits = new List<char>();
            int i = x.Length - 1;
            int nrbit = 0;

            do
            {
                bits.Add(x[i]);
                i -= 1;
            }
            while (i >= 0);

            i = bits.Count - 1;
            int minus = 0;

            do
            {
                Label genLabel = new Label();
                genLabel.Name = "bits" + Convert.ToString(nrbit);
                genLabel.Text = bits[i] + "";
                genLabel.Size = new Size(50, 20);
                genLabel.Location = new Point(734 - minus, 86);
                minus += 60;
                i -= 1;
                this.Controls.Add(genLabel);
            }
            while (i >= 0);
        }

    }
}

标签: c#dynamiccontrols

解决方案


我确实像 jdweng 所说的那样工作。我在 genLabel 中添加了一个类型为 Form 的新参数,并在主程序中调用了我使用“this”关键字的方法。

图书馆:

public void genLabel(Form form, string x)

主程序:

private void btnSubmit_Click(object sender, EventArgs e)
        {
            saveString = obj.checkStringContainHex(textBox1.Text);
            if(saveString != "Error")
            {
                saveInt = obj.convertHexToDec(saveString);
                saveString = obj.convertDecToBin(saveInt);
                labelClass labelClass = new labelClass();
                labelClass.genLabel(this, saveString);
            }
        }

推荐阅读