none
VB 關於Structure與sortedlist RRS feed

  • 問題

  • 由於最近剛學vb,還有好多不懂的地方,看了很多MSDN還是無法理解>< 請求各位高手指點!!!

    我想要做出一個客戶清單(清單裡會有很多筆客戶資料)>每一個客戶有客戶編號(我將此設為主鍵)>每個客戶會有所有家人的基本資料。

    而我目前是使用架構,並想用sortedlist達到主鍵及排序的功能,以下是我的程式碼(因為家庭基本資料要存取的值很多,以下我只列出幾個基本資料的項目)

    假設我要新增一個客戶,同時先記錄該客戶(爸爸)的基本資料,之後再存取媽媽、小孩的基本資料(爸爸跟媽媽、小孩的資料存取時間點不同)

    1.我的困難是我新增了一個客戶(產生主鍵aaa),並同時輸入爸爸的資料,而之後再透過點選button存取該客戶(主鍵aaa)的老婆、小孩時,若client_data_str(0)時,爸爸的資料會被覆蓋過去,若client_data_str(1)時會出現錯誤 ,但是我需要存三筆client_data_str(),我該修改呢?

    我有嘗試redim client_data_list(num).client_data_str(2) 但是他會出現 「運算是是一個數值,不可以是指派的目標」

    2.有一個地方我想詢問,在巢狀結構這行Public client_data_str() As client_data_Str ,是因為巢狀結構,所以才要打上括號嗎?

    不太清楚Public client_data_str() As client_data_Str  與Public client_data_str  As client_data_Str  的差別


    -------------------------------------------------

    Module Module1

        Structure client_total '客戶資料
            Public client_number As String '客戶編號
            Public client_data_str() As client_data_Str '家庭成員資料
        End Structure

        Structure client_data_Str '基本資料
            Public name As String '姓名
            Public sex As String  '性別
            Public birthday As Date  '生日
            Public age As Integer  '年齡 (歲)
        End Structure

        Public client_data_list As New SortedList(Of String, client_total) '因為不同的form都會用到,所以我把它存在模組裡
        Public num As String

    End Module

    '在form1時,新增該筆客戶

            Private Sub Button_insert_Click(sender As Object, e As EventArgs) Handles Button_insert.Click
            If TextBox_name.Text = "" Or TextBox_number.Text = "" Then
                MessageBox.Show("請輸入姓名及編號")
                Exit Sub
            End If
            If IsNothing(client_data_list) Then
                num = TextBox_number.Text '將客戶編號存為全域變數
                client_data_list.Add(TextBox_number.Text, New client_total With
                                                     {.client_number = TextBox_number.Text,
                                                     .client_data_str = {New client_data_Str With {.name = TextBox_name.Text}}})
            Else
                If client_data_list.ContainsKey(TextBox_number.Text) Then
                    MessageBox.Show("資料已經存在")
                    Exit Sub
                Else
                    num = TextBox_number.Text '將客戶編號存為全域變數
                    client_data_list.Add(TextBox_number.Text, New client_total With
                                                         {.client_number = TextBox_number.Text,
                                                         .client_data_str = {New client_data_Str With {.name = TextBox_name.Text}}})
                End If
            End If
        End Sub


    '在form2時,新增該客戶的老婆小孩資料

        Private Sub Button_insert_Click(sender As Object, e As EventArgs) Handles Button_insert.Click

               client_data_list(num).client_data_str(0) = New client_data_Str With {.name =Textbox1.text,
                                                                                                                .sex = TextBox2.text}

                                                               
        End Sub

        


    • 已編輯 YU_TING 2015年10月13日 下午 05:28
    2015年10月13日 下午 05:27

解答

所有回覆