Solved

vb.net dynamic control creation

Posted on 2004-08-02
3
9,739 Views
Last Modified: 2013-12-27
I'm developing an application in VB.NET on compact framework.

I'm creating a form with a variable number of controls, so i must create then at runtime. In vb6 i can create an array of controls and increment it. But not in vb.net.

so i need to create controls (textbox and combobox) giving then a name but how?
i can't declare something like  << dim "textbox_12" as new textbox >> obviously

i tried

        For i = 0 To 10
            Dim newcontrol As New TextBox
            newcontrol.Top = 20 * i
            Me.Controls.Add(newcontrol)
        Next i

and it adds the controls to the form how can i manage then? How do i know what there is in textbox_12?
i could cycle in me.controls, but i can't identify the right control because "name" property is not supported in compact framework...
0
Comment
Question by:illu666
  • 2
3 Comments
 
LVL 48

Expert Comment

by:Mikal613
Comment Utility
I dont think you can but  here is the hack for EVB maybe you can use that Idea.

http://devbuzz.com/content/zinc_eVB_simulating_dynamic_ctrls_pg1.asp
0
 
LVL 10

Expert Comment

by:prakash_prk
Comment Utility

You can declare all the required controls as private members

when you need the control create an instance for it .write the code for its event handlers .Attach it to eventhandler when you  want it



0
 
LVL 10

Accepted Solution

by:
prakash_prk earned 125 total points
Comment Utility
Try this code

If you need the name property why are you inherit the control.

------------------------------------------------------

Imports System.IO

Public Class Form2
    Inherits System.Windows.Forms.Form

    Friend WithEvents Button1 As System.Windows.Forms.Button

    Dim TextBoxes(10) As MyTextBox  'Dont Create Instances
    Dim i As Integer = 0

#Region " Windows Form Designer generated code "

    Public Sub New()

        MyBase.New()

        'This call is required by the Windows Form Designer.
        InitializeComponent()

        'Add any initialization after the InitializeComponent() call

    End Sub

    'Form overrides dispose to clean up the component list.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        MyBase.Dispose(disposing)
    End Sub

    'NOTE: The following procedure is required by the Windows Form Designer
    'It can be modified using the Windows Form Designer.  
    'Do not modify it using the code editor.
    Private Sub InitializeComponent()
        Me.Button1 = New System.Windows.Forms.Button
        '
        'Button1
        '
        Me.Button1.Location = New System.Drawing.Point(200, 320)
        Me.Button1.Size = New System.Drawing.Size(80, 24)
        Me.Button1.Text = "Button1"
        '
        'Form2
        '
        Me.ClientSize = New System.Drawing.Size(282, 351)
        Me.Controls.Add(Me.Button1)
        Me.Text = "Form1"

    End Sub
#End Region


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        TextBoxes(i) = New MyTextBox
        TextBoxes(i).Location = New Point(10, 10 + i * 20)
        TextBoxes(i).Size = New Size(100, 20)
        TextBoxes(i).Name = "Text" & i
        Me.Controls.Add(TextBoxes(i))
        AddHandler TextBoxes(i).TextChanged, AddressOf TextBoxex_TextChanged
        i += 1
    End Sub


    Private Sub TextBoxex_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)

        Dim TempVar As MyTextBox
        TempVar = DirectCast(sender, MyTextBox)
        MsgBox(TempVar.Name)
    End Sub

End Class

Public Class MyTextBox
    Inherits TextBox
    Private _Name As String

    Public Sub New()
        MyBase.New()
    End Sub

    Public Property Name() As String
        Get
            Return _Name
        End Get
        Set(ByVal Value As String)
            _Name = Value
        End Set
    End Property

End Class
------------------------------------------------
0

Featured Post

IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

Suggested Solutions

I think the most popular question in our Windows Mobile Programming zone is about the backlight - we all want to keep it on when our application is running. Few years ago the function SystemIdleTimerReset() did this job. On our side we had to detec…
Let me explain this picture a little bit.  First, in case you haven't already guessed, you are looking at my 2 phones, an Android Samsung Galaxy S5 on the left and an iPhone 5 on the right.  They are on their respective cradles on my desk.  But, you…
This video demonstrates how to create an example email signature rule for a department in a company using CodeTwo Exchange Rules. The signature will be inserted beneath users' latest emails in conversations and will be displayed in users' Sent Items…
You have products, that come in variants and want to set different prices for them? Watch this micro tutorial that describes how to configure prices for Magento super attributes. Assigning simple products to configurable: We assigned simple products…

771 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now