Solved

Dynamically add controls to the Form - VB.Net / VS 2005

Posted on 2010-08-23
14
573 Views
Last Modified: 2012-08-14


I have VB.Net Form in VS 2005.

In which i am entering Patient's Physician or Doctor details ..!

In the form, i have kept 3 rows ..

Like

Physican Name + TextBox , Phone Number + TextBox, FaxNumber + TextBox.

Some patients have more than 3 Doctors .. so, if i need to add more than 3 rows .. i just need to press Add button, which will automatically create a new row ..

How to add more controls dynamically on run time mode ..!
0
Comment
Question by:chokka
  • 5
  • 5
  • 3
  • +1
14 Comments
 
LVL 18

Expert Comment

by:Anil Golamari
ID: 33502747
Dim atextbox As New System.Windows.Forms.TextBox()
FormName.Controls.Add(atextbox)
'change FormName To Whatever You Named Your form name where you want to create a textbox.

Try something like this.

0
 
LVL 18

Expert Comment

by:John (Yiannis) Toutountzoglou
ID: 33503431
In your case you have to make a 1 to many relation between patient and doctor ....
Patient will be in details ...and doctor in a datagridview....so for 1 patient many doctors...
0
 
LVL 5

Accepted Solution

by:
sanket_1985 earned 500 total points
ID: 33504967
Create the control, set its size and location and add it to this.Controls and it should work.

A sample code is:


private void AddTextBox(int i)
{
this.SuspendLayout();

TextBox myTextBox = new TextBox();
myTextBox.Name = "TextBox" + i.ToString();
myTextBox.Size = new Size(100, 100);
myTextBox.Location = new Point(120, 120);

this.Controls.Add(myTextBox);

this.ResumeLayout(false);
this.PerformLayout();
}

Open in new window

0
Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

 
LVL 18

Expert Comment

by:John (Yiannis) Toutountzoglou
ID: 33505085
@sanket_1985 And @lucky85 Your codes for me are correct....The author is talking about Rows....I am a little bit Confused....Maybe @chokka must be more specific...Am i wrong?
0
 

Author Comment

by:chokka
ID: 33505104
yes, like in ASP.net grid view - we have Insert template .. which add new row dynamically ..
similarly, i am looking forward to add new row dynamically .. !

0
 
LVL 5

Expert Comment

by:sanket_1985
ID: 33505107
@jtoutou agreed with your statement - probably this is just a sample code that can help to replicate three textbox. I might be wrong, might be right.
0
 
LVL 18

Expert Comment

by:John (Yiannis) Toutountzoglou
ID: 33505113
Are you using a datagridview?
0
 
LVL 5

Expert Comment

by:sanket_1985
ID: 33505121
@chokka - win form or web form?
0
 
LVL 5

Expert Comment

by:sanket_1985
ID: 33505182
Had it been ASP.NET Web Form, the sample code would have been:

Imports System.Collections.Generic
Imports System.Web.UI
Imports OfficeFileReader

