简体   繁体   中英

C# Accessing Dynamic Controls Windows Forms

I am creating a number of comboBoxes based on user input. I create the boxes just fine, but when it comes to wanting to check the text within them I am struggling.

I thought of maybe storing them in a IList but that hasn't seemed to work so far. The goal is to change the text of all of them on a button click, but after several attempts I am becoming frustrated.

IList<ComboBox> comboBoxes = new List<ComboBox>();


private void AddComboBox(int i)

    {
        var comboBoxStudentAttendance = new ComboBox();           
        comboBoxStudentAttendance.Top = TopMarginDistance(i);  

        comboBoxStudentAttendance.Items.Add("");
        comboBoxStudentAttendance.Items.Add("Present");
        comboBoxStudentAttendance.Items.Add("Absent");
        comboBoxStudentAttendance.Items.Add("Late");
        comboBoxStudentAttendance.Items.Add("Sick");
        comboBoxStudentAttendance.Items.Add("Excused");

        comboBoxes.Add(comboBoxStudentAttendance);
        this.Controls.Add(comboBoxStudentAttendance);
    }

I tried the following but with no success.

private void DistributeAttendanceButton_Click(object sender, EventArgs e) 
    {

        for (int i = 0; i < sampleNum; i++)
        {
            switch (MasterComboBox.Text)
            {

            case "Present": 


                    comboBoxes.ElementAt(i).Text = "Present";
                    break;
                }

            }
    }

Try this

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

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        const int TOP_MARGIN = 10;
        const int LEFT_MARGIN = 10;
        const int WIDTH = 200;
        const int HEIGHT = 10;
        const int SPACE = 15;
        const int NUMBER_OF_BOXES = 10;
        public Form1()
        {
            InitializeComponent();
            MasterComboBox.Text = "Present";
            for (int i = 0; i < NUMBER_OF_BOXES; i++)
            {
                AddComboBox(i);
            }
        }

        List<ComboBox> comboBoxes = new List<ComboBox>();


        private void AddComboBox(int i)
        {
            var comboBoxStudentAttendance = new ComboBox();
            comboBoxStudentAttendance.Top = TOP_MARGIN + i * (SPACE + HEIGHT);
            comboBoxStudentAttendance.Left = LEFT_MARGIN;
            comboBoxStudentAttendance.Width = WIDTH;
            comboBoxStudentAttendance.Height = HEIGHT;

            comboBoxStudentAttendance.Items.Add("");
            comboBoxStudentAttendance.Items.Add("Present");
            comboBoxStudentAttendance.Items.Add("Absent");
            comboBoxStudentAttendance.Items.Add("Late");
            comboBoxStudentAttendance.Items.Add("Sick");
            comboBoxStudentAttendance.Items.Add("Excused");

            comboBoxes.Add(comboBoxStudentAttendance);
            this.Controls.Add(comboBoxStudentAttendance);

        }

        private void DistributeAttendanceButton_Click(object sender, EventArgs e) 
        {

            for (int i = 0; i < comboBoxes.Count; i++)
            {
                switch (MasterComboBox.Text)
                {

                    case "Present":


                        comboBoxes[i].Text = "Present";
                        break;
                }

            }
        }
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM