![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
今、VB2005ExpressEditionでソフトを作っているのですが、
コマンドボタン(Button)を並べ、その隣にテキストボックス(Textbox)を並べ、
約80組のボタン・テキストの組を作りました。
そのボタンを隣に記載してある数字分だけクリックさせたいのですが、クリックさせる関数を
public function clk(a1 as integer,a2 as integer)
If a2 < 1 Then Exit Function
Dim a3 As Integer = a2
Do
If a1 = 1 Then Call Button1.PerformClick()
If a1 = 2 Then Call Button2.PerformClick()
.......
a3=a3-1
loop until a3<1
End function
として、a1をクリックするボタンの添え字、a2=textbox(a1).text(a1の部分は毎回手打ち)としていますが、buttonやtextboxの名前を変数化して、読み込むことができれば、コードを省略できると思います。何かいいアイデアはないものでしょうか?
No.3ベストアンサー
- 回答日時:
やっぱりですか?(^^;)了解です。
以下ルールとします。1.ButtonXXと対になるのはTextBoxXXというルールとする。
(1~任意の数)
2.欠番は無いものとする。
フォームロードを下のように書き換えて下さい。
Dim btn As Button
Dim txt As TextBox
Dim no As Integer = 1
On Error Resume Next
Do Until Err.Number <> 0
txt = Me.Controls.Item("TextBox" & no)
btn = Me.Controls.Item("Button" & no)
If txt IsNot Nothing AndAlso btn IsNot Nothing Then
ctlList.Add(New CtrlSet(btn, txt))
txt = Nothing : btn = Nothing
End If
no = no + 1
Loop
On Error GoTo 0
返信が遅くなってしまってすみませんでした。
お返事ありがとうございました。
実行してみたところDO~LOOPから抜け出すことなく、200万までカウントしていたので、DO~LOOP内のif文にElse : Exit Doを挿入したらちゃんと稼動しました。
本当にありがとうございました。
No.2
- 回答日時:
環境が無く正確な例はかけないのですが、イメージで。
'ボタンとテキストのペアを表す構造体を定義
Private Structure CtrlSet
Public btn As Button
Public txt As TextBox
Sub New(iBtn As Button, iTxt As TextBox)
btn = iBtn
txt = iTxt
End Sub
End Structure
'ボタンとテキストのペアを格納するリストを宣言
Private ctlList As List(Of CtrlSet)
'ロードイベント
Private Sub Form1_Load() Handles Me.Load
ctlList = New List(Of CtrlSet)
'80組のボタンとテキストをリストに保存
ctlList.Add(New CtrlSet(Button1, TextBox1))
ctlList.Add(New CtrlSet(Button2, TextBox2))
・・・
ctlList.Add(New CtrlSet(Button80, TextBox80))
End Sub
'一つのコマンドボタンをクリックすると、のクリックイベント
Sub ボタン_Click() Handles ボタン.Click
Dim ctlSet As CtrlSet
'全部のペアをclk関数に渡す
For Each ctlSet In ctlList
clk(ctlSet.btn, ctlSet.txt)
Next
End Sub
この回答への補足
お返事ありがとうございます。
返信が遅くなってすみませんでした。
私が一番困っているのは
「'80組のボタンとテキストをリストに保存」
コード内の「・・・」の部分を省略する方法です。
今はボタンが80個なんですが、いずれ150以上までは拡張するつもりです。
自動的に「・・・」の部分を拡張できる方法を探しています。
答えていただいたコードも大変参考になりましたが、
ctlList.Add(New CtrlSet(ButtonXX, TextBoxXX))
をXXが1~任意の数まで動かして、リストに登録する方法はないものでしょうか。
自分でも若干案があることはあるのですが、
「(1)Formのボタンを1つ選んで固定する
(2)Formのテキストボックスを1つ固定する
(3)選んだボタンの名前(コントロール名)から最初の6文字(「Button」部分)を取り除いた文字列と、選んだテキストボックスの名前から最初の7文字(「Textbox」部分)を取り除いた文字列が一致するか調べる。
(4)もし一致しなかったら、次のテキストボックスに移り、一致したら、pen_pen_penさんの提案してくれたコードでリストに格納して、次のボタンに移る
(5)すべてのForm内のボタンに関して、同じことを実行する」
ということが出来れば、自分がやりたいことが実現できるのですが、私が書いた案を実装するコード、もしくはこの案でなにか思いついた(またはやっと状況がわかっていただけた)コードがあれば、どなたかご教授お願いいたします。
No.1
- 回答日時:
関数「clk」の仕様を変えてしまいますが、以下のようにしてはいかがでしょうか?
Public Sub clk(clkButton As Button, numText As TextBox)
Dim clkNum As Integer = numText.Text
Dim i As Integer
For i = 1 To clkNum
clkButton.PerformClick()
Next
End Sub
そして、関数を実行するときに
ボタンとテキストをセットでこの関数に渡します。
微妙に状況を理解しきれてないのでヘンなこと言ったらすみません。
どういうタイミングで実行するんですか?
この回答への補足
返信ありがとうございます。
回答を見させていただいて、自分の質問が変だったことに気付きました。
最初に言った80個のボタンには、すべて違う命令(大きなテキストボックスに文を貼り付ける)というコマンドをインプットしており、
「一つのコマンドボタンをクリックすると、1つのボタンをそれと組になっているテキストボックスの回数分だけクリックさせ、それをすべての組に対して実行する」
ということがしたいのですが、その組はソフトを改良をするたびに増えていくので、
「......」という部分を増やしていかなくてはいけないのです。
今回返信して頂いた引数の型を変えるというコードは大変参考になりました。
あとは、「各ボタンについて1行(1つ)のコード」ではなく、FOR,NEXTやDO,LOOPなどでまとめて読み込む方法を探しています。
大変お手数をおかけしますが、よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA シートのボタン名を変更し...
-
VBA(エクセル)で自動的にボタン...
-
ユーザーフォームに別シートか...
-
チェックボックスで指定出来る...
-
VBA CommandButtonの文字ずれ
-
フォームの再読み込み
-
uwscとWinShotを使いスクリーン...
-
アクセスのフォームで入力日を...
-
VB 電卓 数字キーを押して...
-
Delphiにて、呼び元の情報を(...
-
40秒毎にセルの値を1ずつ上げたい
-
Excel マクロ 閉じるボタン
-
プロシージャからイベントをコ...
-
コマンドボタンの長押し
-
Vba 電卓 一文字消すボタン
-
ボタンの枠線の様なものを消したい
-
ボタンにセットフォーカスする...
-
オプションボタンによっての表...
-
VB.net でトグルボタンを実現し...
-
VBA IE ダウンロード ダイアロ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートのボタン名を変更し...
-
VBA(エクセル)で自動的にボタン...
-
ユーザーフォームに別シートか...
-
フォームの再読み込み
-
VBA CommandButtonの文字ずれ
-
セルをマクロのボタンにしたい。
-
VBAのボタンの位置が変わって困...
-
[VB.net] ボタン(Flat)のEnable...
-
Excel VBA Application.caller...
-
コマンドボタンやイメージにマ...
-
ボタンをマウスで押し続けたと...
-
閉じると「+」になり開くと「-...
-
アイコンとボタンの違い
-
他のアプリケーションとの連携
-
ボタン
-
プロシージャからイベントをコ...
-
Access VBA でデータペーストを...
-
ボタンの枠線の様なものを消したい
-
VBAで多数のプログラムを一つの...
-
TextBoxでEnterキーを押すと、...
おすすめ情報