none
一些有關變數的問題 RRS feed

  • 問題

  • 大家好><

    或許對各位是很簡單的常識問題但真的需要幫助

    最近寫一個程式裡面會需要用到幾個相似的成員

    如:班上的學生

    他們名字不同性別不同等等

    所以我便創一個structure是學生的

    但我的設計是讓使用者在打開介面後輸入學生數量

    再去創新的學生資料

    EX:(label)學生數量:(textbox)3

    然後就DIM 3次創造三個學生變數

    但是如果我用for迴圈來寫只要在end for之後這3的DIM出來的變數就不能使用了

    如果我想要達成我想要的效果的話

    我有想到用array,學生有幾個要素就創幾個array

    但structure不能達成我想要的效果嗎?

    還是有其他方式呢?

    感謝各位!

    2016年6月21日 上午 11:05

解答

  • 關於 "只要在end for之後這3的DIM出來的變數就不能使用了", 原因如 心冷熱情熄 前輩所述.
    關於 "學生有幾個要素就創幾個array", 個人建議用 List 或是 Dictionary 之類的物件來作比較方便.
    另外, 個人使用 Structure 有遇過一些限制, 所以通常使用 Class 取代 Structure, 僅供參考.
    http://www.blueshop.com.tw/board/show.asp?subcde=BRD20120707222017W1V&fumcde=BRD20120707222017W1V
    以下簡單 demo 使用 List 的用法供參考:

        Class Student
            Public Name As String '姓名
            Public Sex As CheckState  '性別,定義:Checked=男,Unchecked=女,Indeterminate=以後再說.
            '其他... 
        End Class
    
        Dim Demo As New List(Of Student)
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            '加入三個 Student
            For i As Integer = 1 To 3
                Demo.Add(New Student)
            Next
    
            '設定第1位學生資料
            With Demo(0)
                .Name = "蒂德莉特"
                .Sex = CheckState.Unchecked
                '其他...
            End With
    
            '取得第1位學生資料
            With Demo(0)
                MsgBox(.Name & Choose(.Sex + 1, "是女生", "是男生", "還在考慮性別"))
    
            End With
    
        End Sub


    Ader

    2016年6月22日 上午 12:29
  • 這種學生資料不是都用結構陣列嗎?

    Public Structure StudentData
            Dim _name As String
            Dim sex As String
            Dim number As Integer
            Dim score As Single

        ........

         End Structure

    使用時

      Dim a(29) As StudentData '30個學生
            a(0)._name = "a"  '再來輸入每個學生在這個結構的資料

    讀取資料時

     TextBox1.Text = a(0)._name

    2016年6月22日 上午 01:23
  • 老實說, 在 .NET 的環境下, 我會建議你用類別而非結構定義資料. 當你對實值型別和參考型別的差異不這麼熟的時候, 用結構常常會把自己搞混.

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2016年6月22日 上午 06:37
    版主

所有回覆

  • 使用 VB6 還是 VB.NET ?

    若是 VB.NET, 可以使用 List(T)類別, 很方便的增加移除元素(例如 Structure 等)
    https://msdn.microsoft.com/zh-tw/library/6sh2ey19(v=vs.90).aspx?cs-save-lang=1&cs-lang=vb#code-snippet-1


    Ader

    2016年6月21日 上午 11:49
  • 

    我是選範本=>其他語言=>visual basic=>windows=>windows form應用程式

    其實我不知道NET和6差在哪裡XD
    剛學一小段時間而已

    LIST我去研究一下如果有問題再麻煩你幫我解答XD

    感謝!!!

    此外,因為換新電腦所以重裝VB

    但這次安裝完之後發現編譯程式碼那邊

    最上頭應該會有選擇物件的事項選擇區才對(就是選擇Button click之類的東西)

    但是他不見了!!!!

    GOOGLE很久也沒看到...可否跟我說要去哪裡打開他...><

    2016年6月21日 下午 01:18
  • 聽起來是 VB.NET, 不過猜不出是 Visual Studio 2003/2005/2008/2010/2012/2013/2015?
    下圖是 2015 的功能表 [工具]、[選項]、[文字編輯器]、[Basic],將 [導覽列] 打勾就可以了.


    Ader

    2016年6月21日 下午 03:28
  • 把老師教的 變數生命週期 這段重看一遍

    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    2016年6月21日 下午 05:02
  • 關於 "只要在end for之後這3的DIM出來的變數就不能使用了", 原因如 心冷熱情熄 前輩所述.
    關於 "學生有幾個要素就創幾個array", 個人建議用 List 或是 Dictionary 之類的物件來作比較方便.
    另外, 個人使用 Structure 有遇過一些限制, 所以通常使用 Class 取代 Structure, 僅供參考.
    http://www.blueshop.com.tw/board/show.asp?subcde=BRD20120707222017W1V&fumcde=BRD20120707222017W1V
    以下簡單 demo 使用 List 的用法供參考:

        Class Student
            Public Name As String '姓名
            Public Sex As CheckState  '性別,定義:Checked=男,Unchecked=女,Indeterminate=以後再說.
            '其他... 
        End Class
    
        Dim Demo As New List(Of Student)
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            '加入三個 Student
            For i As Integer = 1 To 3
                Demo.Add(New Student)
            Next
    
            '設定第1位學生資料
            With Demo(0)
                .Name = "蒂德莉特"
                .Sex = CheckState.Unchecked
                '其他...
            End With
    
            '取得第1位學生資料
            With Demo(0)
                MsgBox(.Name & Choose(.Sex + 1, "是女生", "是男生", "還在考慮性別"))
    
            End With
    
        End Sub


    Ader

    2016年6月22日 上午 12:29
  • 這種學生資料不是都用結構陣列嗎?

    Public Structure StudentData
            Dim _name As String
            Dim sex As String
            Dim number As Integer
            Dim score As Single

        ........

         End Structure

    使用時

      Dim a(29) As StudentData '30個學生
            a(0)._name = "a"  '再來輸入每個學生在這個結構的資料

    讀取資料時

     TextBox1.Text = a(0)._name

    2016年6月22日 上午 01:23
  • 如果你的學生數量由使用者決定,可以在建立結構陣列變數時,根據(Textbox)3來決定陣列長度。

    如 Dim a(Val(TextBox.Text)-1) AS StudentData

    2016年6月22日 上午 01:28
  • 老實說, 在 .NET 的環境下, 我會建議你用類別而非結構定義資料. 當你對實值型別和參考型別的差異不這麼熟的時候, 用結構常常會把自己搞混.

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2016年6月22日 上午 06:37
    版主
  • 有出來了!!!!!!!!

    太感謝你了><

    2016年6月22日 上午 10:34
  • 歐布...其實老師沒有教XD

    看完有些了解了~感謝!!!

    2016年6月22日 上午 10:35
  • 學習學習中!!感恩!

    又多一個dictionary要學了XD

    2016年6月22日 上午 10:40
  • 挖屋!原來結構也可以做成陣列喔!

    學到了><感恩!!

    2016年6月22日 上午 10:41
  • 你有用 System.Int32 吧 ? System.Int32 就是結構 .

    基本上 .Net Framework 的型別分為幾種

    (1) 實值型別 : 結構與列舉

    (2) 參考型別 : 類別, 介面, 委派


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2016年6月22日 下午 12:06
    版主