Avatar of jetbet
jetbet
Flag 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

C#.NET Programming

Avatar of undefined
Last Comment
jetbet

8/22/2022 - Mon
ASKER CERTIFIED SOLUTION
Mike Tomlinson

Log in or sign up to see answer
Become an EE member today7-DAY FREE TRIAL
Members can start a 7-Day Free trial then enjoy unlimited access to the platform
Sign up - Free for 7 days
or
Learn why we charge membership fees
We get it - no one likes a content blocker. Take one extra minute and find out why we block content.
Not exactly the question you had in mind?
Sign up for an EE membership and get your own personalized solution. With an EE membership, you can ask unlimited troubleshooting, research, or opinion questions.
ask a question
jetbet

ASKER
Yes that was it. I should have read further rather than relying on examples. Thanks a lot.
All of life is about relationships, and EE has made a viirtual community a real community. It lifts everyone's boat
William Peck