Nianios
Nianios

Reputation: 1436

Run through all the controls in a form

I have a form and I am running through all the controls in that form. My code is OK and is get all the controls with all their properties.

So for example I have a TabControl with 2 TabPages and 2 textboxes in each tabPage.
The problem is that for the tabPage that isn't selected , the textboxes' property visible is False, although I have set it to True.
I tried to solve this problem with Control.Select and Control.Focus , but Visible is still False:

  Private Sub createXML(ByVal cnt As Control, ByVal elem As XElement)
    Try

        cnt.Select()
        cnt.Focus()
        Select Case cnt.Controls.Count
            Case Is = 0
               'Code here to write XElement to an XDocument
                'Check Controls properties
            Case Is > 0
                For Each childCnt As Control In cnt.Controls
                    childCnt.Select()
                    childCnt.Focus()

                    Dim childElem As New XElement(childCnt.GetType.ToString)
                    Select Case childCnt.Controls.Count
                        Case Is = 0
                            'Code here to write XElement to an XDocument
                            'Check Controls properties
                        Case Is > 0
                            createXML(childCnt, childElem)
                       End Select
                Next
        End Select

Any ideas? Note that I don't know what controls I have to run through each time

Upvotes: 0

Views: 559

Answers (1)

WozzeC
WozzeC

Reputation: 2660

Your problem in this case is that a TabControl sets everything to invisble unless they are present in the currently selected tabpage. And when you change tab the controls are set to visible and previous ones dissapeares. So how does the tabcontrol keep track of a control that is manually set to visible false, so that it doesn't light up when the tab is changed? Well the visible property is not really based on a boolean value. It's merely an easy way to interpret it for us programmers. Either you see it or you don't, no rules to keep in mind or settings to mess up. Visible or not simple as that.

So what to do with your issue. Basically, my first thought when I see this is that you want to create a "open the program so it looks the same as when it was closed"-function. Which of course is not working properly at the moment since your parser probably set everything to visible=false, which at previously stated means not visible ever. Hence not showing after Tab control page change when loaded.

So solutions: 1. Add a tag to the controls in the tab control. This way you can look for the tag when saving. If it's there, set the visible property to true. (Easy to understand for you when maintaining in the future) 2. Use reflection to get the actual visible state. Look at SO thread and read about reflection: Using control.Visible returns False if it's on a tab page that is not selected (Not so easy to understand when maintaining in future)

Upvotes: 1

Related Questions