C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[7]: datagridviewのスクロールバー表示非表示を検知


(過去ログ 99 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■58746 / inTopicNo.1)  datagridviewのスクロールバー表示非表示を検知
  
□投稿者/ hs (234回)-(2011/04/25(Mon) 15:24:54)

分類:[VB.NET/VB2005 以降] 

VB2008

いつもお世話になっております。

datagridviewのスクロールバー表示・非表示するタイミングを検知したいのですが、
datagridviewのイベントにそれらしきものが見つかりませんでした。
表示・非表示のタイミングを検知する方法はありますでしょうか?

よろしくお願いします。
引用返信 編集キー/
■58747 / inTopicNo.2)  Re[1]: datagridviewのスクロールバー表示非表示を検知
□投稿者/ 風太郎 (4回)-(2011/04/25(Mon) 16:38:24)
No58746 (hs さん) に返信
> VB2008
>
> いつもお世話になっております。
>
> datagridviewのスクロールバー表示・非表示するタイミングを検知したいのですが、
> datagridviewのイベントにそれらしきものが見つかりませんでした。
> 表示・非表示のタイミングを検知する方法はありますでしょうか?
>
> よろしくお願いします。

DataGridViewで、スクロールバーの表示/非表示が変わる際のイベントが見つかりませんでしたので
以下の様な手法を取って検証を行ったところ、御要望を満たすことが出来たと思われますので、その手法を記載しておきます。

@DataGridViewのスクロールバーをVScrollBarにキャストする(キャストという言葉で良いのだろうか・・・)
AVScrollBarにキャストすればVisibleプロパティを読む事が出来るようになる
BDataGriwViewのイベントより、行が追加/削除された場合に、Aの情報を取得する

*Bのタイミングは必要に応じて加減して頂ければいいかと思います。

以上
引用返信 編集キー/
■58748 / inTopicNo.3)  Re[2]: datagridviewのスクロールバー表示非表示を検知
□投稿者/ みきぬ (962回)-(2011/04/25(Mon) 17:03:33)
> AVScrollBarにキャストすればVisibleプロパティを読む事が出来るようになる

もしかしたら、VScrollBar の VisibleChanged イベントを拾えるかも?
※未検証
引用返信 編集キー/
■58749 / inTopicNo.4)  Re[3]: datagridviewのスクロールバー表示非表示を検知
□投稿者/ shu (646回)-(2011/04/25(Mon) 17:23:29)
No58748 (みきぬ さん) に返信
>>AVScrollBarにキャストすればVisibleプロパティを読む事が出来るようになる
> 
> もしかしたら、VScrollBar の VisibleChanged イベントを拾えるかも?
> ※未検証

検証してみました。

        For Each vsc In DataGridView1.Controls.OfType(Of VScrollBar)()
            AddHandler vsc.VisibleChanged, AddressOf vsc_VisibleChanged
        Next

スクロールバーの表示、非表示でvsc_VisibleChangedが実行されました。

引用返信 編集キー/
■58750 / inTopicNo.5)  Re[4]: datagridviewのスクロールバー表示非表示を検知
□投稿者/ 風太郎 (5回)-(2011/04/25(Mon) 17:35:52)
2011/04/25(Mon) 17:36:21 編集(投稿者)

No58749 (shu さん) に返信
> ■No58748 (みきぬ さん) に返信
> >>AVScrollBarにキャストすればVisibleプロパティを読む事が出来るようになる
>>
>>もしかしたら、VScrollBar の VisibleChanged イベントを拾えるかも?
>>※未検証
>
> 検証してみました。
>
> For Each vsc In DataGridView1.Controls.OfType(Of VScrollBar)()
> AddHandler vsc.VisibleChanged, AddressOf vsc_VisibleChanged
> Next
>
> スクロールバーの表示、非表示でvsc_VisibleChangedが実行されました。

遅ればせながら、私も検証してみました。
shu様の御報告通り実行されました旨、報告申し上げます。

みきぬ様、shu様ありがとうございます。以上。


引用返信 編集キー/
■58753 / inTopicNo.6)  Re[5]: datagridviewのスクロールバー表示非表示を検知
□投稿者/ hs (235回)-(2011/04/25(Mon) 20:05:58)
■(風太郎 さん) に返信
■(shu さん) に返信
■(みきぬ さん) に返信

いつもありがとうございます。

>datagridviewのスクロールバー表示・非表示するタイミングを検知したい
という今回の質問ですが、ご回答いただいとおり、取得する事が出来ました。ありがとうございます。
しかし、せっかくお時間を取って頂いたのですが、今回、自分の意図する動きとは、見当違いの質問をしてしまいました。m(__)m
大変申し訳ありません。

