A TabControl
只是在同一表單上組織控件的一種奇特方式。重點是他們在同一個表格上!您可能知道您使用Me
訪問當前表單,然後使用.ControlName
訪問該控件。考慮帶有兩個選項卡的TabControl
,每個選項卡上有一個TextBox
。這些TextBox
ES是相同的形式,所以你仍然需要使用
Me.TextBox1.Text = "Text 1" ' the same as TextBox1.Text = "Text 1", but I like to be explicit
Me.TextBox2.Text = "Text 2"
你已經知道了,因爲你的問題,從這一行爲朵朵此。但是,有一些技巧可以幫助你。考慮帶有兩個選項卡的TabControl
,並在第1頁上有一個名爲tc1TextBox1
的控件和第2頁tc2TextBox1
。我使用前綴來區分頁面。第1頁上的附加TextBox
將被命名爲tc1TextBox2
等,然後說你想CheckBox
ES,你可以有tc1CheckBox1
和tc1CheckBox2
等我將訪問他們的方法是使用LINQ
一個模塊中定義的擴展方法
Imports System.Runtime.CompilerServices
Public Module ExtensionMethods
<Extension()> _
Public Function ChildControls(Of T As Control)(ByVal parent As Control) As List(Of T)
Dim result As New List(Of Control)
For Each ctrl As Control In parent.Controls
If TypeOf ctrl Is T Then result.Add(ctrl)
result.AddRange(ctrl.ChildControls(Of T)())
Next
Return result.ToArray().Select(Of T)(Function(arg1) CType(arg1, T)).ToList()
End Function
End Module
此方法將返回所有Control
S的內部parent
,並且所有Control
S的內部的,依此類推,遞歸。它也爲您提供IEnumerable
List(Of Control)
,而Control.Controls()
不是IEnumerable
,而只是返回控件中的控件,而不是其容器中的控件。
使用LINQ,您可以通過Type
或Name
篩選ChildControls
的結果。例如,代碼
Dim textBoxes = Me.ChildControls(Of TextBox)()
回報所有TextBox
ES在我。讓我們把它更進了一步:
Dim textBoxes = Me.ChildControls(Of TextBox)().Where(Function(tb) tb.Name.StartsWith("tc1"))
回報所有TextBox
ES以前綴「TC1」。所以你看到你可以在你的表單上設置控件,以便在運行時更好地對它們進行分組。下面是具體的Excel表
Dim xlBook As Excel.Workbook
For i As Integer = 1 To 20
Dim nameString = "txtSheetName" & i.ToString() ' TextBoxes named txtSheetName1, txtSheetName2, etc.
xlBook.Sheets(i).Name = Me.ChildControls(Of TextBox)().Where(Function(tb) tb.Name = nameString).First().Text
Dim enabledString = "chkEnabled" & i.ToString() ' CheckBoxes named chkEnabled1, chkEnabled2, etc.
xlBook.Sheets(i).Enabled = Me.ChildControls(Of CheckBox)().Where(Function(tb) tb.Name = enabledString).First().Checked
'etc.
Next
一個想法,將循環在你的標籤控制指標,併爲每個對應的Excel工作表設置屬性。這段代碼應該給你一個你可以採取的方向的好主意。
來源
2014-01-27 17:51:54
djv
只是通常引用控件...'radioButton1.Checked,numericupDn1.Value,TextBox13.Text'等。我沒有看到與標籤和組是什麼問題。如果他們相對於他們控制的圖表命名:'chart7TextBox.Text,chart2NumericUpDn.Value'等 – Plutonix
@Plutonix是正確的。您特別提到,控件是在設計時創建的,因此您應該像平常那樣訪問它們:使用設計時給出的名稱。 – Brandon
我在想每個控件都沒有所有的唯一名稱會很好。我想循環每個tabpage並分配每個屬性。我是新來的編程和新的堆棧溢出,所以我仍然在學習如何提出好問題。感謝您的意見! – Reckhound