Home All Groups Group Topic Archive Search About

Several TexBox in a form of an array

Author
11 Feb 2006 7:35 PM
Marcel Saucier
Hello,

I want to create several texboxes on a form and I would like to refer to
them (properties, etc) in a form of an array. Is that possible ?

Example:

Instead of
TexBox1.text=Mytab(1):TextBox2.text=Mytab(2):TexBox3.text=Mytab(3)...

I would prefer something like that:

For I=1 to 9
  TexBox(I).text=Mytab(I)
Next I

Author
11 Feb 2006 7:17 PM
Cerebrus99
Whenever I face such an issue, I find it very useful to use the Container's
Controls collection.

For instance, put all your textboxes in a container control like a Panel or
GroupBox and then iterate through the Controls collection of that Parent
Container, setting the properties as required. If that isn't possible, you
can still treat the Form as a Parent Container (Use the Me.Controls
collection in that case)
---------------------------------------
Dim Ctrl as Control
Dim i as Integer

For i = 0 To Panel1.Controls.Count - 1
  Ctrl = Panel1.Controls.Item(i)
  If TypeOf (Ctrl) Is TextBox Then
    Ctrl.Text = ""
  End If
Next
---------------------------------------
Though it doesn't appear to be so, from your example, in case you don't need
the Index nos. of the controls, using a For-each loop is even simpler.

Regards,
Cerebrus.
Author
11 Feb 2006 9:44 PM
Marcel Saucier
Thank you but at this point I am too new to VB2005 to understand the concepts
of Parent, Container & Collection.
--
Super Basic programmer under DOS since 1983. Absolutely dummy VB.NET
programmer under Windows !


Show quoteHide quote
"Cerebrus99" wrote:

> Whenever I face such an issue, I find it very useful to use the Container's
> Controls collection.
>
> For instance, put all your textboxes in a container control like a Panel or
> GroupBox and then iterate through the Controls collection of that Parent
> Container, setting the properties as required. If that isn't possible, you
> can still treat the Form as a Parent Container (Use the Me.Controls
> collection in that case)
> ---------------------------------------
> Dim Ctrl as Control
> Dim i as Integer
>
> For i = 0 To Panel1.Controls.Count - 1
>   Ctrl = Panel1.Controls.Item(i)
>   If TypeOf (Ctrl) Is TextBox Then
>     Ctrl.Text = ""
>   End If
> Next
> ---------------------------------------
> Though it doesn't appear to be so, from your example, in case you don't need
> the Index nos. of the controls, using a For-each loop is even simpler.
>
> Regards,
> Cerebrus.
>
>
>
>
Author
11 Feb 2006 8:19 PM
CMM
textBoxesAry = New TextBox() {TextBox1, TextBox2, TextBox3, TextBox4}

--
-C. Moya
www.cmoya.com
Author
11 Feb 2006 9:58 PM
Marcel Saucier
Your approach appeals to me because I understand the bottom of it. But I am
getting the message Name textBoxesAry is not declared. How I could fix that,
and then, how, as example, I could replace the instruction
textbox2.text="Marcel" using your array ?

I was looking for something like: TextBox(2).text="Marcel" or
textboxesary(2).text="Marcel"

For my learning experience to VB2005, I wrote a sudoku game working quite
fine, but I have to write 81 instructions for each textbox property that I
want to modify from data kept in arrays(9,9)...

As you can see, I could be stuck for ever on very simple errors messages.
--
Super Basic programmer under DOS since 1983. Absolutely dummy VB.NET
programmer under Windows !


Show quoteHide quote
"CMM" wrote:

> textBoxesAry = New TextBox() {TextBox1, TextBox2, TextBox3, TextBox4}
>
> --
> -C. Moya
> www.cmoya.com
>
>
>
Author
11 Feb 2006 11:49 PM
CMM
Sorry. Here is the correction:

Dim textBoxesAry As TextBox() = {TextBox1, TextBox2, TextBox3, TextBox4}

If you wanted to access it anywhere in your class you'd put it at the class
level and change the Dim to Private or Friend.

Usage:
You would then access it like any array.

textBoxesAry(1).Text = "bla"
textBoxesAry(2).Text = "bla bla"

or in a loop

For i As Integer = 0 to textBoxesAry.Length - 1
    textBoxesAry(i).Text = "bla"
Next i

or

For Each textBox As TextBox in textBoxesAry
    textBox.Text = "bla"
Next textBox



