winForms Как создать многоразовый элемент управления - PullRequest
0 голосов
/ 14 мая 2018

У меня есть элемент управления groupBox (который создается вручную) с кучей элементов управления textbox внутри него, которые будут использоваться для отображения информации ... Я пытаюсь создать несколько из этих элементов управления groupBox, и для каждого элемента управления groupBox я создать, я добавляю различный текст в каждое отдельное текстовое поле в groupBox, а затем отображаю groupBox ... своего рода способ, которым стековый поток имеет одинаковый веб-дизайн / макет на тысячах веб-страниц, но каждая веб-страница отображает различную информацию или текст.

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

    // the GetInstance() method is the same as the "This" Keyword - long story

    public static void DisplayTask(Task task2Display)
    {
        Control groupBox = manuallyCreatedGroupBox; // attempt at creating reference 
        // obviously doesn't and shouldn't work -  lol

        // This is my major problem,
        // dunno how to create instance of the manually created groupBox
        // i can only reference to it, meaning i can only have one 
        // reference of the groupBox, hence only display one groupBox at a time

        groupBox.Location = taskLocation;
        taskLocation.Offset(0, 10 + groupBox.Size.Height); 

        // we do this so that the next groupBox is displayed ten "length" downward

        // this edits each individual textbox within the "new" groupBox

        foreach (Control cntrl in groupBox.Controls)
        {
            switch (cntrl.TabIndex)
            {
                case 1:

                    cntrl.BackColor = task2Display.priorityColor; // Priority Color
                    break;
                case 2:

                    cntrl.Text = task2Display.taskName; // Task Name
                    break;
                case 3:

                    cntrl.Text = task2Display.dscription; // task Description
                    break;
                     default:
                    break;
            }
        }

        GetInstance().Controls.Add(groupBox);
        // draws the to be the new groupBox control onto the form

        GetInstance().Show(); // show the form

    }

И просто чтобы уточнить мою цель здесь

Я пытаюсь отобразить несколько экземпляров созданного вручную группового блока, который содержит элементы управления текстовым полем

  • и проблема в том, что я не могу создать новые экземпляры созданного вручную groupBox, что означает, что я не могу отображать несколько из указанных элементов управления groupBox одновременно (может отображать только один за раз)

  • и мой вопрос: как мне создать новый экземпляр моего созданного вручную groupBox со всеми его текущими элементами управления. И на заметку: если есть лучший способ добиться того, что я пытаюсь сделать, у меня все уши

Спасибо!

1 Ответ

0 голосов
/ 16 мая 2018

-------------------------- Спасибо за совет, ребята ----------------- ---------------

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

public string TaskName
    {
        set
        {
            tskNameTxtBox.Text = value;
        }
    }

    public string TaskDiscription
    {
        set
        {
            tskDscrptnTxtBox.Text = value;
        }
    }

Как видите, это просто набор свойств, которые изменяют значения элементов управления текстового поля, которые были созданы вручную в User Control Designer

Теперь в форме, где будет отображаться пользовательский элемент управления, вот новый код

// "GetInstance()" method is the same as "This" Keyword - long story
public static void DisplayTask(Task task2Display)
    {

        dsplyrCntrls = new Task_DisplayrUsrCntrl(); // create new instance of user control

        // assign value to user control propeties

        dsplyrCntrls.TaskName = task2Display.taskName; 
        dsplyrCntrls.TaskDiscription = task2Display.dscription;
        dsplyrCntrls.Location = taskLocation;

        taskLocation.Offset(0, dsplyrCntrls.Size.Height + 10); // we do this so that the next task that is display is displayed ten "length" downward
                                                               //   GetInstance().Controls.Add(groupBox); // draws the groupBox control onto the form

        GetInstance().Controls.Add(dsplyrCntrls); // adds user control to form so user can see
        int i = GetInstance().Controls.Count; // testing purpose - make sure control is added to form - which it is
        GetInstance().Show(); // shows the form

    }

Это довольно просто, поэтому каждый раз, когда вызывается метод DisplayTask (), создается новый экземпляр пользовательского элемента управления, соответственно присваиваются значения свойств и затем отображаются.

Спасибо, что указали мне в правильном направлении @Reza Aghaei

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...