Public Partial Class ResumeWizard
	Inherits System.Web.UI.Page
	#Region "Private Fields"

	Private experienceDynamicControls As ExperienceDetailsControl()

	#End Region

	#Region "Event Handlers"

	Protected Sub Page_PreInit(sender As Object, e As EventArgs)
		Dim myControl As Control = GetExperiencePostBackControl(Me.Page)

		If (myControl IsNot Nothing) Then
			If (myControl.ClientID.ToString() = "wizResumeBuilder_btnAddExperience") Then
				Try
					Session("thisExperienceControlsCount") = Convert.ToInt32(Session("thisExperienceControlsCount")) + 1
				Catch generatedExceptionName As Exception
					Session("thisExperienceControlsCount") = 2
				End Try
			End If
		End If
	End Sub

	Protected Overrides Sub OnInit(e As EventArgs)
		MyBase.OnInit(e)

		Dim experienceControlsCount As Integer = 1

		Try
			experienceControlsCount = Convert.ToInt32(Session("thisExperienceControlsCount"))

			If experienceControlsCount = 0 Then
				experienceControlsCount = 1
				Session("thisExperienceControlsCount") = 1
			End If
		Catch generatedExceptionName As Exception
			Session("thisExperienceControlsCount") = 1
		End Try

		experienceDynamicControls = New ExperienceDetailsControl(experienceControlsCount - 1) {}

		For ctr As Integer = 0 To experienceDynamicControls.Length - 1
			Dim userControl As ExperienceDetailsControl = DirectCast(Page.LoadControl("~/ResumeControls/ExperienceDetailsControl.ascx"), ExperienceDetailsControl)
			userControl.ID = "ExperienceDetailsControl" & ctr.ToString()
			userControl.Index = (ctr + 1)
			plhExperienceDetails.Controls.Add(userControl)
			experienceDynamicControls(ctr) = userControl
			Dim literalBreak As New LiteralControl("<br /><br />")
			plhExperienceDetails.Controls.Add(literalBreak)
		Next
	End Sub

	Protected Sub btnAddExperience_Click(sender As Object, e As EventArgs)

	End Sub

	Protected Sub btnGenerateResume_Click(sender As Object, e As EventArgs)
		If radFormatBW1.Checked Then
			Dim experienceDetails As New List(Of JobDetails)()

			For Each currentControl As EducationDetailsControl In educationDynamicControls
				Dim er As New EducationRecord()
				er.CourseAndDatesOfAttendance = currentControl.ClassOrDegree + "(" + currentControl.AttendanceDates & ")"
				er.SchoolName = currentControl.SchoolName
				er.SchoolCityState = currentControl.SchoolCityState
				educationDetails.Add(er)
			Next
		End If
	End Sub

	#End Region

	#Region "Private Methods"

	Private Function GetExperiencePostBackControl(thePage As Page) As Control
		Dim myControl As Control = Nothing
		Dim ctrlName As String = thePage.Request.Params.[Get]("__EVENTTARGET")
		If ((ctrlName IsNot Nothing) And (ctrlName <> String.Empty)) Then
			myControl = thePage.FindControl(ctrlName)
		Else
			For Each Item As String In thePage.Request.Form
				Dim c As Control = thePage.FindControl(Item)
				If (TypeOf (c) Is System.Web.UI.WebControls.Button) Then
					If c.ID = "btnAddExperience" Then
						myControl = c
					End If
				End If

			Next
		End If
		Return myControl
	End Function

	#End Region
End Class

Open in new window

0
 
LVL 18

Expert Comment

by:John (Yiannis) Toutountzoglou
ID: 33505193
@sanket_1985 I didn't mean anything about your code which is correct...but seems to me like i said in my first comment parent-child relation...
0
 
LVL 5

Expert Comment

by:sanket_1985
ID: 33505216
@jtoutou - didn't meant to offend you. Please accept my apologies if you felt so.
0
 
LVL 18

Expert Comment

by:John (Yiannis) Toutountzoglou
ID: 33505332
no worries!!!!!!!!!!!!..................I just wondered if author's question could be more clearly  :)
0
 

Author Comment

by:chokka
ID: 33533772
Ya, i am just working on it .. and also visualizing the difference between GridView and Dynamically Adding controls ..!
0
 

Author Closing Comment

by:chokka
ID: 33726327
Thanks
0

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This tutorial demonstrates one way to create an application that runs without any Forms but still has a GUI presence via an Icon in the System Tray. The magic lies in Inheriting from the ApplicationContext Class and passing that to Application.Ru…
If you need to start windows update installation remotely or as a scheduled task you will find this very helpful.
This video shows how to quickly and easily add an email signature for all users on Exchange 2016. The resulting signature is applied on a server level by Exchange Online. The email signature template has been downloaded from: www.mail-signatures…
In an interesting question (https://www.experts-exchange.com/questions/29008360/) here at Experts Exchange, a member asked how to split a single image into multiple images. The primary usage for this is to place many photographs on a flatbed scanner…

809 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