14

次のループでコーディングすることでボタンとテキストボックスを作成しました。結果は

'T(x).Name = "text_1"
'T(x).Name = "text_2"
'T(x).Name = "text_3"
'....

'B(x).Name = "button_1"
'B(x).Name = "button_2"
'B(x).Name = "button_3"
'...

ボタンをクリックするとテキストボックスプロパティを取得したいのですが、「いいね」をクリックするとボタンプロパティを取得できますbutton_1.Name.ToString が、text_1,2,3....プロパティを取得できません。

関数button_1.Name.ToStringを分割していくつかのトリックを実行し、最後の番号を取得して、のようにテキストボックス名に追加しますが"text_" & button_1.Name.ToString、この文字列をオブジェクトに変換できません。

アップデート

ループ内のコントロールをロードするために使用しているコードは次のとおりです。

C_A_TEXT(x) = New TextBox() 
C_A_TEXT(x).Dock = System.Windows.Forms.DockStyle.Fill 
C_A_TEXT(x).Location = New System.Drawing.Point(270, 5) 
C_A_TEXT(x).Margin = New System.Windows.Forms.Padding(0) 
C_A_TEXT(x).Size = New System.Drawing.Size(70, 27) 
C_A_TEXT(x).TabIndex = 5 
C_A_TEXT(x).Name = "NEW_RECHARGE_COUNT_TEXT_" & x

アップデート2

ここにいくつかのコードがあります:

AddHandler C_A_BUTTONS(x).Click, AddressOf C_A_BUTTON 

Private Sub C_A_BUTTON(ByVal sender As System.Object, ByVal e As System.EventArgs) 
    Dim thisButton As Button = sender Dim A = CType(Me.Controls("NEW_RECHARGE_COUNT_TEXT_1"), TextBox) 
    MsgBox(A.Text.ToString)  'Error!
End Sub
4

6 に答える 6

30

Form.Controlsプロパティを介して名前でコントロールにアクセスできます。次に例を示します。

Dim text1 As TextBox = CType(Me.Controls("text_1"), TextBox)
于 2013-02-25T21:47:09.050 に答える
10

注意すべき簡単なヒントとして、フォームのコントロールにアクセスするために、CTypeステートメント内でコントロールのタイプを指定する必要はないようです。ボタンやテキストボックスなど、すべて同じコード行で複数の種類のフォームコントロールにアクセスしようとしたときに、これに遭遇しました。

CType(Controls("NAME_OF_CONTROL"), Control)

'TextBox'や'Button'など、コントロールのタイプを正確に指定するのではなく、単に'Control'と指定することに注意してください。これにより、タイプを指定しなくても、あらゆるタイプのコントロールを普遍的に変更できます。

他では見つからなかったので、シェアしたいと思いました!

于 2015-08-13T06:29:40.307 に答える
7

以下はコードです。

Dim oObj As Object = Me.Controls.Find("control name", True).FirstOrDefault()
Obj.Property = Value

お役に立てば幸いです。

于 2017-05-05T19:47:44.747 に答える
1
Dim sometext As TextBox = CType(Me.Controls("sometext "), TextBox)
于 2017-12-14T10:59:52.570 に答える
0

スレッドのタイトルと目前の問題の説明は、互いに少し異なっているように見えます。

タイトルに答える(名前でコントロールを見つける)には、次を使用します。

Dim myControlToFind = LayoutRoot.FindName("NAMEOFCONTROL")

この方法の詳細については、こちらをご覧ください

問題の説明に答えるには(クリックした後にコードで生成されたコントロールにアクセスするには)、次の手順を実行します。

コントロールを作成しているループで、次のハンドラーを追加します

Addhandler YOURCONTROL.Clicked, AddressOf Textbox_Clicked

...そしてこれはクリックイベントを処理します

Private Sub Textbox_Clicked(sender as object, e as RoutedEventArgs)

Dim tbClicked = Ctype(sender, TextBox)
'You can now access any of the properties of the textbox, for example

Dim txt as String = tbClicked.Text
Dim name as String = tbClicked.Name
Dim height as Double = tbClicked.Height

End Sub
于 2013-02-26T10:49:52.567 に答える
0

上記のどれも私のために働いていませんでした。これは行います:

Dim selVal As String = CType(Form.FindControl(myListName), DropDownList).SelectedValue
于 2020-08-05T02:22:42.943 に答える