MSFlexGridで↑や↓押下時の処理

このQ&Aのポイント
  • VB6.0でのMSFlexGridの「↑」や「↓」押下時の処理方法について教えてください。
  • MSFlexGridで行を選択した際に、キーボードの「↑」や「↓」押下時に処理を拾えない場合、keyDownイベントを使用して行のデータをテキストボックスに表示する方法があります。
  • よりスマートな方法があれば教えていただきたいです。
回答を見る
  • ベストアンサー

MSFlexGridで↑や↓押下時の処理

現在VBの勉強をしております(WindowsXp、VB6.0) MSFlexGridの行を選択すると、行のデータをテキストボックスへ表示する、といった処理を実装したんですが、キーボードの「↑」や「↓」押下時に、選択行は変わるんですが、クリックイベントでもフォーカスイベントでも処理を拾えません・・・。 まだ試してはいないんですが、keyDownイベントで、「↑」「↓」を判断し、更にグリッドにフォーカスが存在する場合に、1行上(または下)のデータをテキストボックスに表示する。 という処理をしないと不可能でしょうか? どう考えても上記の方法はスマートでは無いなぁと思い、何か良い方法があれば教えていただきたく質問させていただきました。 よろしくお願いいたしますm(__)m

  • ya-cha
  • お礼率68% (184/268)

質問者が選んだベストアンサー

  • ベストアンサー
noname#140971
noname#140971
回答No.3

Private Sub MSFlexGrid1_SelChange()   Static intNowRow As Integer <----- 静的変数として現行行を記憶する変数を宣言   Dim intNewRow As Integer  <----- カーソル移動後の行を格納する変数を宣言      intNewRow = MSFlexGrid1.Row  <----- カーソル移動後の行を intNewRow に代入   If intNewRow <> intNowRow Then <----- 記憶している現行行と新しい行の行番号を比較     intNowRow = intNewRow <----- 新しい行の値をを現行行を記憶する intNowRow に代入     MsgBox intNowRow <--------- MsgBox 関数で  intNowRow を表示。   End If <----------------------- End If End Sub カーソル移動は上下だけでなく左右もあります。 そのために、カーソルが移動したからと言って新しい行へ移動したかどうかは不明です。 で、上下移動したかどうかを知るには新しい行番号と現行の行番号との比較が必要です。 新しい行番号と現行の行番号ろが異なる限りで<行のデータをテキストボックスへ表示する>を。 そこが MsgBox関数の位置に書くべきコードです。

ya-cha
質問者

お礼

ご丁寧にありがとうございますm(__)m 参考にさせていただき、行いたい処理が実現出来ました! 本当にありがとうございますm(__)m

その他の回答 (2)

noname#140971
noname#140971
回答No.2

補足: RowColChange()も・・・。

noname#140971
noname#140971
回答No.1

>クリックイベントでもフォーカスイベントでも処理を拾えません・・・。 ・クリックしていないので当然です。 ・フォーカスが変化しないので当然です。 Private Sub MSFlexGrid1_SelChange()   Static intNowRow As Integer   Dim intNewRow As Integer      intNewRow = MSFlexGrid1.Row   If intNewRow <> intNowRow Then     intNowRow = intNewRow     MsgBox intNowRow   End If End Sub

ya-cha
質問者

お礼

ご回答ありがとうございます。 >・クリックしていないので当然です。 >・フォーカスが変化しないので当然です。 やhりそうですよね・・・。 コードを記載していただきありがたいのですが、何のことでしょうか? グリッドにチェンジイベントって感じだと思うのですが、よく分かりません・・・。

