VB.NET 動的コントロールのインデックスを調べる方法
- VB.NET 2005で動的コントロールを複数作成し、クリックされた動的コントロールのインデックスを調べる方法はないでしょうか?
- 動的コントロールの中でLabel01とLabel02が複数並んでおり、Label01(3)をクリックした時に、Label02(3)も同時に処理するためにはインデックスを調べる必要があります。
- Lab01_Clickイベントハンドラ内で、クリックされたLabel01のインデックスを取得し、それに対応するLabel02の操作も行いたいです。
- ベストアンサー
VB.NET 動的コントロールのインデックス
VB.NET 2005で動的コントロールを複数作成し、 クリックされた動的コントロールのインデックスを 調べる方法はないでしょうか? 以下の様に動的コントロールLabel01とLabel02が複数並んでいて Label01(3)をクリックした時に、Label02(3)も同時に処理 したいのでインデックスを調べたいのですが方法がわかりません。 [Label01(1)] [Label02(1)] [Label01(2)] [Label02(2)] [Label01(3)] [Label02(3)] [Label01(4)] [Label02(4)] [Label01(5)] [Label02(5)] : : [Label01(x)] [Label02(x)] '----------------------------------------------- 'Label01(3)がクリックされたら、Label02(3)も"ok"を表示する Private Sub Lab01_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Dim lab01 As Label = CType(sender, Label) System.Diagnostics.Debug.WriteLine(lab01.Text & "が押されました。") lab01.Text = "ok" lab02(?).Text = "ok" '←インデックスがわかりません End Sub '-----------------------------------------------
- nikoniko_009
- お礼率22% (4/18)
- Visual Basic
- 回答数1
- ありがとう数5
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
コントロールを作成した際に Tagプロパティにインデックス番号を代入しておいてはいかがですか? for n as integer = 1 to 10 label01(n) = new Label() label01(n).Tag = n label01(n).Text = "label01-" & n Label01(n).Location = new Point( 0, n * 32 ) Controls.Add( label01(n) ) AddHandler Label01(n).Click AddressOf Label01_Click next といった具合に登録しておいて Sub Label01_Click( ... ) dim n as integer dim lbl as Label = CType(sender, Label) n = lbl.Tag label02(n).Text = "Ok" End Sub といた具合です
関連するQ&A
- 【VB2005】 実行時に動的にコントロールを作成した後のコントロールへの処理
こんばんわ、VB5.0を1週間ほどかじって現在2005に乗り換えたばかりのド初心者です。 (用語の使い方などが間違っている可能性があるかもしれません。おかしなところは指摘していただけるとありがたいです) VB5.0を使っていたときはコントロール配列を使って簡単にできた事が2005になってコントロール配列を使えなくなったため行き詰ってしまいました。 内容は、ある操作をすると画面にコントロールが1つずつ追加されていき、そのコントロールのプロパティを他のコントロールから操作できるようにする物です。 検索などで情報を集めて、なんとかコントロールを追加していくことができるようにはなったのですが、プロパティを変更するためにコントロールにアクセスする際にエラーになってしまって困っています。 一つだけコントロールが追加された場合は、問題なくプロパティをいじれるのですが、2つ以上追加した場合に最新のコントロール以外のプロパティをいじろうとするとエラーになってしまうのです。 下に私の作りたいプログラムを簡潔にしたサンプルソースを記述させていただきます。 間違いの指摘やアドバイスをいただければ幸いです。 FormにはAddButtonというボタンが一つだけあります。 Dim Index As Integer Private Buttons() As System.Windows.Forms.Button Private Labels() As System.Windows.Forms.Label Private Sub AddButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AddButton.Click Index += 1 Me.Buttons = New System.Windows.Forms.Button(Index) {} Me.Labels = New System.Windows.Forms.Label(Index) {} Me.SuspendLayout() Me.Buttons(Index - 1) = New System.Windows.Forms.Button Me.Buttons(Index - 1).Text = Index - 1 Me.Buttons(Index - 1).Size = New Size(30, 30) Me.Buttons(Index - 1).Location = New Point((Index - 1) * 30, 50) Me.Labels(Index - 1) = New System.Windows.Forms.Label Me.Labels(Index - 1).Text = Index - 1 Me.Labels(Index - 1).Size = New Size(30, 30) Me.Labels(Index - 1).Location = New Point((Index - 1) * 30, 100) AddHandler Me.Buttons(Index - 1).Click, _ AddressOf Me.Buttons_Click Me.Controls.AddRange(Me.Buttons) Me.Controls.AddRange(Me.Labels) Me.ResumeLayout(False) End Sub Private Sub Buttons_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Labels(sender.text).ForeColor = Color.Red End Sub
- ベストアンサー
- Visual Basic
- vbのsavefiledialogについて
vbで、テキストボックスに、文字を入力し、ボタン2をクリックすると、ユーザーが指定したところに、指定した名前で、txt形式、html形式、doc形式(このうち、txtと、htmlは必須。)で保存するプログラムを作りたいと思っております。 サイトを見てみますが、なかなかよいものが見つかりません。どなたか教えてください。 書きかけのプログラムと、フォーム図を載せておきます。 また、変更した方がよければ、そちらもおしえてください。 Public Class Form1 Dim texta As String Dim a Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Button1.Text = "リセット" Button2.Text = "保存" texta = TextBox1.Text End Sub Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged texta = TextBox1.Text End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click TextBox1.Text = "" End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click a = DialogResult SaveFileDialog1.OverwritePrompt = True SaveFileDialog1.FileName = "" SaveFileDialog1.Filter = "テキストファイル(*.txt)|*.txt|すべてのファイル(*.*)|*.*" a = SaveFileDialog1.ShowDialog If a = Windows.Forms.DialogResult.OK Then Label1.Text = IO.Path.GetDirectoryName(SaveFileDialog1.FileName) Label2.Text = IO.Path.GetFileName(SaveFileDialog1.FileName) Else Label1.Text = "キャンセルされました。" Label2.Text = "" End If End Sub End Class
- ベストアンサー
- Visual Basic
- Elseifのコードが分かりません。(至急)
急ぎのため再度の質問失礼します。 3つの数字すべてが7のとき、メッセージ1を出し、 どれか2つだけが7のときは、メッセージ2を出し、 どれか1つだけが7のときは、メッセージ3を出し、 どこにも7が含まれていないときは、メッセージ4を出すようにEndifを使って書きたいのですが、正しいコードを教えて下さい。 Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Randomize() End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Close() End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click PictureBox1.Visible = False Label4.Visible = False Label1.Text = CStr(Int(Rnd() * 10)) Label2.Text = CStr(Int(Rnd() * 10)) Label3.Text = CStr(Int(Rnd() * 10)) If End If End Sub Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click End Sub Private Sub Label3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label3.Click End Sub Private Sub Label5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label5.Click End Sub End Class よろしくお願いします。
- ベストアンサー
- Visual Basic
- VB、教えてください。
VB、教えてください。 5つのラベルが縦に並んでいます。 label0 label1 label2 label3 label4 あらかじめ、 Dim m as integer=0 を宣言し、 どうにかして "label"という文字列とmという数字をくっつけ、 label0 label1… という風にできないでしょうか。 そして label"m".text=10*m というような表示を作りたいのですが。 下記のようなイメージです。分かりにくかったらごめんなさい。 Public Class Form1 Dim m As Integer = 0 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click lblmessage(+("m").Text = 10*m m = m + 1 End Sub End Class
- ベストアンサー
- オフィス系ソフト
- Vb.NetでFor~Nextの使い方
登録したデータの中から該当するID(データの頭2つ)を抜き出し、それを参照にLabel5と6に名前と所属のデータを表示させています。 該当データがない場合はLabel4に該当なしと表示します。 下の様に作ってみたのですが、どのIDを打っても名前と所属はちゃんと出るのですが、該当なしまで一緒に表示されます。 これはどこを変更したらいいのでしょうか? Public Class Form1 Dim data(9) As String Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click End End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Data(0) = "01山田 花子 デバイス部" 以下Data(9)まで続く・・ End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click For i = 0 To 9 If Mid(ShainData(i), 1, 2) = TextBox1.Text Then Label5.Text = Mid(Data(i), 3, 9) Label6.Text = Mid(Data(i), 13, 2) Else Label4.Text = "該当なし。" End If Next
- 締切済み
- Visual Basic
- VB2008 Form間の計算について
VB勉強中のものです。 次のようにプログラムを作成したいですので よろしくお願いします。 要望: 1 From2のTextbox1 or Textbox2に"2001/05/05"ような書式で日付を入力 2 RadioButton1かRadioButton2の選択して 3 Form1の「DateTimePicker」を利用して、日数の差を計算し、 Form2の label3に結果を表示させる 例: From2のTextbox1 = 2001/01/01 Form1の「DateTimePicker」 = 2002/01/01 RadioButton1を選択したら、 Label3内に " 誕生日から生まれて365日となりました" という結果が出れば、問題がないです。 ------------ Form 1 --------------------- Public Class Form1 Private Sub Label2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label2.Click 'labelをクリックして、form2を開く Dim frmTmp As New Form2 frmTmp.ShowDialog() End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim intdate As Integer intdate = DateDiff(DateInterval.Day, DateTimePicker1.Value, Now) Label1.Text = "誕生日から生まれて" & intdate & "日となりました" End Sub End Class -------------------------------------------- -------------Form 2 ------------------------ Public Class Form2 Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged If RadioButton1.Checked = True Then Label3.Text = "*******わからない部分*******" End If End Sub End Class ----------------------------------------------------- 以上
- 締切済み
- Visual Basic
- VBでの質問です
VBでの質問です 5分を計るタイマーを作っていて5分たつと止まるプログラムを作っていて、コンマ以下のケタが長くて、しかも止まらない( Label1.Text = n5.Subtract(Now).ToStringをLabel1.Text = n5.Subtract(Now).TotalMinutesにしてIf Label1.Text = "00:00:00" ThenをIf Label1.Text = "0" Thenにした時は止まりました)ので止まるようにするにはどこを変えればいいですか? 教えてください 以下コードです Public Class Form1 Dim n5 As DatePrivate Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load n5 = Now.AddMinutes(5) Timer1.Interval = 1000 Timer1.Start() End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick Label1.Text = n5.Subtract(Now).ToString If Label1.Text = "00:00:00" Then MsgBox("時間になりました。") Timer1.Stop() End If End Sub 長文ですいません
- ベストアンサー
- Visual Basic
- MDIParent1に、ToolStripButton1とLabel1
MDIParent1に、ToolStripButton1とLabel1、Label2を 配置しています。 やりたいことは (1)ToolStripButton1をクリックしてForm1を表示させる。 (2)Label1をクリックしてForm1のTextをLabel1のTextに変更する。 (3)Label2をクリックしてForm1のTextをLabel2のTextに変更する。 最初に表示させたForm1のTextのみを変更させる。 現在下記のプログラムを実行したのですが Label1をクリックすると新たにForm1が表示されてしまいます。 (Form1のTextはLabel1のTextに変更されている) Label2をクリックすると新たにForm1が表示されてしまいます。 (Form1のTextはLabel2のTextに変更されている) クリックする毎にForm1がふえていきます。 対策方法を教えてください。 Public Class MDIParent1 Dim F1 As Form1 Private Sub ToolStripButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton1.Click Dim frm As New Form1 frm.MdiParent = Me frm.Show() End Sub Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click F1 = New Form1 F1.Visible = True F1.Text = Label1.Text Label1.BorderStyle = BorderStyle.Fixed3D Label2.BorderStyle = BorderStyle.None End Sub Private Sub Label2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label2.Click F1 = New Form1 F1.Visible = True F1.Text = Label2.Text Label2.BorderStyle = BorderStyle.Fixed3D Label1.BorderStyle = BorderStyle.None End Sub End Class
- ベストアンサー
- Visual Basic
- VBで倍数を出したい
VBで倍数を出したい よろしくお願いします。 おそらく基本なんだと思うのですが、さっぱりわかりません。 TextBox Label Buttonと並んでいて、 TextBoxに入った整数に対し、 Buttonを1度押すたびに、 Labelに倍数が表記されていく、 という趣旨なのですが。 まず、前段階として下記を作らされました。 Public Class Form1 Dim i As Integer Dim m As Integer Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click i = TextBox1.Text lblmessage.Text = i + m m = lblmessage.Text End Sub End Class このように、labelの数字がどんどん変わっていくのはできたのですが、問題は、 Text…10 Label…10 20 30 40 50 60 70 80 90 100 となり、しかも一度に出るのではなく、Buttonひと押しにつき一つの解が出ね 次の一押しで改行され解が出る。 かつ、100で打ち止めにすること…だそうです。 いちおうめちゃくちゃですが、みんな風に作りました。 Public Class Form1 Dim a As Integer Dim b As Integer Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim b As Integer = 10 a = TextBox1.Text lblMessage.Text = a & ControlChars.CrLf & a + b End Sub End Class どうかヒントだけでもお願いします。
- ベストアンサー
- オフィス系ソフト
- VB初心者です。コードの書き方が分かりません。
VB初心者です。 VBで(zのn乗)-(xのn乗+yのn乗)の計算が出来るようにしたいのですが、答えが必ず-1になってしまいます。 Option Explicit On Public Class Form1 Dim x As Long Dim y As Long Dim z As Long Dim n As Long Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Close() End Sub Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged End Sub Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged End Sub Private Sub TextBox3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox3.TextChanged End Sub Private Sub TextBox4_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox4.TextChanged End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click TextBox5.Text = (z ^ n) - (x ^ n + y ^ n) End Sub End Class 正しいコードの書き方を教えて下さい。 また特定の答えのときにメッセージを表示したいのですが、どうすればいいですか?
- ベストアンサー
- Visual Basic
お礼
ありがとうございました。 教えて頂いたとおりに設定しましたら動作しました。 助かりました。