MSグリッドコントロールのセルに数値を入力するには?

解決


うっちゃん  2001-08-20 16:37:11  No: 103610  IP: [192.*.*.*]

はじめまして
座標入力データを簡単にするのにエクセルの様にキーを打ち込んだら
セルに表示したいのですが良い方法は、ないでしょうか?

座標番号    x座標    y座標
  1          12.5        50
  2          20.5        60.3
こんな感じのセルを入力したいのですが?
よろしくお願いします。

編集 削除
おりべ  2001-09-05 10:49:16  No: 103611  IP: [192.*.*.*]

初めて投稿させていただきます。
どうかよろしくお願いします。
さて、ご要望は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

編集 削除
うっちゃん  URL  2001-09-11 00:16:47  No: 103612  IP: [192.*.*.*]

おりべ様さっそくのご教示有難うございます。
早速試してみまして、入力が出来るようになりました。
今後共よろしくお願いします。
あとは、少し機能追加を付け加えたいので頑張ります。

編集 削除
おりべ  2001-09-12 16:02:13  No: 103613  IP: [192.*.*.*]

HP拝見させていただきました。
お役に立てて幸いです。
また、よろしくお願いします。

編集 削除