隐藏 Crystal Report Viewer 的状态栏





3.00/5 (10投票s)
2003 年 4 月 28 日
2分钟阅读

99657

340
隐藏 Crystal Report Viewer 状态栏的代码。
引言
在 .NET 中,CyrstalReportViewer
控件是一个非常强大的工具。它提供了大多数人们需要的基本功能,但除了一个直接的问题。 如何隐藏 StatusBar
? 更令人费解的是,您可以使用 DisplayGroupTree
和 DisplayToolbar
属性分别隐藏组树和工具栏。 但是, DisplayStatusbar
属性却无处可寻。
死胡同
在 CrystalReportViewer
的帮助文档中,应该有一个 ViewerStatusBar
属性,可以获取 StatusBar
对象。 但是,这在 VB.NET 或 C# 中似乎都没有公开。 但是,如果您可以获得 StatusBar
对象,那么您可以将状态栏的 visible 属性设置为 false,使其隐藏。
那么,如何获得 StatusBar
呢?
更多背景
简而言之,CrystalReportViewer
控件实际上是五个控件的组合。 即
CrystalDecisions.Windows.Forms.PageView
。 主窗口System.Windows.Forms.Splitter
。 主窗口和组树之间的拆分器。CrystalDecisions.Windows.Forms.ReportGroupTree
。 一个树形视图,允许您在报告侧面向下钻取。System.Windows.Forms.ToolBar
。 顶部的工具栏,允许您执行诸如导出报告、打印等操作。System.Windows.Forms.StatusBar
。 还有我们想要隐藏的状态栏。
答案
所以,知道 CrystalReportViewer
中实际上有五个控件,我们所需要做的就是搜索所有这些控件。 找到 Statusbar
,然后将其 Visible
属性设置为 false。 就这么简单!
代码
要将其设置为 UserControl
的属性(请参见上面的源代码项目),代码如下所示
Public Property DisplayStatusBar() As Boolean
Get
Dim obj As Object
Dim tempStatusbar As New StatusBar()
For Each obj In Me.CrystalReportViewer1.Controls
If obj.GetType Is tempStatusbar.GetType Then
Return CType(obj, StatusBar).Visible
Exit For
End If
Next
tempStatusbar.Dispose()
tempStatusbar = Nothing
End Get
Set(ByVal Value As Boolean)
Dim obj As Object
Dim tempStatusbar As New StatusBar()
For Each obj In Me.CrystalReportViewer1.Controls
If obj.GetType Is tempStatusbar.GetType Then
CType(obj, StatusBar).Visible = Value
Exit For
End If
Next
tempStatusbar.Dispose()
tempStatusbar = Nothing
End Set
End Property
上面的代码不太理想,因为我检查控件类型的唯一方法是创建 StatusBar
的实例,然后比较 GetType
方法的返回值。 理想情况下,代码应该如下所示
Set(ByVal Value As Boolean)
Dim obj As Object
For Each obj In Me.CrystalReportViewer1.Controls
If obj.GetType Is System.Windows.Forms.StatusBar Then
CType(obj, StatusBar).Visible = Value
Exit For
End If
Next
End Set
我无法这样做是因为 obj.GetType Is System.Windows.Forms.StatusBar
似乎不兼容(System.Type vs System.Windows.Forms.Type)。
无论如何,如果有人可以在不创建 StatusBar
的额外实例的情况下使其工作,我很乐意听取他们的意见。
摘要
我想重申,这种实现不太理想。 再次说明,我们不得不这样做从一开始就不是很理想。 希望这篇文章会在下一个版本的 .NET 甚至 Crystal 9 中被取代,在那里他们可能会默认提供该属性(希望如此)。 但暂且抛开这一切,这对于在 .NET 中显示 Crystal Reports 时隐藏 StatusBar
来说是一个很好的解决方法!
我希望这对大家有所帮助!