none
[問題] 透過 My.Application.OpenForms 開啟視窗,並呼叫視窗的公開方法 RRS feed

  • 問題

  • For Each f As Form In My.Application.OpenForms
    	If frmText.Equals(f.Text) Then
    		f.Activate()
    		DirectCast(f, Object).MyDataRequery(Nothing)
    		Exit For
    	End If
    Next

    在vb中可以使用

    DirectCast(f, Object).MyDataRequery(Nothing)

    來叫方法,而不會在編譯時被檢查…

    在C#似乎必須轉換為來源視窗才有辦法呼叫方法...

    ((PurchaseOrder)f).MyDataRequery(null);

    這樣就必須N個視窗就要寫判斷N個...來轉換為來源的視窗

    C#可以運用什麼方式來達成如VB的寫法...

    感謝回覆...

    [環境]

    VS2008

    Framework 3.5

    2013年12月23日 上午 03:32

解答

  • 您可以這樣做:

    1. 定義一個介面, 於介面中宣告MyDataRequery方法

    2. 令Form類別繼承自介面, 並實作介面定義的MyDataRequery方法

    3. 在foreach迴圈中將f轉型成介面型態, 再呼叫MyDataRequery方法

    2013年12月23日 上午 08:35

所有回覆

  • 您可以這樣做:

    1. 定義一個介面, 於介面中宣告MyDataRequery方法

    2. 令Form類別繼承自介面, 並實作介面定義的MyDataRequery方法

    3. 在foreach迴圈中將f轉型成介面型態, 再呼叫MyDataRequery方法

    2013年12月23日 上午 08:35
  • 非常感謝! 原來介面可以這樣應用... 學了一招...

    再討教一下大神們:

    除了介面的方法,還有什麼方法可以得到類似的作用...

    2013年12月24日 上午 02:53
  • DirectCast(f, Object).MyDataRequery(Nothing)

    這是一個極不嚴謹的作法,最好不要學。

    請愛用介面的方式,因為這樣程式的相依性是對抽象而不是實作。


    強力監督SQL Injection問題!!

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    2013年12月24日 上午 03:50
    版主