none
基本VB問題請教 RRS feed

  • 問題

  •  

     

         大家好,請各位大大 有一個小小問題  

     

         小弟底下寫得方式能不能請大大們 教我一下 如何把他更經簡化呢?

     

        麻煩各位大大感謝您

        Private LB As Label() = New Label() {LB_0, LB_1, LB_2, LB_3, LB_4, LB_5, LB_6, LB_7, LB_8, LB_9, LB_10, LB_11, LB_12}

        Private LV As Label() = New Label() {LV_0, LV_1, LV_2, LV_3, LV_4, LV_5, LV_6, LV_7, LV_8, LV_9, LV_10, LV_11, LV_12}

        Enum lbIdx

            nW = 0

            nVAR = 1

            nVA = 2

            nRV = 3

            nSV = 4

            nTV = 5

            nRI = 6

            nSI = 7

            nTI = 8

            nWH_0 = 9

            nWH_1 = 10

            nWH_2 = 11

            nWH_3 = 12

        End Enum

     Dim PMName As String = Me.txtPMNumber.Text.Trim

            For I As Integer = 0 To pPLC.TagData.Count - 1

                If pPLC.TagData(I).TagNumber = PMName Then

                    For J As Integer = 0 To LB.Length - 1

                        Select Case LB.Length

                            Case lbIdx.nW : LB(lbIdx.nW).Text = pPLC.TagData(I).TagData(J).ToString

                            Case lbIdx.nVAR : LB(lbIdx.nVAR).Text = pPLC.TagData(I).TagData(J).ToString

                            Case lbIdx.nVA : LB(lbIdx.nVA).Text = pPLC.TagData(I).TagData(J).ToString

                            Case lbIdx.nRV : LB(lbIdx.nRV).Text = pPLC.TagData(I).TagData(J).ToString

                            Case lbIdx.nSV : LB(lbIdx.nSV).Text = pPLC.TagData(I).TagData(J).ToString

                            Case lbIdx.nTV : LB(lbIdx.nTV).Text = pPLC.TagData(I).TagData(J).ToString

                            Case lbIdx.nRI : LB(lbIdx.nRI).Text = pPLC.TagData(I).TagData(J).ToString

                            Case lbIdx.nSI : LB(lbIdx.nSI).Text = pPLC.TagData(I).TagData(J).ToString

                            Case lbIdx.nTI : LB(lbIdx.nTI).Text = pPLC.TagData(I).TagData(J).ToString

                            Case lbIdx.nWH_0 : LB(lbIdx.nWH_0).Text = pPLC.TagData(I).TagData(J).ToString

                            Case lbIdx.nWH_1 : LB(lbIdx.nWH_1).Text = pPLC.TagData(I).TagData(J).ToString

                            Case lbIdx.nWH_2 : LB(lbIdx.nWH_2).Text = pPLC.TagData(I).TagData(J).ToString

                            Case lbIdx.nWH_3 : LB(lbIdx.nWH_3).Text = pPLC.TagData(I).TagData(J).ToString

                        End Select

                    Next J

                    Exit For

                End If

            Next I

    2011年2月5日 上午 11:54

解答

  • (1)依照你以下的程式碼來看

     For J As Integer = 0 To LB.Length - 1

                        Select Case LB.Length

                            Case lbIdx.nW : LB(lbIdx.nW).Text = pPLC.TagData(I).TagData(J).ToString

                            Case lbIdx.nVAR : LB(lbIdx.nVAR).Text = pPLC.TagData(I).TagData(J).ToString

                            Case lbIdx.nVA : LB(lbIdx.nVA).Text = pPLC.TagData(I).TagData(J).ToString

                            Case lbIdx.nRV : LB(lbIdx.nRV).Text = pPLC.TagData(I).TagData(J).ToString

                            Case lbIdx.nSV : LB(lbIdx.nSV).Text = pPLC.TagData(I).TagData(J).ToString

                            Case lbIdx.nTV : LB(lbIdx.nTV).Text = pPLC.TagData(I).TagData(J).ToString

                            Case lbIdx.nRI : LB(lbIdx.nRI).Text = pPLC.TagData(I).TagData(J).ToString

                            Case lbIdx.nSI : LB(lbIdx.nSI).Text = pPLC.TagData(I).TagData(J).ToString

                            Case lbIdx.nTI : LB(lbIdx.nTI).Text = pPLC.TagData(I).TagData(J).ToString

                            Case lbIdx.nWH_0 : LB(lbIdx.nWH_0).Text = pPLC.TagData(I).TagData(J).ToString

                            Case lbIdx.nWH_1 : LB(lbIdx.nWH_1).Text = pPLC.TagData(I).TagData(J).ToString

                            Case lbIdx.nWH_2 : LB(lbIdx.nWH_2).Text = pPLC.TagData(I).TagData(J).ToString

                            Case lbIdx.nWH_3 : LB(lbIdx.nWH_3).Text = pPLC.TagData(I).TagData(J).ToString

                        End Select

                    Next J

                    Exit For

    以上這些不就是

     For J As Integer = 0 To LB.Length - 1

               LB(J).Text=pPLC.TagData(I).TagData(J).ToString

    Next J

    這樣而已嗎 ? 幹嘛要弄個Case在裡面 ?

    (2) 看起來你這像是從設備端讀資料回來後去更新畫面上的Label 控制項, 比較理想的寫法應該考慮使用自訂的事件來更新控制項, 因為如果你畫面上有50個控制項, 卻只有一個資料有改變,

         你卻要更新50個控制項似乎不太經濟. 提示就是,你應該自訂一個屬性去存這些數值在記憶體, 並在屬性的Set中去引發自訂事件.

         對於Visual Basic的事件問題, 請詳閱[事件 (Visual Basic) ] 與其所列之相關章節


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

