C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: 動的に作成したテキストボックスの入力方法


(過去ログ 118 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■69146 / inTopicNo.1)  動的に作成したテキストボックスの入力方法
  
□投稿者/ coscos (11回)-(2013/12/06(Fri) 10:05:42)

分類:[VB.NET/VB2005 以降] 

いつもお世話になります。
テキストボックスを動的に配置しました。
それで、別のsubでテキストに入力したいのですが、どうすれば良いのでしょう?
どう呼ぶかがわかりません。インデックスで呼ぶ、単独で呼ぶ場合が知りたいです。
宜しくお願い致します。

Public Class Form1
Inherits System.Windows.Forms.Form
Public kosu As Integer = 29
Private WithEvents tbox As TextBox
Private WithEvents elabel As Label

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.AutoSize = True
Me.SuspendLayout()
Dim yoko_d As Integer
Dim tmp_d As Integer
Dim count_d As Integer
For ii As Integer = 0 To kosu
tbox = New TextBox
Me.Controls.Add(tbox)
tmp_d = tbox.Height * count_d * 2.3 + 40
Me.tbox.SetBounds(50 + yoko_d, tmp_d, 200, 19)
If count_d = 9 Then
count_d = 0
yoko_d = yoko_d + 250
Else
count_d = count_d + 1
End If
Next
Me.ResumeLayout()
End Sub
End Class
引用返信 編集キー/
■69151 / inTopicNo.2)  Re[1]: 動的に作成したテキストボックスの入力方法
□投稿者/ coscos (12回)-(2013/12/06(Fri) 11:08:28)
すみません。わかりました。
まず、コントロールの名前を決めていなかった事に問題が有るようです。
Me.tbox.Name = "tf_field" & ii
これを追加して、コントロールの名前を決めます。

呼び出しは、下の様に、探さないといけない様です。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim o As Control
For Each o In Me.Controls
If o.Name = "tf_field5" Then
o.Text = "test_data"
Exit For
End If
Next
End Sub
どうもすみませんでした。

解決済み
引用返信 編集キー/
■69152 / inTopicNo.3)  Re[2]: 動的に作成したテキストボックスの入力方法
□投稿者/ an (8回)-(2013/12/06(Fri) 11:39:31)
No69151 (coscos さん) に返信
> すみません。わかりました。
> まず、コントロールの名前を決めていなかった事に問題が有るようです。
> Me.tbox.Name = "tf_field" & ii
> これを追加して、コントロールの名前を決めます。


別解として、参考までに。


宣言を

 Private WithEvents tbox As TextBox
→Private WithEvents tbox As List(Of TextBox)

TextBoxをNewするところを

 tbox = New TextBox
→tbox.Add(New TextBox)

こうすることによって

 tbox.Item(5).Text = "test_data"

のようにすることもできます。


以下蛇足ですが、

Nameプロパティで操作することは、あまり好まれていないようです。
(バグの原因、遅延バインディング等)

また、tboxをPrivateで宣言していることを鑑みると
Button1_Click等のイベントからは、上記の例のようにtboxにてアクセスするべきで、
Me.Controlsからアクセスしているのは矛盾を感じます。
もし、Me.Controlsからアクセスするのであれば、
tboxはLoadイベントのローカル変数(Dim)で十分な気がします。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -