はじめまして
座標入力データを簡単にするのにエクセルの様にキーを打ち込んだら
セルに表示したいのですが良い方法は、ないでしょうか?
座標番号 x座標 y座標
1 12.5 50
2 20.5 60.3
こんな感じのセルを入力したいのですが?
よろしくお願いします。
初めて投稿させていただきます。
どうかよろしくお願いします。
さて、ご要望はMSFlexGridコントロールの事でよろしかったですか?
(グリッドも4つぐらいあるので・・・^^;)
Excelのように使いたいとの事ですので、
アクティブのセルにキーボードから入力したいということでよいですか?
(良いとしておきます。^^;)
方法はいくつかありますが、FlexGrid単体で行う場合を書いておきます。
基本的に、FlexGridのKeyPressイベントに以下のコードで文字は入力されます。
Private Sub grdTEST_KeyPress(KeyAscii As Integer)
Dim dlngSetRow as long
Dim dlngSetCol as long
dlngSetRow = grdTEST.Row
dlngSetCol = grdTEST.Col
grdTEST.TextMatrix(dlngSetRow, dlngSetCol) = grdTEST.TextMatrix(dlngSetRow, dlngSetCol) & Chr(KeyAscii)
End Sub
(要は押されたキーに対応する文字をプログラムでセットしているだけ)
これで、全角でも対応します。(ステップ実行だと通りませんが)
ただし、このままですと文字でないキー(BackSpaceやEnterなど)
もセルに送ってしまい、「・」が表示されてしまいます。
また、セルの文字の削除処理もできないので、使い勝手が悪すぎます。
そこで、できるだけエクセルのセルの使い勝手に近づける為にコードを追加する必要があります。
まず、先ほどのKeyPressイベントを下のように書き換えます
Private Sub grdTEST_KeyPress(KeyAscii As Integer)
Dim dlngSetRow as long
Dim dlngSetCol as long
dlngSetRow = grdTEST.Row
dlngSetCol = grdTEST.Col
If KeyAscii = 8 Then 'バックスペースの場合右から1文字消します
If Len(grdTEST.TextMatrix(dlngSetRow, dlngSetCol)) <> 0 Then
grdTEST.TextMatrix(dlngSetRow, dlngSetCol) = Left(grdTEST.TextMatrix(dlngSetRow, dlngSetCol), Len(grdTEST.TextMatrix(dlngSetRow, dlngSetCol)) - 1)
End If
elseIf KeyAscii >= 0 And KeyAscii <= 31 Then
'この番号は文字ではないので何もしません
'他にも文字ではないコード番号もあります。
'追加して置いてください。
Else
grdTEST.TextMatrix(dlngSetRow, dlngSetCol) = grdTEST.TextMatrix(dlngSetRow, dlngSetCol) & Chr(KeyAscii)
End if
End Sub
また、KeyDownイベントに以下の処理を追加します。
Private Sub grdTEST_KeyDown(KeyCode As Integer, Shift As Integer)
Dim dlngSetRow as long
Dim dlngSetCol as long
dlngSetRow = grdTEST.Row
dlngSetCol = grdTEST.Col
'カット&ペースト対応処理
If Shift = 2 Then
If KeyCode = 86 Then 'V
grdTEST.TextMatrix(dlngSetRow, dlngSetCol) = Clipboard.GetText(vbCFText)
Exit Sub
ElseIf KeyCode = 67 Then 'C
Clipboard.SetText grdTEST.TextMatrix(dlngSetRow, dlngSetCol), vbCFText
Exit Sub
End If
End If
If KeyCode = 46 Then 'Deleteキーでのセル文字列全削除
grdTEST.TextMatrix(dlngSetRow, dlngSetColl) = ""
End if
End Sub
これでまぁ、Excelとは行かなくてもかなり入力用として使えるんじゃないですかね。
思いっきりはずしてたらすいません・・・
テスト環境
VB6.0 SP5
Win2000Pro
おりべ様さっそくのご教示有難うございます。
早速試してみまして、入力が出来るようになりました。
今後共よろしくお願いします。
あとは、少し機能追加を付け加えたいので頑張ります。
HP拝見させていただきました。
お役に立てて幸いです。
また、よろしくお願いします。
ツイート | ![]() |