- 日時: 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で確認したコードです。
|