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)中得到一个错误
错误是:对象引用未定义为对象的实例
为清楚起见,现在可以显示代码的外观了吗?