C#: невозможно использовать свойство Controls из библиотеки, которая создает динамические c объекты - PullRequest
0 голосов
/ 01 марта 2020

Я в начале и хочу создать библиотеку, которую можно использовать в моей основной форме. Роль библиотеки заключается в создании динамических c объектов (меток) для моей формы, но при компиляции проекта я получил это сообщение в этой строке this.Controls.Add (genLabel) :

Ошибка CS0120 Ссылка на объект требуется для нестатического c поля, метода или свойства '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);
        }

    }
}

1 Ответ

0 голосов
/ 01 марта 2020

Я сделал, как сказал jdweng, и это работа. Я добавил новый параметр в genLabel с типом Form и в основной программе, где я вызвал метод, я использовал ключевое слово «this».

Библиотека:

public void genLabel(Form form, string x)

MainProgram:

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);
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...