現在、DatagridviewのColumnHeader(Panelで作成)を、自前で作成しています。
これは、ヘッダーで色々な設定を行えるようにするためです。

スクロール時には、以下のコードでヘッダーの位置をDatagridviewに合わせて移動する事はできています。
Private Sub Datagridview_Scroll(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ScrollEventArgs) Handles Datagridview.Scroll
  If e.ScrollOrientation = ScrollOrientation.HorizontalScroll Then Me.Panel.Left = e.NewValue
End Sub

しかし、フォームのリサイズ時など、スクロールバーの表示・非表示の切り替わりの際、
PanelのLeftを上記でいうe.NewValueの値にする方法が判りません。

今回の質問内容のように、スクロールバーの切替えのタイミングを知る事で、Me.Panel.Leftをe.NewValueに設定し直す事が出来ると思い
質問に至りましたが、検討ちがいのようでした。

質問内容が変わってしまいますが、
スクロールバーの表示切替時や、スクロール時に自前のヘッダーを、Datagridviewの位置に合わせたいのですが、どのようにすべきか見当もつきません。
判りずらい質問ですが、どのような解決策があるでしょうか?

よろしくお願いします。
引用返信 編集キー/
■58762 / inTopicNo.7)  Re[6]: datagridviewのスクロールバー表示非表示を検知
□投稿者/ shu (648回)-(2011/04/26(Tue) 08:08:39)
No58753 (hs さん) に返信

HScrollの方を同様の方法でさがしてValueをみれば出来るんじゃないかな?(未検証)
引用返信 編集キー/
■58765 / inTopicNo.8)  Re[6]: datagridviewのスクロールバー表示非表示を検知
□投稿者/ 風太郎 (6回)-(2011/04/26(Tue) 09:22:10)
No58753 (hs さん) に返信
> ■(風太郎 さん) に返信
> ■(shu さん) に返信
> ■(みきぬ さん) に返信
>
> いつもありがとうございます。
>
> >datagridviewのスクロールバー表示・非表示するタイミングを検知したい
> という今回の質問ですが、ご回答いただいとおり、取得する事が出来ました。ありがとうございます。
> しかし、せっかくお時間を取って頂いたのですが、今回、自分の意図する動きとは、見当違いの質問をしてしまいました。m(__)m
> 大変申し訳ありません。
>
> 現在、DatagridviewのColumnHeader(Panelで作成)を、自前で作成しています。
> これは、ヘッダーで色々な設定を行えるようにするためです。
>
> スクロール時には、以下のコードでヘッダーの位置をDatagridviewに合わせて移動する事はできています。
> Private Sub Datagridview_Scroll(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ScrollEventArgs) Handles Datagridview.Scroll
>   If e.ScrollOrientation = ScrollOrientation.HorizontalScroll Then Me.Panel.Left = e.NewValue
> End Sub
>
> しかし、フォームのリサイズ時など、スクロールバーの表示・非表示の切り替わりの際、
> PanelのLeftを上記でいうe.NewValueの値にする方法が判りません。
>
> 今回の質問内容のように、スクロールバーの切替えのタイミングを知る事で、Me.Panel.Leftをe.NewValueに設定し直す事が出来ると思い
> 質問に至りましたが、検討ちがいのようでした。
>
> 質問内容が変わってしまいますが、
> スクロールバーの表示切替時や、スクロール時に自前のヘッダーを、Datagridviewの位置に合わせたいのですが、どのようにすべきか見当もつきません。
> 判りずらい質問ですが、どのような解決策があるでしょうか?
>
> よろしくお願いします。

御返信が遅くなり申し訳ありません。
基本、業務中のみしかPCをみていませんので(ぁ・・・

イベントのトリガーとしては
@スクロールバーの表示・非表示の切り替わり
Aフォームがリサイズされた時

実際の処理は
@パネルの左上の位置を、DataGridViewの左上と合わせる

質問の内容を100理解出来ていないので、検討違いの回答かもしれませんが・・・

ところで、特別な機能を持たせたColumnHeaderを利用したいのであれば
DataGridViewColumnを継承した方が良いのでは・・・と。
引用返信 編集キー/
■59037 / inTopicNo.9)  Re[7]: datagridviewのスクロールバー表示非表示を検知
□投稿者/ hs (236回)-(2011/05/10(Tue) 10:35:52)
■(風太郎 さん) に返信
■(shu さん) に返信

お返事大変遅くなりました。m(__)m

アドバイス頂いた内容で無事に出来ました。
ありがとうございます。

また何かあった時はよろしくお願いします。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -