2013-11-27 62 views
0

我想知道是否可以使用與另一個函數的控件相關聯的方法。例如,從另一個函數調用控件方法vb.net

Sub myCheckBox(sender As Object, e As EventArgs) Handles myCheckBox.CheckedChanged 
'''Code I want to run from other function 
End Sub 

Function MyOtherFunction(x as double, y as double) as double 
'''Call myCheckBox method 
End function 

回答

0

在事件中限制代碼以處理與用戶有關的事情通常是明智的。您可以將常用的代碼在潛艇和事件,其他方法(替補)等函數調用它們:

Sub myCheckBox(sender As Object, e As EventArgs) Handles myCheckBox.CheckedChanged 
    ' user/click related code 
    ' ... 
    CommonReusableCodeSub(sender As object) 
    End Sub 

    Function MyOtherFunction(x as double, y as double) as double 
    ' do some special stuff, maybe even just to prep 
    ' for the call to a common sub 
    CommonReusableCodeSub(Nothing) 
    End function 

    Sub CommonReusableCodeSub(chk as CheckBox) ' can also be a function 
     ' do stuff common to both above situations 

     ' note how to detect what is going on: 
     If chk Is Nothing then 
     ' was called from code, not event 
     ' do whatever 
     Exit Sub  ' probably 
     End If 

     Select Case chk.Name  ' or maybe chk.Tag 
      chk.thisOption 
      ' do whatever 
      chk.thatOption 
      ' do whatever 
      ' etc... 
     End Select 

    End Sub 

這可以防止應用程序邏輯(業務/網絡等等等等),從得到絕望混雜,甚至依賴於UI層和當前佈局。注意:一些控件實現了一種調用事件代碼的方式:例如按鈕和收音機有一個btn.PerformClick,複選框沒有這樣的運氣。

+0

謝謝你的快速回復,我很欣賞你在哪裏到來。然而,在這種情況下,我有很多需要「刷新」的複選框,即。他們的代碼在無線電切換改變時運行。事情設置的方式我循環通過複選框確定哪些被檢查,然後需要運行每個複選框的方法。 –

+0

仍然有點抽象...看到編輯(複選框真的是一個收音機?) – Plutonix

+0

「複選框真的是一個收音機」 - 沒有什麼是一個圖形應用程序,其中有10個複選框顯示不同的曲線和一個操作曲線的單選按鈕,所以當用戶改變收音機切換時,我需要刷新曲線。 –

1

假設的WinForms:

Dim cbs = Me.Controls.OfType(Of Checkbox)().Where(Function(cb) cb.Checked).ToList() 
For Each cb In cbs 
    'run code for each checkbox that is checked 
Next 
+0

對,就是我到目前爲止,現在我需要爲每個cb運行該方法。 –

+0

@KyleTrainor你正在考慮這個錯誤:你想要運行的代碼根本不是一個'方法',而是事件代碼:代碼旨在當用戶與控件交互時執行。您的代碼(例如執行計算)不應該僅僅依賴於該點擊並且不應該駐留在點擊事件中。 – Plutonix

+0

你需要給我們更多的細節,在這一點上沒有什麼意義。什麼功能?它有什麼作用? '檢查哪個複選框'如何做一些計算?請更新您的問題,而不是評論。 – OneFineDay

相關問題