tagCANDY CGI VBレスキュー(花ちゃん) - VBレスキュー(花ちゃん)の投稿サンプル用掲示板 - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の投稿サンプル用掲示板
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
IPアドレス等の入力用テキストボックス(VB6.0) ( No.0 )  [親スレッドへ]
日時: 2007/07/15 13:28
名前: 花ちゃん

***********************************************************************************
* カテゴリー:[通信][インターネット][]                                            *
* キーワード:桁区切り,コンマ,IPアドレス,,,                     *
***********************************************************************************

-----------------------------------------------------------------------------
Re:IPアドレスの様な小数点の場合  投稿者:ゆう(U) [1999/02/18(木)12:12分]
-----------------------------------------------------------------------------

●長文失礼します

4つのテキストボックスを使用すると簡単に出来ませんか?

コントロール)
ピクチャボックス1個(Picture1)
テキストボックス1個(Text1)
ラベル     1個(Label1)

デザイン時に設定する項目)
ピクチャボックス−.Appearance  = 0 - フラット
テキストボックス−.Alignment   = 2 - 中央揃え
         .BorderStyle = 0 - なし
         .MultiLine   = True
         .Index       = 0
ラベル     −.Index       = 0

コード)
Private Sub InitIPAddress()
  Dim i As Long
  Dim sngWidth As Single
  Dim sngHeight As Single

  With Picture1
'    .Appearance = 0                  'デザイン時に設定
    .AutoRedraw = False
    .BackColor = vbWindowBackground
    .ScaleMode = vbTwips
    With .Parent
      sngWidth = .ScaleX(1995, vbTwips, .ScaleMode)
      sngHeight = .ScaleY(330, vbTwips, .ScaleMode)
    End With
    .Move .Left, .Top, sngWidth, sngHeight
    .TabStop = False
  End With

  For i = 1 To 3&
    Load Text1(i)
  Next i
  For i = 0& To 3&
    With Text1(i)
      Set .Container = Picture1
'      .Alignment = vbCenter          'デザイン時に設定
'      .BorderStyle = vbBSNone        'デザイン時に設定
      .FontName = "MS ゴシック"
      .FontSize = 9!
      .MaxLength = 3&
'      .MultiLine = True              'デザイン時に設定
      .Move 45! + i * 495!, 45!, 330!, 195!
      If i > 0 Then
        .TabStop = False
      Else
        .TabStop = True
      End If
      .Text = "0"                     '初期値設定
      .Visible = True
    End With
  Next i

  For i = 1 To 3&
    Load Label1(i)
  Next i
  For i = 0& To 2&
    With Label1(i)
      Set .Container = Picture1
      .BackStyle = 0
      .BorderStyle = vbBSNone
      .Caption = "."
      .FontName = "MS ゴシック"
      .FontSize = 9!
      .Move 405 + i * 495, 45, 120, 180
      .Visible = True
    End With
  Next i
End Sub

Private Sub Text1_Change(Index As Integer)
  Dim strTemp As String

  If Me.Visible = False Then Exit Sub
  strTemp = Text1(Index).Text
  strTemp = CStr(CInt(IIf(Len(strTemp) > 0, strTemp, "0")))
  Select Case CInt(strTemp)
    Case 0 To 255
    Case Else
      MsgBox strTemp & " は無効なエントリーです。" & vbCrLf & "このフィールドの値は" & _
                       " 0 から 255 までにしてください", vbExclamation
      Text1(0).Tag = ""
      Text1(Index).SetFocus
  End Select
End Sub

Private Sub Text1_GotFocus(Index As Integer)
  If Len(Text1(0).Tag) > 0& Then
    Select Case CLng(Text1(0).Tag)
      Case vbKeyLeft
        Text1(Index).SelStart = Len(Text1(Index).Text)
      Case vbKeyRight
        Text1(Index).SelStart = 0&
      Case Else
    End Select
    Text1(0).Tag = ""
    Exit Sub
  End If

  With Text1(Index)
    .SelStart = 0&
    .SelLength = Len(.Text)
  End With
End Sub

Private Sub Text1_KeyPress(Index As Integer, KeyAscii As Integer)
  Select Case KeyAscii
    Case 8              'BS/DELキー
    Case 48 To 57       'Asc("0") To Asc("9")
      If Len(Text1(Index).Text) = 2& Then
        Text1(0).Tag = KeyAscii
        Call Text1_Change(Index)
        If Len(Text1(0).Tag) = 0& Then Exit Sub
        Text1(0).Tag = ""
        If Index < Text1.Count - 1 Then
          Text1((Index + 1) Mod Text1.Count).SetFocus
        End If
      End If
    Case Else           'Enterキーの処理を含む
      KeyAscii = 0
  End Select
End Sub

Private Sub Text1_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer)
  Select Case KeyCode
    Case vbKeyLeft
      If Text1(Index).SelStart = 0& Then
        Text1(0).Tag = CInt(KeyCode)
        KeyCode = 0
        If Index > 0 Then
          Call Text1_Change(Index)
          If Len(Text1(0).Tag) = 0& Then Exit Sub
          Text1((Text1.Count + Index - 1) Mod Text1.Count).SetFocus
        End If
      End If
    Case vbKeyRight
      If Text1(Index).SelStart = Len(Text1(Index).Text) Then
        Text1(0).Tag = CInt(KeyCode)
        KeyCode = 0
        If Index < Text1.Count - 1& Then
          Call Text1_Change(Index)
          If Len(Text1(0).Tag) = 0& Then Exit Sub
          Text1((Index + 1) Mod Text1.Count).SetFocus
        End If
      End If
    Case Else
      Text1(0).Tag = ""
  End Select
End Sub

若干の動作やサイズの違いはありますが、これでほとんどTCP/IP設定の
アドレスの入力部分のコントロールと同じ動作となります。

無効表示(Enabled=False)はテキストボックスに対して行えばそっくり・・・

※一部動作が異なる部分もありますが、あまり気付かないでしょう。

後は自分でカスタマイズしてみて下さい。

●ちなみにWin95B/VB5.0(SP3)proで確認したコードです。




 [スレッド一覧へ] [親スレッドへ]