--
-C. Moya
www.cmoya.com
Show quoteHide quote
"Marcel Saucier" <MarcelSauc***@discussions.microsoft.com> wrote in message
news:69A35513-4C7E-4DEC-91E9-01BAA7F48CF3@microsoft.com...
> Your approach appeals to me because I understand the bottom of it. But I
> am
> getting the message Name textBoxesAry is not declared. How I could fix
> that,
> and then, how, as example, I could replace the instruction
> textbox2.text="Marcel" using your array ?
>
> I was looking for something like: TextBox(2).text="Marcel" or
> textboxesary(2).text="Marcel"
>
> For my learning experience to VB2005, I wrote a sudoku game working quite
> fine, but I have to write 81 instructions for each textbox property that I
> want to modify from data kept in arrays(9,9)...
>
> As you can see, I could be stuck for ever on very simple errors messages.
> --
> Super Basic programmer under DOS since 1983. Absolutely dummy VB.NET
> programmer under Windows !
>
>
> "CMM" wrote:
>
>> textBoxesAry = New TextBox() {TextBox1, TextBox2, TextBox3, TextBox4}
>>
>> --
>> -C. Moya
>> www.cmoya.com
>>
>>
>>
Author
12 Feb 2006 12:35 AM
Marcel Saucier
Wow again, it's working very well now. Sorry if I need very precises
instructions. I am so new into VB2003/2005. But with peoples like you and the
Confessor and others, I am going to make real progress...

Marcel from Toronto, Canada
--
Super Basic programmer under DOS since 1983. Absolutely dummy VB.NET
programmer under Windows !
Author
11 Feb 2006 10:02 PM
Marcel Saucier
Here is the type of coding that I want to replace by a For Next loop:

Public Sub TO_TEXT()

        T11.Text = T(1, 1) : T21.Text = T(2, 1) : T31.Text = T(3, 1) :
T41.Text = T(4, 1) : T51.Text = T(5, 1) : T61.Text = T(6, 1) : T71.Text =
T(7, 1) : T81.Text = T(8, 1) : T91.Text = T(9, 1)
        T12.Text = T(1, 2) : T22.Text = T(2, 2) : T32.Text = T(3, 2) :
T42.Text = T(4, 2) : T52.Text = T(5, 2) : T62.Text = T(6, 2) : T72.Text =
T(7, 2) : T82.Text = T(8, 2) : T92.Text = T(9, 2)
        T13.Text = T(1, 3) : T23.Text = T(2, 3) : T33.Text = T(3, 3) :
T43.Text = T(4, 3) : T53.Text = T(5, 3) : T63.Text = T(6, 3) : T73.Text =
T(7, 3) : T83.Text = T(8, 3) : T93.Text = T(9, 3)
        T14.Text = T(1, 4) : T24.Text = T(2, 4) : T34.Text = T(3, 4) :
T44.Text = T(4, 4) : T54.Text = T(5, 4) : T64.Text = T(6, 4) : T74.Text =
T(7, 4) : T84.Text = T(8, 4) : T94.Text = T(9, 4)
        T15.Text = T(1, 5) : T25.Text = T(2, 5) : T35.Text = T(3, 5) :
T45.Text = T(4, 5) : T55.Text = T(5, 5) : T65.Text = T(6, 5) : T75.Text =
T(7, 5) : T85.Text = T(8, 5) : T95.Text = T(9, 5)
        T16.Text = T(1, 6) : T26.Text = T(2, 6) : T36.Text = T(3, 6) :
T46.Text = T(4, 6) : T56.Text = T(5, 6) : T66.Text = T(6, 6) : T76.Text =
T(7, 6) : T86.Text = T(8, 6) : T96.Text = T(9, 6)
        T17.Text = T(1, 7) : T27.Text = T(2, 7) : T37.Text = T(3, 7) :
T47.Text = T(4, 7) : T57.Text = T(5, 7) : T67.Text = T(6, 7) : T77.Text =
T(7, 7) : T87.Text = T(8, 7) : T97.Text = T(9, 7)
        T18.Text = T(1, 8) : T28.Text = T(2, 8) : T38.Text = T(3, 8) :
T48.Text = T(4, 8) : T58.Text = T(5, 8) : T68.Text = T(6, 8) : T78.Text =
T(7, 8) : T88.Text = T(8, 8) : T98.Text = T(9, 8)
        T19.Text = T(1, 9) : T29.Text = T(2, 9) : T39.Text = T(3, 9) :
T49.Text = T(4, 9) : T59.Text = T(5, 9) : T69.Text = T(6, 9) : T79.Text =
T(7, 9) : T89.Text = T(8, 9) : T99.Text = T(9, 9)

    End Sub

--
Super Basic programmer under DOS since 1983. Absolutely dummy VB.NET
programmer under Windows !


Show quoteHide quote
"CMM" wrote:

