2017-06-19 15 views
0

私は、ボタンのクリックを経由してテキストボックスを宣言している:textboxをグローバル変数として宣言するには?

Dim tp = TabControl2.TabPages(TabControl2.TabPages.Count - 1) 
Dim txtbox As New TextBox() 
txtbox.Location = New Point(200, 0) 
txtbox.Height = 20 
txtbox.Width = 100 
tp.Controls.Add(txtbox) 

は今、私は別のサブでのラベルがテキストボックスの内容を表示したいです。私の最初の試みでした:

label.Text = txtbox.text 

しかし、私のテキストボックスがローカルで宣言されたので、それは動作しませんでしたし、私はグローバル変数としてこれを宣言する方法が分からない...

+0

モジュール内にテキストボックスを宣言すると、完了です! 'Dim txtbox As New TextBox()'は必要ありません。大規模なプロジェクトでは、新しい名前を見つけるのが難しくなるか、スレッドを使用するときにグローバル変数が悪いです。それ以外の場合は問題ありません。 –

+0

@編集者:最後のタブページにテキストボックスを動的に追加しているようです。おそらく、彼はまた新しいタブページを動的に追加しているので、グローバル変数はテキストボックスのリスト_でなければうまく動作しません。 –

答えて

0

問題は、あなたが設定されることはありませんテキストプロパティこれを試してみてください:

Dim tp = TabControl2.TabPages(TabControl2.TabPages.Count - 1) 
Dim txtbox As New TextBox() 
txtbox.Text = "Some Text" 
txtbox.Location = New Point(200, 0) 
txtbox.Height = 20 
txtbox.Width = 100 
tp.Controls.Add(txtbox) 

例に1行のコードを追加しました。

+0

ur高速レスポンスのためのthxですが、私のlable-subはまだ宣言済みのテキストボックスを見つけません – Kitsune

+1

より完全な答えは@Steveの回答を参照してください。 –

3

あなたが持っているタスクの回避策がある場合は、グローバル変数を避けてください。たとえば、追加したControlsコレクションからテキストボックスを取得できます。正しいテキストボックスを見つけるのに役立つものが必要です。今、あなたはそれを取得したいとき

Dim tp = TabControl2.TabPages(TabControl2.TabPages.Count - 1) 
Dim txtbox As New TextBox() 
txtbox.Location = New Point(200, 0) 
txtbox.Height = 20 
txtbox.Width = 100 
txtbox.Name = "MyImportantTextBox" 
tp.Controls.Add(txtbox) 

別のシンプルな可能性、テキストボックスTextChangedイベントのハンドラを追加し、そのテキストボックスに何かを入力したときのラベルの内容を反映もあり
Dim tp = TabControl2.TabPages(TabControl2.TabPages.Count - 1) 
Dim textbox = tp.Controls. 
       OfType(Of TextBox). 
       FirstOrDefault(Function(x) x.Name = "MyImportantTextBox") 
if textbox IsNot Nothing Then 
    label.Text = textbox.Text 
End If 

Dim tp = TabControl2.TabPages(TabControl2.TabPages.Count - 1) 
Dim txtbox As New TextBox() 
txtbox.Location = New Point(200, 0) 
txtbox.Height = 20 
txtbox.Width = 100 
AddHandler txtbox.TextChanged, AddressOf OnMyTextBoxChange 
tp.Controls.Add(txtbox) 

そしてこの

Sub OnMyTextBoxChange(sender as Object, e as EventArgs) 
    Dim txtbox = DirectCast(sender, TextBox) 
    label.Text = txtbox.Text 
End Sub 
0

ブライアンのようなtxtboxのイベントハンドラを追加するには、良いアイデアを持っていました。

個人的には、グローバル文字列変数を宣言し、ボタンをクリックしている間にテキストボックスの値を割り当てます。

+0

多くのタブページに多数のテキストボックスがある場合はどうなりますか?それで1つの変数では不十分です。スティーブの提案に従って、あなたが望むものを正確に得ることをお勧めします。 –

+0

私が考えなかった有効なポイント – cMcNerlin

関連する問題