【VB6】フレックスグリッドの余白部分の使い方について

このQ&Aのポイント
  • MSFlexGridの余白部分について質問があります。現在、グリッドにデータを設定していますが、行の無い余白部分をクリックした時にカレント行の選択を解除したいです。
  • 余白部分をクリックした時にカレント行の選択を解除する方法について検討しています。しかし、グリッドには.Hittestのプロパティがなく、余白部分が押されたことを知る方法が分かりません。
  • MSFlexGridの余白部分をクリックした時にカレント行の選択を解除する方法について教えてください。
回答を見る
  • ベストアンサー

【vb6】フレックスグリッドの余白部分

お世話になります。 MSFlexGridの余白部分について質問があります。 (セルが全く無いデフォルトで灰色の地帯です) 現在、グリッドに数行のデータを設定して、 クリックしたらカレント行全体が選択されるようにしています。 問題は行の無い余白部分のことなのですが、もし○行目をカレントとして選択している時、 次に余白部分をクリックしたら今の行選択を解除したいと考えているのですが、上手くいきません。 ”行選択を解除する”というのは.Rows=0で出来そうなのですが、 グリッドにはリストビュー等のように.Hittestのプロパティがない為余白部分が押されたことを知るには どうしたら良いか検討が付きません。 どなたか知っている方がいらっしゃれば教えてください。 よろしくお願いします。

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

  • ベストアンサー
  • ShowMeHow
  • ベストアンサー率28% (1424/5027)
回答No.1

マウスが押されたときに、どこで押されたかを調べておいて、余白であったら .rowや.rowselなどを強制的に指定しちゃうという手があるね。 下記コードはそのものではないけどきっと参考になるでしょう。 Private mblnIgnoreDblClick As Boolean Private Sub MSFlexGrid1_DblClick() If Not mblnIgnoreDblClick Then Debug.Print MSFlexGrid1.MouseRow, MSFlexGrid1.MouseCol End If End Sub Private Sub MSFlexGrid1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) mblnIgnoreDblClick = (y + 60) > (MSFlexGrid1.CellTop + MSFlexGrid1.CellHeight) End Sub

参考URL:
http://www.vbforums.com/showthread.php?t=355726
sakruaw
質問者

お礼

回答ありがとうございます。 上記のコードを使わせて頂いた所、ちゃんと上手くいきました。 やはり質問のようなことを実現するプロパティは用意されていないのでしょうか。 あまりややこしい手段を取りたくないので、これで良いかちょっと考えています。 もう少し分かりやすい方法がありましたら教えてください。

その他の回答 (1)

  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.2

単純に座標計算しか思い浮かびません。 セル幅×セル数の単純計算とマウスの座標 x y だけだと、 スクロールできるほどデータが多い場合に判定できないので、 表示しているセルの情報も考慮しないといけないのかな。 TopRow とか LeftCol ?・・・固定セルも考慮に入れないと いけないのかも? #1は 余白部分を選択してもカレントセルが動く事を利用して その下方向範囲外だったら。。。というアイデアですね。 右方向範囲外の条件を加えるだけで、とりあえずは それっぽく動きそうです。穴が無いとは言い切れないけど、 ざっと動かした限りでは問題なさそうでした。 カレントセルの動きをプログラムで制限してるとかだと だめだけどね。

sakruaw
質問者

お礼

>単純に座標計算しか思い浮かびません。 やはりそうなんですか・・・ 自分も散々探して回っているのですが、思うようなものは見つかっていません。 座標から求めるのがもっとも正しい手法なのかもしれないですね。 回答ありがとうございます。