関連するQ&A

  • MSFlexGrid 行選択状態

    現在VBを勉強しております。(WindowsXP、VB6.0) http://oshiete1.goo.ne.jp/qa996239.html ↑の質問と同じ内容で悩んでいるんですが、回答を見ても理解出来ず、解決出来ていません(>_<) 1.処理起動時に、テキストファイルからデータを読み込み、グリッドへ表示した後。 2.ソートした後。 3.「検索」処理にてデータを絞り込んで表示した後。 以上3点の時に、行選択状態でなくなってしまうので、それを修正したいんですが、方法が分かりません(;_:) 現在は、グリッドのフォーカスイベントに MSFlexGrid1.SelectionMode = flexSelectionByRow を設定しているだけです。 以上、よろしくお願いいたしますm(__)m

  • MSFlexGridとDataGridの違いについて

    VBの勉強をしております。 WindowsXP、VB6.0です。 標記の件について質問させてください。 MSFlexGridは、グリッドの結合や色を付けたりするのに適している。 DataGridはエクセルのように、直接グリッド内を編集できるが、結合は無理で、色付けの設定はグリッド単位では指定できない。 2つのグリッドのどちらを使えば良いのか分からず、自分で調べてみた所、以上のような違いがあるのでは、という所までは分かりました。 行いたい処理は、 ・ファイルからデータを取り出し、グリッドへ表示。データの追加、修正、削除を行い、ファイルへ保存する。 機能として、検索とソートを行える。 また、データをクリックした際に、セルではなく、行全体の色を変更し、「行が選択されている」という見た目にしたい。 以上のような考えがあるのですが、実装が簡単なのはどちらのグリッドなのでしょうか? また、他に上記のような処理が可能なコントロールがあれば教えていただけないでしょうか? 以上、初心者なもので、文章が理解しづらいかもしれないですが、よろしくお願いいたします。

  • MSFlexgrid

    はじめましてVB初心者です。 MSFlexgridでアクセスDBの内容を取り込んで 別のフォームのテキストに表示させたいのですが MSFlexgridの欲しい行をクリックしても表示はテーブルの 一番上のになってしまいます。 欲しい行は色が変わるので選択できていると思うのですが・・・ どなたか教えてください。 環境はwin2000,VB5(SP3),ACCESS97です。 宜しくお願いします

  • MSFlexGrid

    VB6SP6を用いています。MSFlexGridですが、固定行をラベルに用いています。このグリッドをクリックして処理を行っています。固定行では、クリックを無視してほしいのです。固定行をクリックしても、grid.Rowの値は0ではなく、押してもいない、1が返ってきます。本来はクリックしたくない場所ですが、処理を行う1行目をクリックしたことと同じになってしまいます。 ラベル部分をクリックしないようにと伝えていますが、やはり具合が悪いです。 良い、回避方法はないでしょうか。

  • タブキー押下時のイベントをひろいたい。

    テキストボックスにフォーカスがあり、TABキーが押された時のイベントをひろいたいのですが、KeyPressもKeyDownもイベントが発生しません。 (If KeyCode = vbKeyTab Then  MsgBox "タブキー" End If  If KeyAscii = vbKeyTab Then ~ のようなコードを記述してもメッセージが表示されない) ヘルプにはKeyDownでは発生しないという記述がありますが、KeyPressではイベントがひろえるようなことが書いてあるのにひろえないので困っています。 なにかよい方法はありませんでしょうか。 わかりにくい説明で申し訳ありませんが困ってます。 宜しくお願いします。

  • MSFLEXGRIDについて

    MSFLEXGRIDを使ってデータベースの内容を表示させようと考えています。 使い方としてはデータベースからfilterをつかって対象を絞ったデータをMSFLEXGRIDで項目を並び替えて表示させようとしたときにうまくいきません。 sqlで項目を並び替えてdatagridを使うしかないのでしょうか? なぜMSFLEXGRIDにこだわるかというと表示させた結果に対し、特定の行をダブルクリックすると別のフォームに移動するといったプログラムを作ろうとしているため、この方法がいいのかなと考えているからです。 どうかご教授のほどよろしくお願いします。 サーバー 2000 SQLサーバ2003 開発クライアントPC W2K VB6

  • VB6のMsFlexGridコントロールについて

    取得したデータ数分の行にデータを表示して その後10カラム目のデータでソートしているのですが 行選択状態の表示が消えてしまいます。 MSFlexGrid1.Col = 10   MSFlexGrid1.Sort = flexSortGenericDescending '* 降順にソート MSFlexGrid1.Row = 1 どうやら、Col、Rowプロパティに値を設定した時点で消えているようです。 これらをやらないと1行目が選択状態と なっています。表示後カーソルでクリックすると 行選択状態になります。 表示時点で行選択状態にさせたいのですがなにか 手段があれば教えてください。 設定しているプロパティは下記の通りです。 HighLight=1:(選択を強調表示) SelectionMode=1:(行全体を選択) よろしくおねがいします。

  • MSFlexGrid

    エクセル上にMSFlexGridを表示させたいのですが、コントロールの一覧に表示されません。 エクセルに付属のVisualBasicEditor(VB6?)でDBからデータ取得し、MSFlexGridに表示させたいと思っています。 色々調べては見たのですが、MSFlexGridをエクセル上に配置するというものが検索できませんでした。 友人のエクセルにはエクセルのコントロールにMSFlexGridが表示されています。 おそらく何かのライブラリ?か何かが必要だと思うのですが知っている方いましたらご教授ください。

  • EXCELのデータをMSFlexGridへ

    VB6.0で開発しています。 EXCELのデータをMSFlexGridへ表示しています。 下のように表示出来たのですが 特定の行だけ表示したいのですがどうすればいいでしょうか? 例えばA列とC列とD列といった場合。 よろしくお願いします。

  • F2+Ctrl押下時のイベント記述方法

    VB6を使用しています。 F2+Ctrlを同時に押下した場合の処理の記述がうまくいきません。 Form_KeyDownイベントで下記のように記述しようと考えたのですが、KeyCodeに17が入ってしまいうまくいきません。 アドバイスをお願いします。 ----------------------- select case KeyCode  case vbKeyF2   If Shift = 2 Then   'Ctrl+F2押下時   ***処理   End If ※他のファンクションボタンの処理もあるのでcase文にしています。

専門家に質問してみよう