Link to home
Start Free TrialLog in
Avatar of jetbet
jetbetFlag for New Zealand

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.

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();
                        }
                    }
                }
            }
        }

Open in new window


The following line is what does not work
 control = (UserControl)(parent.Controls.Find(userControlName, false).FirstOrDefault());

Open in new window

ASKER CERTIFIED SOLUTION
Avatar of Mike Tomlinson
Mike Tomlinson
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of jetbet

ASKER

Yes that was it. I should have read further rather than relying on examples. Thanks a lot.