Hi.
I would welcome any help with a project I have to work on - my first time trying to use a class. The code for the class and the form (less the VB generated info) is pasted below.
The program must use a class (Animal) to average values that are entered on a form via text boxes.
The problem I have is that the value of the second textbox (txtWeight2) is not being added to the first textbox value (txtWeight1), rather the first value is simply being divided by 2 in the Average function.
So for example if I type 10 for the first value and 20 for the second value, the average should be 15, but the output displays 5 (the first value is just being halved).
Thanks much from a somewhat struggling newcomer,
kyma
The code that I have for the Animal class:
Public Class cAnimal
'Class Name: cAnimal
'Description: Handles animal information
#Region "Properties"
'Member variables
Private mstrName1, mstrName2 As String
Private mdecWeight1, mdecWeight2 As Decimal
Private mblnWeightError1, mblnWeightError2 As Boolean
Property Name1() As String
Get
Return mstrName1
End Get
Set(ByVal Value As String)
mstrName1 = Value
End Set
End Property
Property Name2() As String
Get
Return mstrName2
End Get
Set(ByVal Value As String)
mstrName2 = Value
End Set
End Property
Property Weight1() As Decimal
Get
Return mdecWeight1
End Get
Set(ByVal Value As Decimal)
If Value > 0 Then
mdecWeight1 = Value
mblnWeightError1 = False
Else
MessageBox.Show("Weight must be greater than 0", "Error")
mblnWeightError1 = True
End If
End Set
End Property
Property Weight2() As Decimal
Get
Return mdecWeight2
End Get
Set(ByVal Value As Decimal)
If Value > 0 Then
mdecWeight2 = Value
mblnWeightError2 = False
Else
MessageBox.Show("Weight must be greater than 0", "Error")
mblnWeightError2 = True
End If
End Set
End Property
ReadOnly Property WeightFlag1() As Boolean
Get
Return mblnWeightError1
End Get
End Property
ReadOnly Property WeightFlag2() As Boolean
Get
Return mblnWeightError2
End Get
End Property
#End Region
#Region "Methods"
'Sub New() is a constructor.
'Constructors are executed when an object of the class is created.
'Constructors are used for initializing member variables.
Public Sub New()
mstrName1 = ""
mdecWeight1 = 0
mblnWeightError1 = False
mstrName2 = ""
mdecWeight2 = 0
mblnWeightError2 = False
End Sub
'Other class methods
Public Sub Clear()
mstrName1 = ""
mdecWeight1 = 0
mblnWeightError1 = False
mstrName2 = ""
mdecWeight2 = 0
mblnWeightError2 = False
End Sub
Public Function Average() As Decimal
Dim decAverage As Decimal
decAverage = (mdecWeight1 + mdecWeight2) / 2
Return decAverage
End Function
#End Region
End Class
The code that I have for the form:
Option Strict On
Imports System.Convert
Public Class frmLab3amk
Inherits System.Windows.Forms.Form
#Region " Windows Form Designer generated code "
' snipped code
#End Region
'Declare and instantiate a variable to be an object of Animal class type
Dim mAnimal As New cAnimal
Private Sub btnAverageWeight_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAverageWeight.Click
Try
mAnimal.Name1 = txtAnimal1.Text
'Try...Catch will not invalidate zero-length strings assigned
'to another variable of string data type.
If mAnimal.Name1 = "" Then
MessageBox.Show("Must enter a valid animal id", "Error")
txtAnimal1.Focus()
Exit Sub
End If
mAnimal.Weight1 = ToDecimal(txtWeight1.Text)
Catch
MessageBox.Show("Error in Weight field", "Error")
txtWeight1.Focus()
Exit Sub
Try
mAnimal.Name2 = txtAnimal2.Text
'Try...Catch will not invalidate zero-length strings assigned
'to another variable of string data type.
If mAnimal.Name2 = "" Then
MessageBox.Show("Must enter a valid animal id", "Error")
txtAnimal2.Focus()
Exit Sub
End If
mAnimal.Weight2 = ToDecimal(txtWeight2.Text)
Catch
MessageBox.Show("Error in Weight field", "Error")
txtWeight2.Focus()
Exit Sub
End Try
End Try
'Display average only if input data is valid
'Use class member variables to check validity
If Not mAnimal.WeightFlag1 Then
If Not mAnimal.WeightFlag2 Then
lblOutput.Text = Format(mAnimal.Average)
End If
End If
End Sub
Private Sub btnClear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClear.Click
'Clear the object
'Clear the text boxes
mAnimal.Clear()
Call Clear()
End Sub
Private Sub Clear()
'Clears the form's controls
txtAnimal1.Clear()
txtWeight1.Clear()
txtAnimal2.Clear()
txtWeight2.Clear()
lblOutput.Text = Nothing
End Sub
Private Sub btnQuit_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnQuit.Click
Me.Close()
End Sub
End Class
I would welcome any help with a project I have to work on - my first time trying to use a class. The code for the class and the form (less the VB generated info) is pasted below.
The program must use a class (Animal) to average values that are entered on a form via text boxes.
The problem I have is that the value of the second textbox (txtWeight2) is not being added to the first textbox value (txtWeight1), rather the first value is simply being divided by 2 in the Average function.
So for example if I type 10 for the first value and 20 for the second value, the average should be 15, but the output displays 5 (the first value is just being halved).
Thanks much from a somewhat struggling newcomer,
kyma
The code that I have for the Animal class:
Public Class cAnimal
'Class Name: cAnimal
'Description: Handles animal information
#Region "Properties"
'Member variables
Private mstrName1, mstrName2 As String
Private mdecWeight1, mdecWeight2 As Decimal
Private mblnWeightError1, mblnWeightError2 As Boolean
Property Name1() As String
Get
Return mstrName1
End Get
Set(ByVal Value As String)
mstrName1 = Value
End Set
End Property
Property Name2() As String
Get
Return mstrName2
End Get
Set(ByVal Value As String)
mstrName2 = Value
End Set
End Property
Property Weight1() As Decimal
Get
Return mdecWeight1
End Get
Set(ByVal Value As Decimal)
If Value > 0 Then
mdecWeight1 = Value
mblnWeightError1 = False
Else
MessageBox.Show("Weight must be greater than 0", "Error")
mblnWeightError1 = True
End If
End Set
End Property
Property Weight2() As Decimal
Get
Return mdecWeight2
End Get
Set(ByVal Value As Decimal)
If Value > 0 Then
mdecWeight2 = Value
mblnWeightError2 = False
Else
MessageBox.Show("Weight must be greater than 0", "Error")
mblnWeightError2 = True
End If
End Set
End Property
ReadOnly Property WeightFlag1() As Boolean
Get
Return mblnWeightError1
End Get
End Property
ReadOnly Property WeightFlag2() As Boolean
Get
Return mblnWeightError2
End Get
End Property
#End Region
#Region "Methods"
'Sub New() is a constructor.
'Constructors are executed when an object of the class is created.
'Constructors are used for initializing member variables.
Public Sub New()
mstrName1 = ""
mdecWeight1 = 0
mblnWeightError1 = False
mstrName2 = ""
mdecWeight2 = 0
mblnWeightError2 = False
End Sub
'Other class methods
Public Sub Clear()
mstrName1 = ""
mdecWeight1 = 0
mblnWeightError1 = False
mstrName2 = ""
mdecWeight2 = 0
mblnWeightError2 = False
End Sub
Public Function Average() As Decimal
Dim decAverage As Decimal
decAverage = (mdecWeight1 + mdecWeight2) / 2
Return decAverage
End Function
#End Region
End Class
The code that I have for the form:
Option Strict On
Imports System.Convert
Public Class frmLab3amk
Inherits System.Windows.Forms.Form
#Region " Windows Form Designer generated code "
' snipped code
#End Region
'Declare and instantiate a variable to be an object of Animal class type
Dim mAnimal As New cAnimal
Private Sub btnAverageWeight_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAverageWeight.Click
Try
mAnimal.Name1 = txtAnimal1.Text
'Try...Catch will not invalidate zero-length strings assigned
'to another variable of string data type.
If mAnimal.Name1 = "" Then
MessageBox.Show("Must enter a valid animal id", "Error")
txtAnimal1.Focus()
Exit Sub
End If
mAnimal.Weight1 = ToDecimal(txtWeight1.Text)
Catch
MessageBox.Show("Error in Weight field", "Error")
txtWeight1.Focus()
Exit Sub
Try
mAnimal.Name2 = txtAnimal2.Text
'Try...Catch will not invalidate zero-length strings assigned
'to another variable of string data type.
If mAnimal.Name2 = "" Then
MessageBox.Show("Must enter a valid animal id", "Error")
txtAnimal2.Focus()
Exit Sub
End If
mAnimal.Weight2 = ToDecimal(txtWeight2.Text)
Catch
MessageBox.Show("Error in Weight field", "Error")
txtWeight2.Focus()
Exit Sub
End Try
End Try
'Display average only if input data is valid
'Use class member variables to check validity
If Not mAnimal.WeightFlag1 Then
If Not mAnimal.WeightFlag2 Then
lblOutput.Text = Format(mAnimal.Average)
End If
End If
End Sub
Private Sub btnClear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClear.Click
'Clear the object
'Clear the text boxes
mAnimal.Clear()
Call Clear()
End Sub
Private Sub Clear()
'Clears the form's controls
txtAnimal1.Clear()
txtWeight1.Clear()
txtAnimal2.Clear()
txtWeight2.Clear()
lblOutput.Text = Nothing
End Sub
Private Sub btnQuit_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnQuit.Click
Me.Close()
End Sub
End Class