> textBoxesAry = New TextBox() {TextBox1, TextBox2, TextBox3, TextBox4}
>
> --
> -C. Moya
> www.cmoya.com
>
>
>
Author
11 Feb 2006 11:34 PM
The Confessor
"=?Utf-8?B?TWFyY2VsIFNhdWNpZXI=?="
<MarcelSauc***@discussions.microsoft.com> wrote in
Show quoteHide quote
news:49B00C12-0488-4A2E-AE3D-6BBF4A9DFD0C@microsoft.com:

> Here is the type of coding that I want to replace by a For Next loop:
>
> Public Sub TO_TEXT()
>
>         T11.Text = T(1, 1) : T21.Text = T(2, 1) : T31.Text = T(3, 1) :
> T41.Text = T(4, 1) : T51.Text = T(5, 1) : T61.Text = T(6, 1) :
> T71.Text = T(7, 1) : T81.Text = T(8, 1) : T91.Text = T(9, 1)
>         T12.Text = T(1, 2) : T22.Text = T(2, 2) : T32.Text = T(3, 2) :
> T42.Text = T(4, 2) : T52.Text = T(5, 2) : T62.Text = T(6, 2) :
> T72.Text = T(7, 2) : T82.Text = T(8, 2) : T92.Text = T(9, 2)
>         T13.Text = T(1, 3) : T23.Text = T(2, 3) : T33.Text = T(3, 3) :
> T43.Text = T(4, 3) : T53.Text = T(5, 3) : T63.Text = T(6, 3) :
> T73.Text = T(7, 3) : T83.Text = T(8, 3) : T93.Text = T(9, 3)
>         T14.Text = T(1, 4) : T24.Text = T(2, 4) : T34.Text = T(3, 4) :
> T44.Text = T(4, 4) : T54.Text = T(5, 4) : T64.Text = T(6, 4) :
> T74.Text = T(7, 4) : T84.Text = T(8, 4) : T94.Text = T(9, 4)
>         T15.Text = T(1, 5) : T25.Text = T(2, 5) : T35.Text = T(3, 5) :
> T45.Text = T(4, 5) : T55.Text = T(5, 5) : T65.Text = T(6, 5) :
> T75.Text = T(7, 5) : T85.Text = T(8, 5) : T95.Text = T(9, 5)
>         T16.Text = T(1, 6) : T26.Text = T(2, 6) : T36.Text = T(3, 6) :
> T46.Text = T(4, 6) : T56.Text = T(5, 6) : T66.Text = T(6, 6) :
> T76.Text = T(7, 6) : T86.Text = T(8, 6) : T96.Text = T(9, 6)
>         T17.Text = T(1, 7) : T27.Text = T(2, 7) : T37.Text = T(3, 7) :
> T47.Text = T(4, 7) : T57.Text = T(5, 7) : T67.Text = T(6, 7) :
> T77.Text = T(7, 7) : T87.Text = T(8, 7) : T97.Text = T(9, 7)
>         T18.Text = T(1, 8) : T28.Text = T(2, 8) : T38.Text = T(3, 8) :
> T48.Text = T(4, 8) : T58.Text = T(5, 8) : T68.Text = T(6, 8) :
> T78.Text = T(7, 8) : T88.Text = T(8, 8) : T98.Text = T(9, 8)
>         T19.Text = T(1, 9) : T29.Text = T(2, 9) : T39.Text = T(3, 9) :
> T49.Text = T(4, 9) : T59.Text = T(5, 9) : T69.Text = T(6, 9) :
> T79.Text = T(7, 9) : T89.Text = T(8, 9) : T99.Text = T(9, 9)
>
>     End Sub
>

In your general declarations (outside of any procedure), put the
following:

Friend TextBox(8, 8) As System.Windows.Forms.TextBox

In the Form.Load procedure (or in the New() procedure, if you feel
comfortable working without the safety net of the Form Designer), put the
following:

Dim A, B As Integer
For A = 0 To 8
   For B = 0 To 8
      TextBox(A, B) = New System.Windows.Forms.TextBox
      TextBox(A, B).Size = New System.Drawing.Size(20, 20)
      TextBox(A, B).Location = New System.Drawing.Point(A * 20, B * 20)
      Me.Controls.Add(TextBox(A, B))
   Next
Next

These won't trigger events - setting up 2d arrays which can trigger
events is beyond my ken and may not be possible - but you should be able
to read and/or modify their contents by address at runtime.

Feel free to ask if you have more questions about how, exactly, I did
that.

The Confessor
Author
12 Feb 2006 12:20 AM
Marcel Saucier
Wow, it's works, first of all ! It does really, in shorts instructions, what
I was looking to do.

Thank you very much again, I am just now fully depressed of how much I still
have to learn !

Marcel Saucier
Toronto, Canada


--
Super Basic programmer under DOS since 1983. Absolutely dummy VB.NET
programmer under Windows !