# 基本VB問題請教

• ### 問題

•

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

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

麻煩各位大大感謝您

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