- 題名: 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アプリ
何か不明点がございましたらご指摘下さい。
よろしくお願いします。