所有回覆

  • (1)依照你以下的程式碼來看

     For J As Integer = 0 To LB.Length - 1

                        Select Case LB.Length

                            Case lbIdx.nW : LB(lbIdx.nW).Text = pPLC.TagData(I).TagData(J).ToString

                            Case lbIdx.nVAR : LB(lbIdx.nVAR).Text = pPLC.TagData(I).TagData(J).ToString

                            Case lbIdx.nVA : LB(lbIdx.nVA).Text = pPLC.TagData(I).TagData(J).ToString

                            Case lbIdx.nRV : LB(lbIdx.nRV).Text = pPLC.TagData(I).TagData(J).ToString

                            Case lbIdx.nSV : LB(lbIdx.nSV).Text = pPLC.TagData(I).TagData(J).ToString

                            Case lbIdx.nTV : LB(lbIdx.nTV).Text = pPLC.TagData(I).TagData(J).ToString

                            Case lbIdx.nRI : LB(lbIdx.nRI).Text = pPLC.TagData(I).TagData(J).ToString

                            Case lbIdx.nSI : LB(lbIdx.nSI).Text = pPLC.TagData(I).TagData(J).ToString

                            Case lbIdx.nTI : LB(lbIdx.nTI).Text = pPLC.TagData(I).TagData(J).ToString

                            Case lbIdx.nWH_0 : LB(lbIdx.nWH_0).Text = pPLC.TagData(I).TagData(J).ToString

                            Case lbIdx.nWH_1 : LB(lbIdx.nWH_1).Text = pPLC.TagData(I).TagData(J).ToString

                            Case lbIdx.nWH_2 : LB(lbIdx.nWH_2).Text = pPLC.TagData(I).TagData(J).ToString

                            Case lbIdx.nWH_3 : LB(lbIdx.nWH_3).Text = pPLC.TagData(I).TagData(J).ToString

                        End Select

                    Next J

                    Exit For

    以上這些不就是

     For J As Integer = 0 To LB.Length - 1

               LB(J).Text=pPLC.TagData(I).TagData(J).ToString

    Next J

    這樣而已嗎 ? 幹嘛要弄個Case在裡面 ?

    (2) 看起來你這像是從設備端讀資料回來後去更新畫面上的Label 控制項, 比較理想的寫法應該考慮使用自訂的事件來更新控制項, 因為如果你畫面上有50個控制項, 卻只有一個資料有改變,

         你卻要更新50個控制項似乎不太經濟. 提示就是,你應該自訂一個屬性去存這些數值在記憶體, 並在屬性的Set中去引發自訂事件.

         對於Visual Basic的事件問題, 請詳閱[事件 (Visual Basic) ] 與其所列之相關章節


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    2011年2月5日 下午 03:20
    版主
  • 電力監測系統?用 485 比 PLC 多吧?

    你這個 SELECT CASE 看起來直接省掉即可~

                        Select Case LB.Length

                            Case lbIdx.nW : LB(lbIdx.nW).Text = pPLC.TagData(I).TagData(J).ToString

                            Case lbIdx.nVAR : LB(lbIdx.nVAR).Text = pPLC.TagData(I).TagData(J).ToString

    改成

    LB(LB.Length).Text = pPLC.TagData(I).TagData(J).ToString

     


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2011年2月5日 下午 03:20