簡體   English   中英

如何遍歷/遍歷VB.net中表單內的所有對象?

[英]How do I traverse/iterate through all the objects inside a form in VB.net?

我有一個VB類,其中一個方法接受一個表單數組。

對於數組中的每個表單,我需要它遍歷所有對象,檢查它們是否是特定的tyoe(輸入,標簽,復選框等)並獲取每個對象的屬性。 然后,我想以下列格式將它們轉儲到文本文件中:

Form1 | Label1 | "Enter your name"

“輸入您的姓名”作為表單對象的標題或文本。

我想這樣做是為了方便翻譯應用程序。 您可能對此有何想法或想法?

以下代碼將返回IEnumerable(Of Control) ,其中包含傳入控件的所有子控件。 它將以遞歸方式下降到樹中並獲取所有嵌套控件。

Public Function GetAllControls(ByVal source as Control) As IEnumerable(Of Control)
  Dim seq = Enumerable.Empty(Of Control)
  For Each child in source.Controls 
    if child.Controls.Count > 0 Then
      seq = seq.Concat(GetAllControls(child))
    End If
  Next 
  Return seq
End Function

您必須為表單的.Controls集合執行For Each。 但請注意,如果表單的子控件在其自己的.Controls集合中具有更多控件,則不會考慮它們。 您必須創建一個遞歸函數才能遍歷整個父子控件鏈以查找所有控件。

現在,對於每個控件,您可能希望執行Case語句來檢查每個控件的Type Of。 然后將控件轉換為它的類型並獲取屬性。

如果你想要做的就是能夠本地化你的表單,那么更簡單的方法是將表單的Localizable屬性設置為true。 這將導致創建一個.resx文件,其中包含表單上所有控件的各種屬性的所有值,以便文本等可以作為單獨的附屬程序集進行轉換和分發。

Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        ProcessForm(Me)
    End Sub

    Private Sub ProcessForm(ByVal frm As Form)
        For Each el As Control In frm.Controls
            Dim str As String
            str = String.Format("{0} | {1} | {2}", frm.Name.ToString(), el.Name.ToString(), el.Text.ToString())
            Debug.Print(str)
        Next
    End Sub
End Class

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM