コントロール配列で同じ処理をまとめるには?

解決


Hero  2006-05-25 22:34:10  No: 95502

お世話になります。
以下のような4つのコントロール配列を作成し、共通する処理を各コントロール配列ごとにまとめてはあるのですが、
txtTSID().text
txtEMMPID().text
txtEMMBit().text
txtQAMFreq().text

各コントロール配列で同じイベントで同じ処理をしています。
しかし、各コントロール配列毎に対応するイベントの種類が異なります。
(ん〜、うまく文章では説明できません(^^;  )
以下の通りとなっておりますが、ご覧の通り、同じような処理がたくさんあります。これらをもっと共通化することはできませんでしょうか?

Private Sub txtTSID_KeyPress(Index As Integer, KeyAscii As Integer)
    '/* テキストボックスでEnterを押した後にフォーカスを移す。 */
    If KeyAscii = vbKeyReturn Then frmMain.cmdNetSaveFile.SetFocus
End Sub

Private Sub txtEMMPID_KeyPress(Index As Integer, KeyAscii As Integer)
    '/* テキストボックスでEnterを押した後にフォーカスを移す。 */
    If KeyAscii = vbKeyReturn Then frmMain.cmdNetSaveFile.SetFocus
End Sub

Private Sub txtEMMBit_KeyPress(Index As Integer, KeyAscii As Integer)
    '/* テキストボックスでEnterを押した後にフォーカスを移す。 */
    If KeyAscii = vbKeyReturn Then cmdNetSaveFile.SetFocus
End Sub

Private Sub txtTSID_GotFocus(Index As Integer)
    '/* フォーカスを得たときに全選択状態にする */
    txtTSID(Index).SelStart = 0
    txtTSID(Index).SelLength = txtTSID(Index).MaxLength
End Sub

Private Sub txtEMMPID_GotFocus(Index As Integer)
    '/* フォーカスを得たときに全選択状態にする */
    txtEMMPID(Index).SelStart = 0
    txtEMMPID(Index).SelLength = txtEMMPID(Index).MaxLength
End Sub

Private Sub txtEMMBit_GotFocus(Index As Integer)
    '/* フォーカスを得たときに全選択状態にする */
    txtEMMBit(Index).SelStart = 0
    txtEMMBit(Index).SelLength = txtEMMBit(Index).MaxLength
End Sub

Private Sub txtQAMFreq_GotFocus(Index As Integer)
    '/* フォーカスを得たときに全選択状態にする */
    txtQAMFreq(Index).SelStart = 0
    txtQAMFreq(Index).SelLength = txtQAMFreq(Index).MaxLength
End Sub

Private Sub txtEMMBit_KeyPress(Index As Integer, KeyAscii As Integer)
    '/* テキストボックスでEnterを押した後にフォーカスを移す。 */
    If KeyAscii = vbKeyReturn Then cmdNetSaveFile.SetFocus
    '/* テキストボックスで"0" 〜 "9"の数字入力以外受け付けない処理(BS、del、Enterは受け付ける) */
    If Not IsNumeric(Chr$(KeyAscii)) And KeyAscii <> vbKeyBack And KeyAscii <> vbKeyDelete And KeyAscii <> vbKeyReturn Then
        KeyAscii = 0    '/*  文字を取り消し */
        Beep            '/* エラー音を鳴らす */
    End If
End Sub

Private Sub txtQAMFreq_KeyPress(Index As Integer, KeyAscii As Integer)
    '/* テキストボックスでEnterを押した後にフォーカスを移す。 */
    If KeyAscii = vbKeyReturn Then cmdNetSaveFile.SetFocus
    '/* テキストボックスで"0" 〜 "9"の数字入力以外受け付けない処理(BS、del、Enterは受け付ける) */
    If Not IsNumeric(Chr$(KeyAscii)) And KeyAscii <> vbKeyBack And KeyAscii <> vbKeyDelete And KeyAscii <> vbKeyReturn Then
        KeyAscii = 0    '/*  文字を取り消し */
        Beep            '/* エラー音を鳴らす */
    End If
End Sub

アドバイスをお願い致します。


特攻隊長まるるう  2006-05-25 22:46:34  No: 95503

コントロール配列を使ってる場合はほぼ[VB6.0]と分かるけど、
質問する場合は自分の開発環境を最初に記入してください。

GotFocus の処理はよくあるパターンだね。
[VB6.0]
Option Explicit

Private Sub txtEMMBit_GotFocus(Index As Integer)
    '/* フォーカスを得たときに全選択状態にする */
    Call txtBox_GotFocus_Common(txtEMMBit(Index))
End Sub

Private Sub txtQAMFreq_GotFocus(Index As Integer)
    '/* フォーカスを得たときに全選択状態にする */
    Call txtBox_GotFocus_Common(txtQAMFreq(Index))
End Sub

Private Sub txtBox_GotFocus_Common(ByRef TextBoxX As TextBox)
    With TextBoxX
        .SelStart = 0
'        .SelLength = .MaxLength
        .SelLength = Len(.Text) '←こっちを書く方が多いと思うけど。
    End With
End Sub

…あとは応用してください。


Hero  2006-05-26 00:54:58  No: 95504

特攻隊長まるるう様
早速のレスありがとうございます。

>質問する場合は自分の開発環境を最初に記入してください。
  →  大変失礼致しました。うっかり忘れてしまっておりました。
      以後気を付けます。

本題ですが、アドバイス頂いた通り、やってみましたら全て共通化することができました。
ありがとうございました。

また、何かありましたら宜しくお願い致します。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加