2014-06-21 74 views
0

我有2種形式:街道和地址 我想定義一個變量在他們每一個具有相同的名稱,以便當我從一個過程調用任何形式無論使用哪種形式,我都可以使用該變量。如何通過/參考形式類參數到/從其他程序

例如,街道的形式是這樣的

Public Class Street 

    Public ID As Integer = 0 

    Private Sub LoadForm() 
    Dim myID As integer = ID 
    End Sub 

End Class 

和地址的形式應該是這樣的:

Public Class Address 

    Public ID As Integer = 0 

    Private Sub LoadForm() 
    Dim myID As integer = ID 
    End Sub 

End Class 

我ParentMDI菜單是:

Private Sub AddressClick() 
    Call Address(Address) 
End Sub 

Private Sub StreetClick() 
    Call Address(Street) 
End Sub 

和具有打開表單的過程的模塊如下所示:

Module Caller 

    Public Sub Address(ByVal frm As Form) 
    '...several codes here 
    If IamHappy Then 
     frm.ID = 2'this is illegal because ID is not part of form parameters 
    Else 
     frm.ID = 3'this is illegal because ID is not part of form parameters 
    End if 
    frm.show() 
    End Sub 

End Module 

基本上,我不想菜單做'辛勤工作',因爲窗體可以從幾個不同的菜單/來源調用。我希望模塊中的公共過程是一個負責在打開它之前從我的窗體參數中賦值的人。

我已經看過如何發送一個類作爲參數的討論,但是這並不能幫助我在表單類中獲得聲明值「ID」。我在想可能有辦法創建我自己的變量來成爲我的表單的一部分?或者採用哪種方法來實現這一點。

編輯提供一些更多的信息

  1. 一個單獨的登錄過程會爲我設置一個公共用戶名
  2. MDI菜單想告訴我形成了用戶想要登錄
  3. 後打開
  4. 來電模塊假設將請求的格式爲 的信息與用戶的ID結合起來。
  5. a)在打開表單之前設置表單的狀態,例如,如果表單標籤= 2,那麼不要爲該用戶打開它(我可以直到此處),b)使用調用者模塊設置表單的狀態,然後繼續並打開它。這是問題所在。例如,我想設置printID爲1 =用戶可以打印;或2,用戶不應該打印。

我想管理4. b)在公開聲明的模塊中而不是在菜單中或在特定的表格中,因爲我在這個應用程序中有很多形式。

除非有這更好的方式比我如何接近它...

感謝。

回答

1

System.Windows.Forms.Form沒有ID屬性。當您致電地址小組時,您正在將您的AddressStreet表格重新轉換爲簡單的表格。你可以寫在它ID的基類的形式,並有地址和街道從它繼承,則:

Public Sub Address(ByVal frm As MDIChildBase) 

或者你可以使用過載:

Public Sub Address(ByVal frm As Address) 

    Public Sub Address(ByVal frm As Street) 

這將導致多一點代碼,似乎是你想要避免的。

或鑄鐵的frm變回類型,如果你能告訴你要哪一個:

Public Sub Address(ByVal frm As Form) 
    '...several codes here 
    If ICanTellWhichIsWhich Then 
     CType(frm, Address).ID = 2 

這些都不是理想的。 一般最好有一個班級管理所有這些將有實際參考涉及的形式,知道該怎麼做,以及如何去做。形式中的程序邏輯越少越好。


但是,你似乎也可以用默認實例的形式:

Private Sub AddressClick() 
    Call Address(Address) 
End Sub 

形式是類,因此應明確實例化:

Dim frmA As New Address 
... 
frmA.Show 
... 
Call Address(frmA) 
+0

感謝。我從你的帖子中挑選了一些我正在嘗試的想法。特別是創建基類表單。我不知道如何實現過載。但第三個建議正確地說就是我想要避免的 - 我可以有很多形式! –

+0

表單基類的問題在於需要編譯IDE才能獲取屬性。如果一個* class *引用了frmAddr As Address的形式,那麼你可以引用一切,就像你想要的那樣,沒有特別的步驟 – Plutonix

+0

我用我正在嘗試的東西撞到一堵磚牆。那麼如何用類實現這一點 - 我無法建立連接,因爲我只知道如何創建獨立於表單的類。讓我更詳細地解釋我正在嘗試做什麼,以便你能提供幫助。該ID用於檢查用戶是否有權打印數據。如果ID = 1,表單中的打印按鈕將被禁用。所以我需要一種外部的方式來設置這個ID在每個窗體打開之前的值。我現在使用標籤,但一次只能限制一個變量,因此不靈活。 –