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

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

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

Re[3]: スクロールバー


(過去ログ 99 を表示中)

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

■58856 / inTopicNo.1)  スクロールバー
  
□投稿者/ やま (1回)-(2011/04/28(Thu) 14:52:09)

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

はじめまして。やまと申します。
VB.netでアプリを作っています。
datagridviewのスクロールバーのサイズを変更したいのですが、
やり方が分かりません。
できなければWindows自体のスクロールバーのサイズを変更することで
対応したいのですがその方法も分かりません。
よろしくお願いします。
引用返信 編集キー/
■58879 / inTopicNo.2)  Re[1]: スクロールバー
□投稿者/ shu (666回)-(2011/05/02(Mon) 07:56:55)
No58856 (やま さん) に返信

dataGridViewのスクロールバーにアクセスする事が出来るので、
高さを変更してみたところ戻ってしまいました。SizeChengedイベントが
2回走り1回目は変更した値になってるのですが2回目で元の値になっています。
DataGridView側で戻す処理をしているようです。Windowメッセージを取得して
やればなんとか出来るかもしれません。

引用返信 編集キー/
■59007 / inTopicNo.3)  Re[2]: スクロールバー
□投稿者/ やま (2回)-(2011/05/09(Mon) 08:49:56)
No58879 (shu さん) に返信
> ■No58856 (やま さん) に返信
>
> dataGridViewのスクロールバーにアクセスする事が出来るので、
> 高さを変更してみたところ戻ってしまいました。SizeChengedイベントが
> 2回走り1回目は変更した値になってるのですが2回目で元の値になっています。
> DataGridView側で戻す処理をしているようです。Windowメッセージを取得して
> やればなんとか出来るかもしれません。
>

shuさんありがとうございます。
「dataGridViewのスクロールバーにアクセスする」が実現できませんでした。
どうやればよいのでしょうか?
引用返信 編集キー/
■59008 / inTopicNo.4)  Re[3]: スクロールバー
□投稿者/ shu (673回)-(2011/05/09(Mon) 08:57:07)
No59007 (やま さん) に返信

DataGridView1.Controls.OfType(Of HScrollBar)

DataGridView1.Controls.OfType(Of VScrollBar)

で取得出来ます。OfTypeが使えないようでしたら、
Controlsの中のコントロールに対しタイプチェックをして下さい。
引用返信 編集キー/
■59027 / inTopicNo.5)  Re[4]: スクロールバー
□投稿者/ やま (3回)-(2011/05/09(Mon) 18:21:49)
No59008 (shu さん) に返信
> ■No59007 (やま さん) に返信
>
> DataGridView1.Controls.OfType(Of HScrollBar)
>
> DataGridView1.Controls.OfType(Of VScrollBar)
>
> で取得出来ます。OfTypeが使えないようでしたら、
> Controlsの中のコントロールに対しタイプチェックをして下さい。

shuさんありがとうございます。
DataGridViewのスクロールバーにアクセスすることが出来ました。
しかし同じく値が戻ってしまいます。
「Windowメッセージを取得して」どうすることでうまくいくのでしょうか?

引用返信 編集キー/
■59029 / inTopicNo.6)  Re[2]: スクロールバー
□投稿者/ 魔界の仮面弁士 (2164回)-(2011/05/09(Mon) 19:30:27)
No58879 (shu さん) に返信
> Windowメッセージを取得してやればなんとか出来るかもしれません。

無理矢理サイズを指定し続けてみました。……が、右下部の再描画を
何とかしなければならないので、これだけでは駄目そう。

Public Class Form1
    Private WithEvents DGV As DataGridView
    Private WithEvents HS As HScrollBar
    Private WithEvents VS As VScrollBar
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
        DGV = New DataGridView()
        DGV.Dock = DockStyle.Fill
        Controls.Add(DGV)
        DGV.ColumnCount = 5
        DGV.RowCount = 20
        HS = DGV.Controls.OfType(Of HScrollBar)().FirstOrDefault()
        VS = DGV.Controls.OfType(Of VScrollBar)().FirstOrDefault()
        DGV.SuspendLayout()
        VS.SetBounds(0, 0, 0, 0)
        HS.SetBounds(0, 0, 0, 0)
        DGV.ResumeLayout()
    End Sub

    Private Sub VS_LocationChanged(ByVal sender As Object, ByVal e As EventArgs) Handles VS.LocationChanged
        Dim VW As Integer = SystemInformation.VerticalScrollBarWidth * 2
        Dim L As Integer = DGV.Right - VW
        If VS.Left <> L Then
            VS.Left = L
        End If
    End Sub

    Private Sub VS_SizeChanged(ByVal sender As Object, ByVal e As EventArgs) Handles VS.SizeChanged
        Dim VW As Integer = SystemInformation.VerticalScrollBarWidth * 2
        If VS.Width <> VW Then
            VS.Width = VW
        End If
        Dim HH As Integer = SystemInformation.HorizontalScrollBarHeight * 2
        Dim VH As Integer = If(HS.Visible, DGV.Height - HH, DGV.Height)
        If VS.Height <> VH Then
            VS.Height = VH
        End If
    End Sub

    Private Sub HS_LocationChanged(ByVal sender As Object, ByVal e As EventArgs) Handles HS.LocationChanged
        Dim HH As Integer = SystemInformation.HorizontalScrollBarHeight * 2
        Dim T As Integer = DGV.Bottom - HH
        If HS.Top <> T Then
            HS.Top = T
        End If
    End Sub

    Private Sub HS_SizeChanged(ByVal sender As Object, ByVal e As EventArgs) Handles HS.SizeChanged
        Dim HH As Integer = SystemInformation.HorizontalScrollBarHeight * 2
        If HS.Height <> HH Then
            HS.Height = HH
        End If
    End Sub
End Class

引用返信 編集キー/
■59035 / inTopicNo.7)  Re[3]: スクロールバー
□投稿者/ shu (680回)-(2011/05/10(Tue) 07:53:15)
No59029 (魔界の仮面弁士 さん) に返信
> ■No58879 (shu さん) に返信
>>Windowメッセージを取得してやればなんとか出来るかもしれません。
>
> 無理矢理サイズを指定し続けてみました。……が、右下部の再描画を
> 何とかしなければならないので、これだけでは駄目そう。

私もMaximumSizeとMinimumSizeを使って試してみましたが、スクロールバーの
スクロール方向でないサイズは設定出来るのですが、スクロール方向のサイズが
難しかったです。また位置の調整も難しく魔界の仮面弁士 さんのように強制しないと
駄目なうえ右下部のズレがどうしても発生してしまいました。


別案としてスクロールバーは別に用意するとかどうでしょう?DataGridViewのスクロールバーは
表示したままうまく重ね合わせた位置に表示してあげるといいかもしれません。同期は
サイズ変更、ロケーション変更のイベントでサイズと位置変更をして、
ScrollイベントでDataGridViewのスクロール位置を調整し
DataGridViewの各イベントでスクロールのmaximum等を変更するとどうでしょう?

引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -