C# 如何将UserControl转换为control

C# 如何将UserControl转换为control,c#,type-conversion,user-controls,controls,C#,Type Conversion,User Controls,Controls,我创建了一个带有面板的程序,通过一个按钮,我可以在面板中添加一个UserControl。UserControl只包含一个组合列表 我想做的是获取我的面板中的所有UserControl并获取它们的值。 我尝试了此操作,但我的程序未检测到任何组合框,因此表为空: private void button_add_outil_Click(object sender, EventArgs e) { // Récupère tous les élèves présen

我创建了一个带有
面板的程序,通过一个按钮,我可以在
面板中添加一个
UserControl
UserControl
只包含一个
组合列表

我想做的是获取我的
面板中的所有UserControl
并获取它们的值。 我尝试了此操作,但我的程序未检测到任何组合框,因此表为空:

private void button_add_outil_Click(object sender, EventArgs e)
        {
            // Récupère tous les élèves présents
            List<string> eleve = new List<string>();

            foreach (Control ctrl in panel_eleve.Controls)
            {

                if (ctrl is ComboBox)
                {
                    ComboBox c = ctrl as ComboBox;
                    eleve.Add(c.SelectedText);
                }
            }

            addOutil add_outil_window = new addOutil(eleve);
            add_outil_window.ShowDialog();
        }
private void按钮\u添加\u输出\u单击(对象发送方,事件参数e)
{
//这杯酒是给你的
List eleve=新列表();
foreach(面板元素控件中的控件ctrl)
{
如果(ctrl为组合框)
{
组合框c=ctrl作为组合框;
eleve.Add(c.SelectedText);
}
}
addOutil add_outil_window=新的addOutil(eleve);
添加_outil_window.ShowDialog();
}
有人知道如何同时将
用户控件
转换为
控件
?多谢各位

这是伪代码(我假设您的
UserControl
是一个容器),但是,正如我在评论中提到的,我认为您需要执行以下操作:

        // Récupère tous les élèves présents
        List<string> eleve = new List<string>();

        foreach (Control ctrl in panel_eleve.Controls)
        {

            if (ctrl is UserControl) // You may be able to be more specific with this type
            {

                   foreach (Control innerControl in ctrl.Controls )
                   {
                       if (innerControl is ComboBox)
                       {
                            ComboBox c = innerControl as ComboBox;
                            eleve.Add(c.SelectedText);
                       }

                   }

            }
        }

        addOutil add_outil_window = new addOutil(eleve);
        add_outil_window.ShowDialog();
//Récupère tous lesélèves présents
List eleve=新列表();
foreach(面板元素控件中的控件ctrl)
{
if(ctrl是UserControl)//您可以更具体地使用此类型
{
foreach(ctrl.Controls中的控件innerControl)
{
如果(innerControl是组合框)
{
ComboBox c=内部控件作为ComboBox;
eleve.Add(c.SelectedText);
}
}
}
}
addOutil add_outil_window=新的addOutil(eleve);
添加_outil_window.ShowDialog();
我的问题解决了 下面是经过一些修改的最终代码

            foreach (Control ctrl in panel_eleve.Controls)
        {

            if (ctrl is UserControl_reponsable)
            {
                foreach (Control innerControl in ctrl.Controls)
                {                     
                    ComboBox c = innerControl as ComboBox;
                    eleve.Add(c.Text);
                }

            }
        }

非常感谢

UserControl
控件。您的问题实际上是关于递归查找嵌套在父控件中的所有控件吗?我想您会在ctrl类中找到组合框。您需要首先键入对您的UserControl类型的检查我想要访问我的UserControl中的控件我尝试将其公开,这起到了作用,因为现在我可以访问它,这要归功于
UserControl.ComboBox\u eleve
,但我得到一个错误:对象引用未定义为对象的实例:(当您遇到错误时,代码是什么样子的?这不是控制台错误,而是显示窗口的错误谢谢您的回答我已经更改了foreach(ctrl中的Control innerControl)
foreach(ctrl.Controls中的Control innerControl)
但我在
eleve.Add(c.SelectedText)中得到一个错误
错误是:
对象引用未定义为对象的实例
为清楚起见,现在可以显示代码的外观了吗?