Страницы

Поиск по вопросам

воскресенье, 8 марта 2020 г.

Обращение к динамически создаваемым элементам формы из класса

#c_sharp #winforms


Как получить доступ из класса к динамически создаваемым элементам формы (в моем случае
textBox)?

Вот так я создаю элементы:

for (int i = 1; i <= Convert.ToInt32(input); i++)
{
    panel1.Controls.Add(new TextBox()
    {
        Name = i.ToString(),
        Location = new Point(54, yTextBox_n = yTextBox_n + 35),
        Font = new Font("Times New Roman", 14.25f)
    });

    panel1.Controls.Add(new Label()
    {
        Name = i.ToString(),
        Location = new Point(8, yLabel_n = yLabel_n + 35),
        Text = "n" + i,
        Font = new Font("Times New Roman", 14.25f, FontStyle.Italic)
    });
}   


у меня есть алгоритм. я ввожу с формы нужные данные и выводятся вот эти динамически
создаваемые элементы. затем я ввожу в них данные и эти данные мне надо передать в класс
алгоритм
как передать их?

вот такой класс. Он совсем не доделанный. Он должен получать динамически создаваемые
элементы

class Class_Algorithm
{
    int[,] Matrix;
    int L;
    int N;

    public Class_Algorithm(int[,] matrix, int l, int n)
    {
        Matrix = matrix;
        L = l;
        N = n;
    }

    public void Algorithm()
    {
        int k = 1;
        int q = 1;

        for (int d = 0; d < L; d++)
        {
            int m = 1;
            int z = 1;
            int[] r = new int[N];

            for(int i = 0; i < N; i++)
            {
                for(int j = 0; j < N; j++)
                {
                    r[i] += Matrix[i, j];
                } 
            }
        }
    }
}

    


Ответы

Ответ 1



private Dictionary dynamicTextboxes = new Dictionary(); private string TextByIndex(int index) { string result = ""; if (dynamicTextboxes.ContainsKey(index)) result = dynamicTextboxes[index].Text; return result; } dynamicTextboxes.Clear(); for (int i = 1; i <= Convert.ToInt32(input); i++) { TextBox box = new TextBox() { Name = "textbox_" + i.ToString(), Location = new Point(54, yTextBox_n = yTextBox_n + 35), Font = new Font("Times New Roman", 14.25f) }; dynamicTextboxes[i] = box; panel1.Controls.Add(box); panel1.Controls.Add(new Label() { Name = "label_" + i.ToString(), Location = new Point(8, yLabel_n = yLabel_n + 35), Text = "n" + i, Font = new Font("Times New Roman", 14.25f, FontStyle.Italic) }); }

Ответ 2



Это в самой форме куда добавляется этот элемент. this.Controls.Find("ControlName", false); Если из другого класса, то в параметре передайте Ui компонент в который добавляется динамически контрол. Это на самом деле плохой способ, выложите код! В вашем случае не вижу ничего плохого, если добавить в класс формы функцию, которая будет в конструктор алгоритма передавать нужное значение. public void GetTextByDynamicCreateTextBox(string name) { string param = panel1.Controls.Find(name, false).FirstOrDefault().Text; Algorytm alg = new Algorytm(param); }

Комментариев нет:

Отправить комментарий