• ベストアンサー

クリックされたオプションボタンによって、常時複数のテキストBOXの桁数を変えたい

掲題の件ですが、クリックされたオプションボタンによって常時テキストの桁数を変えたいのですが、 これを複数の組み合わせで行いたいときはどのsub(form_load等)にどのように記述したらよいでしょうか? 例えば、オプションボタンで3桁、4桁、5桁の選択肢があるとすると、 Private Sub Option1_Click(Index As Integer) Me.text1.MaxLength = 3 End Sub Private Sub Option2_Click(Index As Integer) Me.text2.MaxLength = 4 End Sub Private Sub Option3_Click(Index As Integer) Me.text3.MaxLength = 5 End Sub となりますが、この組み合わせを複数作りたい場合、オプションボタンとテキストboxをコントロール配列にして、 Dim i As Integer For i = 0 to 3 If Option1(i).Value = True Then Me.text(i).MaxLength = 3 ElseIf Option2(i).Value = True Then Me.text(i).MaxLength = 4 ElseIf Option3(i).Value = True Then Me.text(i).MaxLength = 5 End If Next このような形になると思いますが、これですとForm_Loadに貼り付けても常時桁を変えることができません。 どのsubにどのようにコードを記述したらよいか教えていただけたら幸いです。 よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

VB6でしょうか? はじめから作ってみてください FormにFrame1を配置し、その中に Option1と2と3、 それと、Text1を配置します。 Frame1をコピーし必要なだけ貼り付けます (中のコントロールも配列で配置されます) Private Sub Option1_Click(Index As Integer) Text1(Index).Text = 3 End Sub Private Sub Option2_Click(Index As Integer) Text1(Index).Text = 4 End Sub Private Sub Option3_Click(Index As Integer) Text1(Index).Text = 5 End Sub  テスト用にTextプロパティにしています。

yoshi004
質問者

お礼

コントロール配列のINDEXの使い方を理解していませんでした。 できました。

yoshi004
質問者

補足

ありがとうございます。 このようにはできるのですが、 実際は7つあるので、計21個のオプションボタンになるので、何とかまとめられないかと思っていました。

その他の回答 (3)

回答No.4

Text1というテキストボックスがコントロール配列で0~7まで。 Option1というオプションボタンがコントロール配列で0~20まで。 Private Sub Option1_Click(Index As Integer) Dim idxOpt As Integer Dim idxTxt As Integer idxOpt = Index Mod 3 idxOpt = Index \ 3 Select idxOpt Case 0 Me.Text1(idxTxt).MaxLength = 3 Case 1 Me.Text1(idxTxt).MaxLength = 4 Case 2 Me.Text1(idxTxt).MaxLength = 5 End Sub ってことですかね?

yoshi004
質問者

補足

ありがとうございます。 Text1というテキストボックスがコントロール配列で0~7まで。 Option1が3桁を指定して0~7、Option2が4桁を指定して0~7、Option3が5桁を指定して0~7、の計21個というようにコントロール配列にしました。 Option1、Option2、Option3をOption1(0to2)でoption7(0to2)でもいいのですが、前者の方がやりやすいかと思いまして。 よろしくお願いします。

noname#22222
noname#22222
回答No.3

まあ、タイマーを配置して監視する手もあります。 なお、MaxLength は、ToolTipText で定義しています。 Private Sub Timer1_Timer()   Static optButton(2) As Boolean   Dim I        As Integer   Dim J        As Integer   Dim L        As Integer      For I = 0 To 2     If optButton(I) <> Option1(I) Then       L = Val(Option1(I).ToolTipText)       For J = 0 To 2         Me.Text1(J).MaxLength = L       Next J       Exit For     End If   Next I End Sub

  • DVD-RW
  • ベストアンサー率36% (195/541)
回答No.1

Dim i As Integer For i = 0 to 3 If Option1(i).Value = True Then Me.text(i).MaxLength = 3 ElseIf Option2(i).Value = True Then Me.text(i).MaxLength = 4 ElseIf Option3(i).Value = True Then Me.text(i).MaxLength = 5 End If Next この部分をサブルーチンにしてください。 そして、Option1,2,3の値が変わったとき(Validateイベントでいいかな?)にそのサブルーチンを呼べばよいのではないでしょうか。

yoshi004
質問者

お礼

原因が分かりました。解決策はまだ分かりません。 Validateイベントは値が変わる直前に起こるイベントとヘルプにあったので、 例えば3桁のボタンがTrueで、4桁のボタンをクリックした時、3桁のTrueを読み込んでしまい、4桁がTrueになってもTextboxが3桁になってしまっているのだと思います。 あっているか分かりませんが原因が分かりましたが、解決策が見つかりません。 クリックした方の値(イベントが起こった際の値)をtextboxに反映できればいいのですが。

yoshi004
質問者

補足

ありがとうございます。 早速試して、桁が変わることには成功したのですが、 初期値として3桁を入れて、オプションボタンのvalueをクリックで変えると桁とオプションボタンがずれてしまいます。 例えば、初期値を3桁にし、4桁のボタンを押しても3桁が受け継がれてしまい、また3桁のボタンを押すと4桁になってしまいます。 これはどのように変えたらよいのでしょうか?

関連するQ&A

専門家に質問してみよう