JerryB
JerryB

Reputation: 11

How To Access Data In A Class Within A Class With VB.NET

I am relatively new to VB.NET Classes that define data structures. Also the terminology is a little unfamiliar.

I have defined the following Class structures:

Public Class CatalogInfoDef
    Public CatalogName As String
    Public CatalogYear As String
    Public CatalogNumber As String
End Class

Public Class ParameterDef
    Public Country As String
    Public GeographicArea As String
    Public Catalogs As List(Of CatalogInfoDef)
    Public Class IssueDate
        Public Month As String
        Public Day As String
        Public Year As String
    End Class
    Public Class Size
        Public Width As String
        Public Height As String
    End Class
    Public Printer As String
    Public SearchKeywords As List(Of String)
    Public Class OtherInfo
       Public Condition As String
       Public PrintMethod As String
    End Class
End Class

In the Main Form I have the definition: Private ParameterInfo as New ParameterDef

I am able to insert data into the fields that are in the main Class, Country, etc.. However, I am having problems inserting data into fields such as: IssueDate (Month, Day, Year).

How do I access the data in these Class fields? Am I missing some parameter? Is there a better way to define ParameterDef?

Upvotes: 1

Views: 114

Answers (1)

David
David

Reputation: 6111

What you're doing is defining classes within a class when it sounds like you want to define a property of a custom class. Something more along the lines of:

Public Class ParameterDef
    Public Property Country As String
    Public Property GeographicArea As String
    Public Property Catalogs As List(Of CatalogInfoDef)
    Public Property IssueDate As DateTime
    Public Property Size As Size
    Public Property Printer As String
    Public Property SearchKeywords As List(Of String)
    Public Property OtherInfo As OtherInfo
End Class

Public Class OtherInfo
   Public Condition As String
   Public PrintMethod As String
End Class

Then when you go to set the properties it would be:

Private ParameterInfo as New ParameterDef() With {
    .Country = "...",
    .GeographicArea = "..."
    .Catalogs = New CatalogInfoDef() With {
        .CatalogName = "...",
        .CatalogYear = "...",
        .CatalogNumber = "..."
    },
    .IssueDate = New DateTime(year, month, day) ' replace with actual values
    .Size = New Size(width, height) ' replace with actual values
    .Printer = "...",
    .SearchKeywords = New List(Of String)(),
    .OtherInfo = New OtherInfo() With {
        .Condition = "...",
        .PrintMethod = "..."
    }
}

Also, notice how I removed your custom Date and Size class. This is because those classes already exist in the System and System.Drawing namespaces respectively.

Upvotes: 1

Related Questions