简体   繁体   English

C# 访问动态控件 Windows 窗体

[英]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.我想过将它们存储在 IList 中,但到目前为止似乎还没有奏效。 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;
                }

            }
        }
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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