DOBON.NET DOBON.NETプログラミング掲示板過去ログ

datagridのスクロールバーを非表示にしたい

環境/言語:[Vista]
分類:[.NET]

お世話になります。
題名の通り、datagridのスクロールバーを非表示にしたいと思っています。

詳細
datagridを2つ並べてスクロールの同期を取っています。
その際に、片方のスクロールバーを完全に非表示として、
もう片方でスクロールを制御したいと思っています。

現在、表示するサイズに満たない件数だとスクロールバーが非表示となりますが、
データ件数が多くなると自動的に(datagridの仕様とは思いますが)
スクロールバーが表示される状態です。

尚、スクロールの同期は以下を参考に作成しました。
http://dobon.net/vb/bbs/log3-27/16185.html

環境
.Net 2003 C#
Windowsアプリ

何か不明点がございましたらご指摘下さい。
よろしくお願いします。
すいません、補足です。

で、聞きたいことは、
「スクロールバーを非表示とするにはどうすれば良いか」です。

よろしくお願いします。
はじめまして、H.K.R.と申します。
# 引っ込んだ略 → H.K.R. にハンドルネームを変更いたします。

>「スクロールバーを非表示とするにはどうすれば良いか」です。
 
 とりあえず、非表示にできないことはないようですが、

  注意 !!  本当にこのようなことを行ってよいのかどうかは、わかりません。
         結果は全て自己責任でお願いします。

 と、前置きした上で・・・
 ※ コードがVBですがご了承下さい。m(_ _)m

Public Class DataGridEx
    Inherits DataGrid

    Dim Vdummy, Hdummy As Control
    Dim m_removed As Boolean = False

    Public Sub RemoveScrollBars()
        If m_removed = True Then
            Return
        Else
            m_removed = True
            Vdummy = New Control
            Hdummy = New Control
        End If

        '  注意 !!  本当にこのようなことを行ってよいのかどうかは、わかりません。
        '        
        '    ※ 以下の2行をコメントアウトしたほうが安全ですが、DataGridExのSize変更時に
        '      一瞬ScrollBarが表示される場合があります。
        Me.Controls.Remove(Me.VertScrollBar)
        Me.Controls.Remove(Me.HorizScrollBar)

        ' ScrollBarの場所に「穴」が開いたような画面表示になってしまうので、
        ' ダミーControlを配置してごまかす・・・(隣接するDataGridで覆い隠すという方法もあり)
        Vdummy.Width = SystemInformation.VerticalScrollBarWidth
        Vdummy.Top = Me.CaptionFont.Height + Me.Margin.Top + Me.Margin.Bottom + SystemInformation.Border3DSize.Height
        Vdummy.Left = Me.ClientSize.Width - SystemInformation.Border3DSize.Height - Vdummy.Width
        Vdummy.Height = Me.ClientSize.Height - Vdummy.Top - SystemInformation.Border3DSize.Height

        Vdummy.BackColor = Me.BackgroundColor
        Vdummy.Anchor = AnchorStyles.Top Or AnchorStyles.Bottom Or AnchorStyles.Right
        Vdummy.Visible = Me.VertScrollBar.Visible
        Me.Controls.Add(Vdummy)
        Me.VertScrollBar.SendToBack()
        Vdummy.BringToFront()

        ' ダミーControl(水平方向)
        Hdummy.Height = SystemInformation.HorizontalScrollBarHeight
        Hdummy.Top = Me.ClientSize.Height - SystemInformation.Border3DSize.Height - Hdummy.Height
        Hdummy.Left = SystemInformation.Border3DSize.Width
        Hdummy.Width = Me.ClientSize.Width - SystemInformation.Border3DSize.Width * 2

        Hdummy.BackColor = Me.BackgroundColor
        Hdummy.Anchor = AnchorStyles.Left Or AnchorStyles.Bottom Or AnchorStyles.Right
        Hdummy.Visible = Me.HorizScrollBar.Visible
        Me.Controls.Add(Hdummy)
        Me.HorizScrollBar.SendToBack()
        Hdummy.BringToFront()

        Dim AddressOf_ScrollBar_VisibleChanged As New EventHandler(AddressOf Me.ScrollBar_VisibleChanged)
        AddHandler Me.VertScrollBar.VisibleChanged, AddressOf_ScrollBar_VisibleChanged
        AddHandler Me.HorizScrollBar.VisibleChanged, AddressOf_ScrollBar_VisibleChanged

    End Sub

    Private Sub ScrollBar_VisibleChanged(ByVal sender As Object, ByVal e As EventArgs)
        If m_removed = True Then
            If sender Is Me.VertScrollBar Then
                If (Vdummy Is Nothing) = False Then
                    Vdummy.Visible = Me.VertScrollBar.Visible
                    'Console.WriteLine("Vertical - {0}", Me.VertScrollBar.Visible)
                End If
            ElseIf sender Is Me.HorizScrollBar Then
                If (Hdummy Is Nothing) = False Then
                    Hdummy.Visible = Me.HorizScrollBar.Visible
                    'Console.WriteLine("Horizontal - {0}", Me.HorizScrollBar.Visible)
                End If
            End If
        End If
    End Sub

End Class

 P.S. ScrollBarを除去したDataGridExでも、以下の方法で
    他のDataGridExと垂直スクロール位置の同期をとることはできました。
    (参考文献 http://dobon.net/vb/dotnet/datagrid/synchronousscroll.html)

以上です。

DOBON.NET | プログラミング道 | プログラミング掲示板