• ベストアンサー

MSFlexGrid

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

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

  • ベストアンサー
  • GatyaBu
  • ベストアンサー率11% (8/70)
回答No.3

#2です。 デバッグはどうおこなっていますか?MouseRowはデバッグ中にマウスが 動くと答えが変わったりするので。 私の方ではMsFlexGridをFormに貼り付けてテストしたところ、 うまく切り抜けてるようです。 以下に貼り付けますので参考までに。 あとMouseRowについてはヘルプもみて、どんな値が返るのか理解してくださいね。 (私の環境 WindowsXP VB6SP2) Private Sub Form_Load() With MSFlexGrid1 .Rows = 10 .Cols = 10 .FixedCols = 2 .FixedRows = 2 End With End Sub Private Sub MSFlexGrid1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) With MSFlexGrid1 If .MouseRow < 2 Then Exit Sub 'ここでは2行を固定行にしているので、固定行の位置の時、クリック処理をせず抜けるようにしています。固定行の時はMsgboxの処理はしないようにしています。 MsgBox .MouseRow End With End Sub

durian_sk
質問者

お礼

ありがとうございました。 解決できました。

その他の回答 (2)

  • GatyaBu
  • ベストアンサー率11% (8/70)
回答No.2

クリックイベント等で、 MouseCol MouseRowプロパティで判定されてはどうでしょうか? ヘルプでは、現在のマウス ポインタの位置を行と列の座標で 返します。とあるので、その値が、durian_skさんが固定行としている 行であれば、クリック処理をしないようにするとか・・・

durian_sk
質問者

お礼

ありがとうございます。 値を見たのですが、MouseRowがどこを押しても 14という値なのです。 クリック処理をしないようというのはどのようにするのでしょうか?

noname#22222
noname#22222
回答No.1

conX、conYの値は質問者で求めて下さい。 Dim mlngX As Single Dim mlngY As Single Const conX = 90 Const conY = 90 Private Sub MSHFlexGrid1_Click()   MsgBox MSHFlexGrid1.Row * Abs((mlngY > conY) * (mlngX > conX)) End Sub Private Sub MSHFlexGrid1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)   mlngX = x   mlngY = y End Sub

関連するQ&A

  • MSFlexgrid

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

  • MSFlexGridとDataGridの違いについて

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

  • MSFlexGridで↑や↓押下時の処理

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

  • MSHFlexGrid および MSFlexGrid に関して

    こんにちわ MSFlexGrid,HSHFlexGrid に関して下記の方法を調査中です。 ご存知の方いらっしゃいましたら、情報提供をよろしくお願い致します。 (1)固定行および固定列のグリッド線の色の設定。 (2)固定行でない行のスクロールの固定の方法。 ※エクセルのウィンドウの固定と同様の設定。 たびたび申し訳ありません。よろしくお願い致します。

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

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

  • MSFLEXGRIDについて

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

  • VB6 MSFlexGridとPictureBox

    お世話になります。 Visual Basic6.0(SP6)で開発している素人です。 (質問1) PictureBoxのBackColorが変色できません。 Picture1.BackColor = &H80FF80 '緑色。色は問いません。 PictureBoxは色の変更はできないものなんでしょうか? (質問2) MSFlexGridでexcelの内容をセル指定して表示できたのですが、 指定のMSFlexGridの行の色を変えられません。20行3列で、○行目の1~3列を 色を変えたいです。 MSFlexGrid1.Row = 2 MSFlexGrid1.BackColorSel = QBColor(11) MSFlexGrid1.CellForeColor = QBColor(11) いづれもうまくいきませんでした。。。 (質問3) MSFlexGridでexcelの内容をセル指定して表示できたのですが、行の高さを 変更できません。 MSFlexGrid1.RowHeight(-1) = 800  '標準の行高さ指定(-1で全部を変更) と、やっても MSFlexGrid1 .RowHeight(0) = 800 '0行目の高さを800に MSFlexGrid1 .RowHeight(1) = 800 '1行目の高さを800に と、やっても 一番上の行しか高さが変わりません。 優先順位は 質問3 > 質問1 > 質問2 です。 急いでいますので、どなたかお願いします!

  • MSFlexGrid 行選択状態

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

  • WinXPでMSFlexGridの表示が遅い

    VB6で作ったアプリをWin2Kで動かすと、それなりに動くのですが、WinXPで動かすとやたら遅くなります。 何が遅くなっているか調べたら、MSFlexGridの表示でした。 10列×100行くらいの表で、ROW指定して10列×10行くらい表示更新すると、7~8秒かかります。 (Win2Kだと2秒くらい) って、こんなもんですか? ちなみに、WinXPの方がCPU.グラフィック性能は上です。 どなたか教えてください。

  • VB6のMSFlexGridでセルをマージしたい

    お世話になります VB6のMSFlexGridでセルをマージしたいのですがうまくいきません 行イメージは以下になります。 ------------------ | AA | 1 | 2 | 3 |    ------------- |   | A | B | C | ------------------ | AA | 4 | 5 | 6 |    ------------- |   | D | E | F | ------------------ | BB | 1 | 2 | 3 |    ------------- |   | A | B | C | ------------------ | BB | 4 | 5 | 6 |    ------------- |   | D | E | F | ------------------ 1行目と2行目の先頭をマージしてtext="AA" 3行目と4行目の先頭をマージして上と同じtext="AA" 5行目と6行目の先頭をマージしてtext="BB" 7行目と8行目の先頭をマージして上と同じtext="BB" flexMergeFreeもMergeRowも試したつもりなのですが、うまくいきませんでした。 記述の順番なのかな? With oObjGrid .Col = 0 .Row = 0 .Text = "AA" .Row = 1 .Text = "AA" ' ※ここでマージ処理を試したつもり .Row = 2 .Text = "AA" .Row = 3 .Text = "AA" ' ※ここでマージ処理を試したつもり .Row = 4 .Text = "BB" .Row = 5 .Text = "BB" ' ※ここでマージ処理を試したつもり .Row = 6 .Text = "BB" .Row = 7 .Text = "BB" ' ※ここでマージ処理を試したつもり End With ※以下を色々な順番で試したのですが、だめでした .MergeCells = flexMergeFree .MergeRow(0) = True .MergeRow(1) = True .MergeCells = 2 'マージの指定 .MergeCells = 3 'マージの指定

専門家に質問してみよう