Site Search:
Sign in | Join | Help

This Blog

Syndication

VB.NET

Notes, Tricks and Tips on VB.NET
  • VB.NET index

  • Codebehind for a VB form

    [code languate="vb.net"]

    Public Class GeneralContractor
        Dim oFormObjects As New formObjects
        Dim _FormState As formStateType
        Private Property FormState() As formStateType
            Get
                Return _FormState
            End Get
            Set(ByVal value As formStateType)
                _FormState = value
                Select Case value
                    Case formStateType.clean
                        Me.lblFormState.Text = "Clean"
                    Case formStateType.dirty
                        Me.lblFormState.Text = "Dirty"
                    Case formStateType.loading
                        Me.lblFormState.Text = "Loading"
                    Case formStateType.populated
                        Me.lblFormState.Text = "Populated"
                    Case formStateType.newPending
                        Me.lblFormState.Text = "New"
                End Select

            End Set
        End Property
        Dim _bDirty As Boolean
        Private Property bDirty() As Boolean
            Get
                Return _bDirty
            End Get
            Set(ByVal value As Boolean)
                _bDirty = value
                Select Case value
                    Case True
                        Me.lblDirtyFlag.Text = "..."
                    Case False
                        Me.lblDirtyFlag.Text = ""
                End Select
            End Set
        End Property

        Private Sub GeneralContractor_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Try
                Me.lblDirtyFlag.Text = ""
                Me.lblFormState.Text = ""

                oFormObjects.Populate(Me)
                'identify the special objects
                oFormObjects.Item("txtRowID").ControlClass = formObject.controlClassType.Key
                oFormObjects.Item("btnSave").ControlClass = formObject.controlClassType.SaveButton
                oFormObjects.Item("btnCancel").ControlClass = formObject.controlClassType.CancelButton
                oFormObjects.Item("btnDelete").ControlClass = formObject.controlClassType.DeleteButton
                oFormObjects.Item("btnLookup").ControlClass = formObject.controlClassType.LookupButton
                oFormObjects.Item("btnNew").ControlClass = formObject.controlClassType.NewButton

                For Each o As formObject In oFormObjects
                    Select Case o.ControlClass
                        Case formObject.controlClassType.CancelButton, formObject.controlClassType.DeleteButton, formObject.controlClassType.SaveButton
                        Case formObject.controlClassType.Key
                        Case formObject.controlClassType.LookupButton, formObject.controlClassType.NewButton
                        Case Else
                            AddHandler o.Control.TextChanged, AddressOf TextChangedEvent
                            AddHandler o.Control.Validating, AddressOf ValidatingEvent
                    End Select
                Next

                setFormState(formStateType.clean)
            Catch ex As Exception
                globalErrorHandler(ex)
            End Try

        End Sub
        Private Sub setFormState(ByVal formState As formStateType)
            Select Case formState
                Case formStateType.loading

                Case formStateType.clean
                    Me.FormState = formStateType.loading
                    'clear all fields
                    oFormObjects.SetClean()

                Case formStateType.populated
                    oFormObjects.SetPopulated()

                Case formStateType.dirty
                    oFormObjects.SetDirty()

                Case formStateType.newPending
                    oFormObjects.SetPopulated()
            End Select

            Me.FormState = formState
        End Sub


        Private Sub btnLookup_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLookup.Click

            'create an instance of the 'Owner lookup form' form
            Dim frm As New GeneralContractorLookup

            'attach to the notify sub
            frm.NotifyRowDoubleClicked(New GeneralContractorLookup.gridRowDoubleClicked(AddressOf KeyChosen))


            'open the form modally
            frm.ShowDialog()
        End Sub


        'notice that the signature is the same as the DELEGATE
        Public Sub KeyChosen(ByVal intRowID As Int32)

            'this fires when the 'choose customer' fires the 'doubleClicked' event
            populateform(intRowID)

        End Sub
        Sub populateform(ByVal intRowID As Int32)
            Dim ofacGeneralContractor As New dynData.facPTGeneralContractor

            If ofacGeneralContractor.Fill(intRowID, AppUser.connectionString) Then
                fill(ofacGeneralContractor)
            End If
        End Sub

        Sub fill(ByVal o As dynData.facPTGeneralContractor)
            Me.FormState = formStateType.loading

            Me.txtRowID.Text = o.ContractorID
            Me.txtName.Text = o.ContractorName
            Me.txtAddress1.Text = o.Address1
            Me.txtAddress2.Text = o.Address2
            Me.txtCity.Text = o.City
            Me.txtState.Text = o.State
            Me.txtZip.Text = o.Zip
            Me.txtContact.Text = o.Contact
            Me.txtPhone.Text = o.Phone
            Me.txtFax.Text = o.Fax

            setFormState(formStateType.populated)

        End Sub

        Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click
            'save
            If save() Then
                'reset form
                setFormState(formStateType.clean)

            End If

        End Sub

        Private Sub Owner_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
            Dim ofacGeneralContractor As New dynData.facPTGeneralContractor

            Select Case Me.FormState
                Case formStateType.dirty
                    If globalMessageBox("Save form?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
                        If Not save() Then
                            e.Cancel = True

                        End If
                    End If
                Case formStateType.newPending
                    If globalMessageBox("Save form?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
                        'save the form
                        If Not save() Then
                            'there was an error saving
                            e.Cancel = True
                        End If
                    Else
                        'the user doesn't want to save
                        ofacGeneralContractor.Delete(Me.txtRowID.Text, AppUser.connectionString)
                    End If
            End Select

        End Sub

        Function save() As Boolean
            Try

                Dim ofacGeneralContractor As New dynData.facPTGeneralContractor
                ofacGeneralContractor.ContractorID = Me.txtRowID.Text
                ofacGeneralContractor.ContractorName = Me.txtName.Text
                ofacGeneralContractor.Address1 = Me.txtAddress1.Text
                ofacGeneralContractor.Address2 = Me.txtAddress2.Text
                ofacGeneralContractor.City = Me.txtCity.Text
                ofacGeneralContractor.State = Me.txtState.Text
                ofacGeneralContractor.Zip = Me.txtZip.Text
                ofacGeneralContractor.Contact = Me.txtContact.Text
                ofacGeneralContractor.Phone = Me.txtPhone.Text
                ofacGeneralContractor.Fax = Me.txtFax.Text

                Return ofacGeneralContractor.Save(ofacGeneralContractor, AppUser.connectionString)


            Catch ex As Exception
                globalErrorHandler(ex)
                Return False
            End Try

        End Function
        Private Sub ValidatingEvent(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs)
            If bDirty Then

                'the user has changed the value in a field other than Product Number
                Select Case Me.FormState
                    Case formStateType.loading

                    Case formStateType.clean

                    Case formStateType.populated
                        setFormState(formStateType.dirty)
                    Case formStateType.dirty

                End Select

                bDirty = False
            End If
        End Sub
        Private Sub TextChangedEvent(ByVal sender As Object, ByVal e As System.EventArgs)
            Select Case Me.FormState
                Case formStateType.populated, formStateType.newPending
                    bDirty = True
            End Select
        End Sub

        Private Sub btnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancel.Click
            setFormState(formStateType.clean)
        End Sub

        Private Sub btnNew_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNew.Click
            Me.FormState = formStateType.loading

            Dim o As New dynData.facPTGeneralContractor
            Dim intRowID As Int32 = o.Create(AppUser.connectionString)
            Me.txtRowID.Text = intRowID

            setFormState(formStateType.newPending)


        End Sub
    End Class

     

    [/code]

  • Code to Populate a FormObjects Collection

    Code for the object 

     Public Class formObject
        Public Name As String
        Public Type As String
        Public Control As Control
        Public Tag As String = ""
    
    
        Sub New(ByVal name As String, ByVal type As String, ByVal control As Control, ByVal tag As String)
            Me.Name = name
            Me.Type = type
            Me.Control = control
    
    
            If Not String.IsNullOrEmpty(tag) Then
                Me.Tag = tag
            End If
        End Sub
    End Class
     

    'at the form level:
    Dim formObjects As New List(Of formObject)
    Dim bDirty As Boolean
    
    
    
    
         Sub populateFormObjectsCollection()
            Dim o As formObject
            'load the form fields into a collection
    
    
    
            For Each c As Control In Me.Controls
                Select Case Microsoft.VisualBasic.Left(c.Name, 3).ToUpper
                    Case "TXT", "DDL", "BTN"
                        o = New formObject(c.Name, Microsoft.VisualBasic.Left(c.Name, 3).ToUpper, c, c.Tag)
                        formObjects.Add(o)
                End Select
            Next
    
    
    
    For Each o In formObjects
        Select Case o.Tag.ToUpper
            Case "KEY"
            Case "NOENABLE"
            Case Else
                AddHandler o.Control.TextChanged, AddressOf TextChangedEvent
                AddHandler o.Control.Validating, AddressOf ValidatingEvent
        End Select
    Next
    
    
    
        End Sub

    Code for the event handler

     Private Sub TextChangedEvent(ByVal sender As Object, ByVal e As System.EventArgs)
        Select Case Me.FormState
            Case formStateType.clean, formStateType.populated
                bDirty = True
                Me.txtStatus1.Text = "Dirty"
        End Select
    End Sub
    Private Sub ValidatingEvent(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs)
        If bDirty Then
    
    
            'the user has changed the value in a field other than Product Number
    
    
            Select Case Me.FormState
                Case formStateType.loading
                    Exit Sub
                Case formStateType.clean
                    globalMessageBox("Please choose a Project first")
    
    
                Case formStateType.populated
                    setFormState(formStateType.dirty)
                Case formStateType.dirty
    
    
            End Select
    
    
            bDirty = False
        End If
    End Sub

More Posts Next page »