2011-03-25 86 views
0

我有一個ASP.NET應用程序,其中有很多文本框遍佈頁面,需要通過程序執行在各個點進行更新。將控件添加到集合並從集合中更新

這些文本框實際上屬於一定的階級,所以對於簡單的更新,我想我可以創建一個詞典(串,對象),並添加control.IDcontrol到它,然後用於更新做這樣的事情:

(在更新textbox.text的情況下):

for each kv as KeyValuePair(Of string, object) in mytextboxes 
     if (kv.Key.Contains("textboxid")) then 
      DirectCast(kv.Value, TextBox).Text = mystring 
     end if 
next 

然而,文本框的文本屬性實際上並沒有得到更新。我主要試圖避免每次必須更新它們時手動爲我的每個文本框執行textbox.text = somestring

這是一個可行的解決方案,可以使工作? 如果是這樣,我做了什麼錯了?

回答

1

您的函數需要直接投射控件,而不是KeyValuePair集合。嘗試這樣的事情......

Private Sub SetTextboxText(ByVal strTextBoxID As String, ByVal strText As String) 

    Dim txtChangeThisOne As TextBox = CType(Page.FindControl(strTextBoxID), TextBox) 

    If Not txtChangeThisOne Is Nothing Then 

     txtChangeThisOne.Text = strText 

    End If 

End Sub 

然後打電話......

SetTextboxText("TextboxID", "Text you wish to set.") 
0

我有一個使用100個按鈕的項目和他們分享一個事件處理程序。如果您可以在數組中創建所有文本框,則可以定義一個公共事件處理程序。以下snippit將用作參考。希望VB代碼仍然有幫助。 如果你想測試代碼,你需要有一個10×10的表格和佈局。讓我知道它是否有幫助。

Public Class Form1 
    Private NRow As Integer = 10 
    Private NCol As Integer = 10 
    Private BtnArray(NRow * NCol - 1) As Button 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
     TableLayoutPanel1.Size = Me.ClientSize 
     For i As Integer = 0 To BtnArray.Length - 1 
      BtnArray(i) = New Button() 
      BtnArray(i).Anchor = AnchorStyles.Top Or AnchorStyles.Bottom Or AnchorStyles.Left Or AnchorStyles.Right 
      BtnArray(i).Text = CStr(i) 
      TableLayoutPanel1.Controls.Add(BtnArray(i), i Mod NCol, i \ NCol) 
      AddHandler BtnArray(i).Click, AddressOf ClickHandler 
     Next 
    End Sub 
    Public Sub ClickHandler(ByVal sender As Object, ByVal e As System.EventArgs) 
     MsgBox("I am button #" & CType(sender, Button).Text) 
    End Sub 
End Class 
1

如果必須使用字典,嘗試這個辦法:

Dim mytextboxes As New Dictionary(Of String, TextBox) 
Dim mystring As String = "A Input String." 
Dim myTextBoxName As String = "TextBox1" 
Dim t As TextBox 
For Each c As Object In Me.Controls 
    If (TypeOf c Is TextBox) Then 
     t = CType(c, TextBox) 
     mytextboxes.Add(t.Name, t) 
    End If 
Next 

Try 
    mytextboxes(myTextBoxName).Text = mystring 
Catch ex As Exception 
    MsgBox("There is no " & myTextBoxName) 
End Try