関連するQ&A

  • VB.net データーグリッドビューで余白を無くし

    VB.net 2010でプログラムを開発して居ます。 VB.net データーグリッドビューで余白を無くしたいのですが、何か良い方法はあるでしょうか。 アンカーで左右上下を設定して、オートサイズに設定すれば余白が無くなる様ですが、1つのプログラムで複数の表を作成して居る為、これだと各表のセルの幅が表によって異なってしまい、見栄えが良くありません。 各セルの幅とスクロールバー、及び一番左の列の幅を足して、その幅をデーターグリッドビューの幅とすれば余白は無くなると思うのですが、一番左の列とスクロールバーの幅の求め方が分かりません。 どなたか解決策をご存知の方、お教え下さい。 宜しくお願い致します。 添付のAの部分を無くしたいのです。 Bの幅とスクロールバーの幅が判れば何とか成ると思うのですが。

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

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

  • MSFlexGrid

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

  • 【AviUtl】灰色余白ができる

    AviUtlで動画を作っていたのですが、気づかない内にキーを押しながらクリックしたせいか、 周りに灰色の余白みたいなのがでてしまいました。 プレビューしてみると最初に一瞬だけ余白が付いた状態で表示されますが、 2~3秒経過すると元に戻ります。 やはり気になるので元に戻したい(灰色部分を消して拡大したい)のですが、 直し方をご存知の方、教えてください!

  • グリッドにデータベースの更新を反映させるには?

    VB6.0SP5で開発しています。 単純なデータベースの更新プログラムなんですが、 更新した後にRefreshやRebindしても更新内容が反映されません。 ADODCをつかってグリッドに内容を表示しているのですが、 グリッドをクリックして選択した行のレコードを削除します。 そのあとに、ADODCをRefreshしてもグリッドをRefreshしても反映されないんです。 データは削除されています。 DataGrid,TDBGridの二つのグリッドで試したんですが、 どっちもだめでした。 みななんどうやって反映させているのでしょうか? どうぞ、よろしくお願いしますm(_ _)m

  • グリッドビューで二つの選択ボタンを配置し、それぞれで選択した行の主キーを取得したいのですが、方法が分かりません。

    宜しくお願い致します。 グリッドビューで二つの選択ボタンを配置し、それぞれで選択した行の主キーを取得したいのですが・・・どのようにしたらいいのか分かりませんので詳しい方に教えていただけたらと思います。 一つ目の選択ボタンに関しては“commandfield”から“選択”を選び配置すればその行にあるボタンをクリックした際に主キーを取得することが可能であるというのは分かるのですが、 もう一つ選択ボタンを配置して、一つ目とは少し異なった動作をさせることができたらと思っております。 その為に“テンプレートフィールド”を使用して、その中に“button”を配置し、“commandname”プロパティに“select”を選んでおけば行の情報は取得することができるのですが、その行の主キーとなる“列”の情報も取得できたらと思っているのですが、検討がつかない状態です。 ご存知の方がおられましたら、御教授いただけたらと思います。 宜しくお願い致します。

  • エクセル、選択した行・列の中から部分的に選択解除

    エクセル2010です。 例えば、ある行や列の書式設定をまるごと変えたいが、その中に部分的に書式を変えたくないセルがぽつぽつ混ざっているとします。 そういうときに行や列を選択し、書式を変えたくないセルだけを選んで選択解除するということはできませんか? 単純に、マウスで該当のセルをctrl+クリックしても、そこの部分の色は変わるものの選択解除にはなりませんでした。 方法をご存知の方がいらっしゃいましたらご指南いただけますでしょうか。 よろしくお願いします。

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

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

  • 秀丸エディタで、ラスト数行を残して、大部分を選択するTIPSを教えてください。

    たとえば、300行くらいあるテキストがあるとします。ラスト5行を除いて、上の295行を選択しようとしたとき、MS-Word でしたら、Ctrl+A で全選択、さらに、選択したいエリアの最終部分を、Shiftキーを押しながらクリックすれば、目的を達することができます。 今、なにげなく、秀丸エディタで同じようなことをやろうとしたら、クリックしたとたん、選択が解除されてしまいました。 どこか設定を変えれば、同じ動作で選択できるのでしょうか。 あるいは、別の「大部分選択」のコツがあるのでしょうか? 私は、なるべくキーボード主体で操作したいタイプの人間です。 なにか良い方法がありましたらご教示ください。よろしくお願いします。

  • ADODCとデータグリッドを連動させるには?

    WINDOWS2000,VB6,SP5で開発しています。 グリッドのデータソースにADODCコントロールを指定して、 これらを連動させたいのですが、どうもできません。 やりたいのは、レコードの削除です。 ADODC1.RecordSet.Delete で、カレントレコードを削除させてるのですが、 グリッドで削除したい行を選択しただけでは、 ADODCのカレントレコードは動いてないようなのです。 なので、ADODCの一番初めの行が削除されてしまい、困ってます。 こんな初心者なわたくしですが、どうぞよろしくお願いしますm(_ _)m

専門家に質問してみよう