Categories: MSDN / DotNet / Java / Scripts / Linux / PHP Ask - La ask - La Answer

VB.NET Help

Hi

I need some help with VB.NET . I am trying to create a Button array . Once a user click on the first button he will see another button . When the usere will click on the first bitton again he will see different button . Every time a user click on the first button different button will appear . I have created a vb.NET button array where I have the first button creating dynamically and when user clicks on it he can see the second button . But I can not go further . Which means if the user click on the first button again nothig happen . Please help . Thanks .Here is my code

Public Class Form1
Inherits System.Windows.Forms.Form

#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)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub

'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer

'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.
Friend WithEvents Button1 As System.Windows.Forms.Button
Friend WithEvents Button2 As System.Windows.Forms.Button
Friend WithEvents Button3 As System.Windows.Forms.Button
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Me.Button1 = New System.Windows.Forms.Button
Me.Button2 = New System.Windows.Forms.Button
Me.Button3 = New System.Windows.Forms.Button
Me.SuspendLayout()
'
'Button1
'
Me.Button1.Location = New System.Drawing.Point(176, 56)
Me.Button1.Name = "Button1"
Me.Button1.TabIndex = 0
Me.Button1.Text = "Button1"
Me.Button1.Visible = False
'
'Button2
'
Me.Button2.Location = New System.Drawing.Point(184, 88)
Me.Button2.Name = "Button2"
Me.Button2.TabIndex = 1
Me.Button2.Text = "Button2"
Me.Button2.Visible = False
'
'Button3
'
Me.Button3.AccessibleRole = System.Windows.Forms.AccessibleRole.ButtonMenu
Me.Button3.AllowDrop = True
Me.Button3.Location = New System.Drawing.Point(200, 120)
Me.Button3.Name = "Button3"
Me.Button3.TabIndex = 2
Me.Button3.Tag = "hello"
Me.Button3.Text = "Button3"
Me.Button3.Visible = False
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(292, 273)
Me.Controls.Add(Me.Button3)
Me.Controls.Add(Me.Button2)
Me.Controls.Add(Me.Button1)
Me.Name = "Form1"
Me.Text = "Form1"
Me.ResumeLayout(False)

End Sub

#End Region

Dim count As Integer

Private Sub ClickButton(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, Button3.Enter

Dim btn As Button

btn = CType(sender, Button)
'MsgBox(btn.Text)

Button1.Show()


End Sub



Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

'Create the button
Dim btn As New Button

'Specify the location and the size
btn.Location = New System.Drawing.Point(100, 20)
btn.Size = New System.Drawing.Size(100, 20)
btn.Text = "Add Buttons"

'Add it to the forms control collection
Me.Controls.Add(btn)

'Link the event to the event handler
AddHandler btn.Click, AddressOf Me.ClickButton

End Sub

End Class
[4691 byte] By [software_develo] at [2007-11-11 7:06:00]
# 1 Re: VB.NET Help
OK, you've got three buttons and then you add a forth button dynamically. But the event handle code always shows button1. Then when you click button1, it shows button1. No matter which button you click, it shows button1.

If you want some random button to appear then you need to generate a random number confined to be between 0 and the number of buttons you have minus 1.
Build an object array holding your buttons. Then based on the random number generated, index into the array and cast that object back into a button and show it.

By the way, you do not have an array of buttons. After the form load event completes you have four destinct buttons for which one event handler is defined for their click events. So no matter which button is clicked, the same code runs.
dkroger at 2007-11-11 21:49:33 >
# 2 Re: VB.NET Help
Hi

Thanks for your reply . But I could not understand what you have exactly said . Could you please so me some code or let me know how can I modify my code to make it work the way I want

Thanks
software_develo at 2007-11-11 21:50:44 >
# 3 Re: VB.NET Help
Looking at your code, you have three buttons configured on the form. All three of these buttons are invisible when the form is generated. All three of the buttons use the same event routine 'ClickButton' when any one of them is clicked. Then, in the form_load event routine, you generate another button and connect it's click event to the same handler as the other three. So you you have one event handler for all four buttons. However, this does not make them members of an array. They are all members of the form's controls collection. Arrays and collections are similar in ways but they are not the same.
If you look at the code in your 'ClickButton' event routine, it will always make Button1 visible. It will never make any of the other buttons visible.
From your short description, I can't tell exactly what your goal is. Do you want to make any random button visible when some other button is clicked, or do you want some other specific button to appear?
If you make your goal more clear, I may be able to give you a specific example.
dkroger at 2007-11-11 21:51:37 >
# 4 Re: VB.NET Help
Hi

Thanks so much for your reply . Here is what I like to have . I like to have one button ( Add button )on the form visible when the form load .When user click on the add button another button will appear underneath the Add button ( button1) . When user click on the Add button again another button ( button2 ) will appear beside the Button1 button . So when user click the Add button second time there will be two button underneath like a tab .

Please let me know if this helps

Thanks
software_develo at 2007-11-11 21:52:43 >
# 5 Re: VB.NET Help
Do you know ahead of time how many buttons are needed?
dkroger at 2007-11-11 21:53:37 >
# 6 Re: VB.NET Help
Hi

Thanks for your help . I need to have seven button underneath the Add button . So user will click seven time on the Add button to get the seven buttons underneath like a tab .

Thanks
software_develo at 2007-11-11 21:54:47 >
# 7 Re: VB.NET Help
Is this a class assignment or a business assignment?
dkroger at 2007-11-11 21:55:48 >
# 8 Re: VB.NET Help
I need to get it done for my work . I have to add data grid to every buttons . I know that part .But Just can make the button part working
software_develo at 2007-11-11 21:56:47 >
# 9 Re: VB.NET Help
You could add all of the buttons at design time and make all of them except the ADD button invisible. Then use a form level counter to keep track of haw many buttons have been made visible.

Private Count as Integer

Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click

If Count < 7 Then
Select Case Count
Case 0
Button1.Visible = True
Case 1
Button2.Visivle = True
Case 2
Button3.Visible = True
.
.
.
Case 6
Button7.Visible = True
End Select
Count += 1
End If
End Sub

This is not elegant and will make changes a pain, but it is quick. (i.e. This is not the way it should be done.)

To be more elegant, you could use a collection and simulate a control array. There are examples available on MSDN showing how to simulate a control array under .NET. Just go to the MSDN library and search for 'Control Array'.
dkroger at 2007-11-11 21:57:50 >
# 10 Re: VB.NET Help
Thanks so much . I will try that and let you know
software_develo at 2007-11-11 21:58:45 >