none
請教有關my.forms的問題 RRS feed

  • 問題

  • 大家好:

    我是VB.net的初學者也不是資訊本科系,請教大家

    以下這段是我在MDI的FORM_LOAD時以drDR取得USER的功能權限

    並於RUNTIME時建立符合USER權限的ToolStripItem

    同時將X.Click AddressOf MenuItemClick

     

    Using drDR As SqlDataReader = cmdC.ExecuteReader
                Do While drDR.Read
                      Dim X As ToolStripItem = ToolStripMenuItem1.DropDownItems.Add(drDR(0).ToString)
                      AddHandler X.Click, AddressOf MenuItemClick
                 Loop
     End Using

     

    但是問題發生在以下這段MenuItemClick

    本想用  Form集合.Item(key as string) as Form 這種概念來以strFormName參考Form的預設執行個體

    但是My.Forms()並不是集合型別,我又不想Dim fmForm as new Dictionary(Of String,Form)事先把集合做好

    請問怎麼樣才可引用到專案下的Form集合(不是OpenForms喔!) 

     

    Private Sub MenuItemClick(ByVal sender As System.Object, ByVal e As System.EventArgs)
          dim strFormName as string= CType(sender, ToolStripItem).Text

     

    End Sub

     

    另外我以前用VBA寫過不少Access VBA的程式碼本身沒有物件觀只要有物件的Name就可參考到物件的執行個體

    但是VB.net就不行(不曉得是不是我還有很多東西搞不清楚),就我的能力我只能用 物件集合.Item(key as string) as 物件這種概念來參考物件的執行個體

    請問VB.net是否有類似這樣的涵式或方法可用 Function(key as String,T as Type) as TObject 

    謝謝大家!

    2008年8月19日 下午 01:03

解答

所有回覆

  • HI,

     

    有點看不懂您的問題, 如果專案中有一個叫做Form2的Form類別, 則程式可以利用以下的語法顯示Form2的視窗:

     

    My.Forms.Form2.ShowDialog()

     

    tihs

    2008年8月19日 下午 01:43
  • 在美國論壇那邊搜尋的結果

    http://forums.msdn.microsoft.com/en/search/?q=Reflection%20and%20form%20and%20combobox

     

    只針對表單部分可以用下面的方式

    Dim myF as Form = CType(Activator.CreateInstance(System.Reflection.Assembly.GetExecutingAssembly.GetType("YourAssemblyName.YourFormName")), Form)

     

    YourAssemblyName 通常是你的專案名稱,YourFormName就是表單名稱

     

    其他可以在VB版搜尋"動態編譯",有其他相關參考資料。

     

    2008年8月19日 下午 01:43
    版主
  • 很多人都不是資訊本科,就不用特別提了。

     

    VB2003 以前,不會預設建立同名的 Form 物件。

    VB2005 以後才恢復這個 VB6 內建的功能。

     

    問問題時,編譯器的版本也是很重要的資訊,應該明確說出來。

    2008年8月19日 下午 01:52
  • Form2是由傳遞件來的sender.text決定Form.Name

    但是有了Form.Name無法參考Form2的執行個體

    謝謝您!

    請再賜教!

     

     

    2008年8月19日 下午 02:14
  • Sorry!

    我的環境是VS2008 PRO 在XP上

     

    2008年8月19日 下午 02:40
  • Sorry!

    這樣說好了我在設計階段已經建立好三個Form分別為Form1、Form2、Form3

    如果我要開啟Form1

    程式碼為:Form1.Show()   這個沒有問題

    但是我現在的情形是必須由一個sub來決定應該要開啟哪一個Form

    這個sub會接收一個String參數strFN表示Form.Name的值

    我不想用select case來處理

    select cast strFN

        case "Form1"

           Form1.Show()

        case "Form2"

          Form2.Show()

        case "Form3"

          Form3.Show()

    end select

    我想用物件集合的概念   Form集合.Item(key as string).Show()

    但是My.Forms不是集合型別不能有這種寫法   My.Forms.Item(key as string).Show()  

    像Application.OpenForms就是一個集合型別可以用.Item(name as string)但這是針對已開啟的Form集合

    請問哪裡可以引用到專案下所有Form的集合呢?

    或者怎麼樣可以直接用物件的Name參考到物件本身呢?

    謝謝!

     

     

     

    2008年8月19日 下午 04:59
  • 成功了謝謝大家

     

    2008年8月20日 上午 01:58