Есть ли способ получить доступ и изменить значение в пользовательском элементе управления, который был добавлен программно на панель? - PullRequest
0 голосов
/ 21 января 2019

Как я могу изменить значение флажка «флажок» в пользовательском элементе управления после программного добавления его в таблицу?

У меня есть пользовательский элемент управления, который имеет текстовое поле и флажок. (Мне не хватает репутации, чтобы опубликовать изображение, но вот выстрел) https://imgur.com/a/yyXG7p8

Имеет флажок и текстовое поле.

В этом классе есть открытый метод, который позволяет установить флажок в значение true или false:

public void setCheckBox(bool set)
{
    checkBox1.Checked = set;
}

В другом классе, главном классе, у меня есть цикл, который добавляет кучу этих пользовательских элементов управления на панель:

private void DrawInputBits()
        {
            for (int i = 0; i < 4; i++)
            {
                for (int j = 0; j < 32; j++)
                {

                    currentTag = tagsFile[tagIndex];
                    tagIndex++;
                    CustomControl.BitsControl newBits = new CustomControl.BitsControl(i, j, currentTag, false);
                    InputBitsTable.Controls.Add(newBits);
                }
            }

        }

Если вы не можете сказать, каждый флажок содержит значение бита в 32-битном числе для 4 чисел (следовательно, вложенные циклы 0-31, 4 раза), и смысл в том, чтобы показать или контролировать значения , Вы можете игнорировать код о тегах. Все, что он делает, это читает текст из файла и заполняет текстовое поле этим прочитанным текстом.

Когда код выполняется, если состояние бита изменяется, флажок также должен изменить состояние. Следующий цикл будет изменен для прохождения массива целых чисел (4 дюйма) и обновления каждого флажка после считывания состояния каждого бита. В настоящее время цикл просто настроен на изменение всех битов на «истина». В конце концов, это не то, чего я хочу, но дело в том, что я даже не могу ссылаться на пользовательские элементы управления на панели, чтобы вообще поменять флажок. Я думал, что следующее сработает, но ничего, что я пробовал, пока не получилось.

private void UpdateInputsScreen(int[] inputDINTS)
{
            for(int i = 0; i < InputBitsTable.Controls.Count; i++)
            {
                for(int j = 0; j < 32; j++)
                {
                    InputBitsTable.Controls[i].setCheckBox(true);//this line gives an error.
                }
            }
}

Это класс для пользовательского элемента управления.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;

namespace CustomControl
{
    public partial class BitsControl: UserControl
    {
        int bit = 0;
        int dint = 0;
        string tag = "";


        BitsControl(int dint, int bit, string tag, bool isEnabled)
        {

            InitializeComponent();
            this.dint = dint;
            this.bit = bit;
            this.tag = makeTag(tag, dint, bit);
            this.textBox1.Text = this.tag;
            checkBox1.Enabled = isEnabled;
        }

        private string makeTag(string tag, int dint, int bit)
        {
            string newTag =  tag + ":[" + dint + "]." + bit;
            return newTag;
        }

        public void setCheckBox(bool set)
        {
            checkBox1.Checked = set;
        }
    }
}

Основной класс слишком длинный, чтобы предоставить, но я могу по запросу.

1 Ответ

0 голосов
/ 21 января 2019

Как насчет сохранения списка или словаря в ваших элементах управления:

var dict = new Dictionary<string, CustomControl.BitsControl>();

При создании компонентов добавьте его в словарь:

dict.Add(currentTag, newBits);

А затем попробуйте что-то вроде:

foreach(var tag in tagsFile)
{
    dict[tag].setCheckBox(true);
}
...