none
如何取得Control的Sub Control RRS feed

  • 問題

  • 1.我有一份KEY[元件名稱]VALUE[元件顯示文字]的檔案,也順利用Hashtable承接
    2.使用Me.Controls.Find()來將元件更改顯示,程式如下
    For Each name As String In Values.Keys
     Dim 元件s As Control() = Me.Controls.Find(name, True)
     If 元件s.Length > 0 Then 元件s(0).Text =Values(name).ToString        
    Next
    問題:
    1.MenuStrip內的ToolStripMenuItem
    2.ToolStripMenuItem.DropDownItem
    3.BindingNavigator內的所有Item
    無法用
    Me.Controls.Find(name, True)
    找到,是不是因為那些Item不是Control的子類別??
    想請教是否有比較方便的方法找的到這些Item,讓For跑一次就可以指定好全部.



    2009年8月19日 下午 04:43

解答

所有回覆

  • 目前可命名的子控制項只看到放在 MainControl.Controls / MainControl.Items 兩種內,用 If 敘述分別對兩種檢查即可。
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    • 已標示為解答 小見光二 2009年8月21日 上午 11:55
    2009年8月20日 上午 02:54
  • For each C as Control in Me.Controls
    
    Next

    1.如果我用For each 去跑 Me.Control 我要怎麼知道每個C是可用Controls或Items,
    如C為MenuStrip時,沒辦法用C.Items。該不會要用Select Case 一種種判斷吧!!
    想請教如何判斷C的基底是可以用Items,且要將C轉型成啥型態??

    剛查看了一下文件,有Items好像都有實作 IComponent 介面
    所以我用下面程式碼來判斷:
    C.GetType().FindInterfaces(myFilter, "System.ComponentModel.IComponent").Length > 0
    但是不知道將C轉成啥Type??

    2.補充一點是我轉換的元件還有DataGridView的Column,有辦法一起判斷嗎??
    2009年8月20日 上午 05:11
  • C# 有一種 is 的運算符,可以判斷變數是否屬於指定型別,VB 有沒有我不知道,要查。

    不過,有些事情不是你覺得有方法就有方法,像多種型別判斷,你只能乖乖的用 select...case 或 if...else 來判斷,沒有什麼該不會,或是其他旁門左道的方法。
    常用的話,把那些東西寫成 function,下次再用即可。

    另外,MenuStrip 是 Control 的一種。


    小人物一枚。
    2009年8月20日 上午 05:30
    版主
  • With srcControls
    	For ibc = 0 To .Count - 1
    		Try
    			' ...
    			If Not IsNothing(.Item(ibc).Controls) Then 遞回呼叫
    			If Not IsNothing(.Item(ibc).Items) Then 遞回呼叫
    		Catch ex As Exception
    			' ...
    
    		End Try
    	Next
    End With
    

    Column 算屬性非子物件...
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    2009年8月20日 上午 05:36