jetbet
asked on
C# Access UserControl from main form
I have a Form on my application that contains several UserControls.
Each user control contains several custom buttons that I have derived from the button class.
I am trying to get at a button from the UserControl where the name of both the Button and UserControl names are stored in a config (XML) file. If I hard code the control getting the button is easy.
I cannot work out how to get the UserControl itself.
parent is my main form and this is called from an instance of a class on the form.
The following line is what does not work
Each user control contains several custom buttons that I have derived from the button class.
I am trying to get at a button from the UserControl where the name of both the Button and UserControl names are stored in a config (XML) file. If I hard code the control getting the button is easy.
I cannot work out how to get the UserControl itself.
parent is my main form and this is called from an instance of a class on the form.
private void RemoveUnwantedScenes(Boolean _isMain, string _thisScene, Viz_ability.VizCommands.VizCommand.VizLayer _layer, UserControl _control)
{
Viz_ability.VizCommands.VizCommand command;
List<string> scenes;
if (_isMain)
{
command = vizMain;
scenes = mainScenes;
}
else
{
command = vizPreview;
scenes = previewScenes;
}
UserControl control = null;
for (int i = scenes.Count - 1; i > -1; i--)
{
string scene = scenes[i];
XmlNodeList nodeList = xml_sceneDoc.SelectNodes("scenes/scene[name = '" + _thisScene + "']/shares/share[. = '" + scene + "']");
if (nodeList.Count == 0)
{
String userControlName = DataCenter.XMLUtilities.GetElementValue(xml_sceneDoc, "scenes/scene[name = '" + scene + "']/userControl");
if (!String.IsNullOrEmpty(userControlName))
{
control = (UserControl)(parent.Controls.Find(userControlName, false).FirstOrDefault());
}
ClearScene(_isMain, scene, _layer); //Remove pre existing scene
scenes.Remove(scene);
XmlNode resetButton = xml_sceneDoc.SelectSingleNode("scenes/scene[name = '" + scene + "']/resetButton");
if ((resetButton != null) && (control != null))
{
Control[] matches = control.Controls.Find(resetButton.InnerText, true);
if (matches.Length > 0 && matches[0] is MutexPreviewButton)
{
MutexPreviewButton btn = (MutexPreviewButton)matches[0];
btn.ResetButton();
}
}
}
}
}
The following line is what does not work
control = (UserControl)(parent.Controls.Find(userControlName, false).FirstOrDefault());
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER