[Gambas-user] How to dynamically add & populate variable number of tabs at runtime?
Matti
matti.eber at ...3240...
Wed Apr 19 07:45:25 CEST 2017
Hi Lee,
first of all, you have to give the GridView a X, Y, width and height. Otherwise it's there but doesn't show.
To reference the GridViews, create an array of them and address them as GridView[0], GridView[1] and so on. The [i] is the number of the TabStrip index.
Here is an example of what I did recently (tsTasks is the TabStrip):
Private aTaskText As New Object[13]
Private aTaskCheck As New Object[13]
...
For i = 1 To 12
tsTasks[i - 1].Text = aMonths[i]
tsTasks.Index = i - 1
aTaskText[i] = New TextBox(tsTasks) As "Tasks"
With aTaskText[i]
.X = 77
.Y = 21
.Width = 728
.Height = 35
End With
aTaskCheck[i] = New CheckBox(tsTasks) As "CheckDone"
With aTaskCheck[i]
.X = 840
.Y = 28
.Width = 126
.Height = 21
.Text = ("done")
.Tag = i
End With
Am 19.04.2017 um 01:58 schrieb T Lee Davidson:
> Hello Folks,
>
> I have been trying to figure out how to, at runtime, create a variable number of new tabs in a TabStrip, populate those tabs
> with Controls, and then be able to reference those controls, all dynamically.
>
> There seems to be little information available as to how to 1) dynamically create controls, and 2) reference dynamically named
> controls after creation.
>
> Even with just a simple experiment, I cannot get a GridView to display in a new tab. The Form has been given, at design-time, a
> TabStrip and two buttons. The tabs are 'closable'. One button, 'btnAddTab', creates a new tab and a GridView with the new,
> current tab as parent. (At least that's what I think it is doing.) The other button, 'btnTabInfo', displays info about the
> currently selected tab.
>
> And, I am assuming the GridViews need to have unique names.
>
> [code]
> ' Gambas class file
>
>
> Public Sub btnAddTab_Click()
> Dim hGridView As GridView
>
> TabStrip1.Count += 1
> TabStrip1.Text = "Tab " & TabStrip1.Index
> hGridView = New GridView(TabStrip1) As "GridView" & TabStrip1.Index
> hGridView.Show
> TabStrip1.Refresh
>
> End
>
> Public Sub btnTabInfo_Click()
>
> Print TabStrip1.Children[0].Name
> Print TabStrip1.Children[0].Enabled
> Print TabStrip1.Children[0].Visible
>
> End
>
> Public Sub TabStrip1_Close(Index As Integer)
>
> TabStrip1.Index = Index
> ' TabStrip1.Current.Children[0].Delete() 'Comment out to test if tab is empty
> TabStrip1.Current.Delete()
>
> End
> [/code]
>
>
> Tab creation works, but the GridView control does not display. Any attempt to close a tab without first deleting its children
> causes an exception, showing that the tab is indeed being populated with a child control. Clicking on btnTabInfo for "Tab 1" gives:
> GridView1
> True
> True
>
> So, the program is doing at least some of what I've told it to. I'm obviously not telling it the right thing.
>
> How does one:
> 1. Create new controls and make them visible?
> 2. Reference new controls after creation [ie. (de-)reference a string as a the name of a control]?
>
>
More information about the User
mailing list