- 題名: datagridのスクロールバーを非表示にしたい
- 日時: 2008/03/31 16:44:43
- ID: 21764
- この記事の返信元:
- (なし)
- この記事への返信:
- [21765] Re[1]: datagridのスクロールバーを非表示にしたい2008/03/31 16:46:22
- ツリーを表示
はじめまして、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)
以上です。
分類:[.NET]
お世話になります。
題名の通り、datagridのスクロールバーを非表示にしたいと思っています。
詳細
datagridを2つ並べてスクロールの同期を取っています。
その際に、片方のスクロールバーを完全に非表示として、
もう片方でスクロールを制御したいと思っています。
現在、表示するサイズに満たない件数だとスクロールバーが非表示となりますが、
データ件数が多くなると自動的に(datagridの仕様とは思いますが)
スクロールバーが表示される状態です。
尚、スクロールの同期は以下を参考に作成しました。
http://dobon.net/vb/bbs/log3-27/16185.html
環境
.Net 2003 C#
Windowsアプリ
何か不明点がございましたらご指摘下さい。
よろしくお願いします。