隐藏 Crystal Report Viewer 的状态栏






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

159809

599
隐藏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报表时隐藏StatusBar
来说,这是一个很好的解决方法!
我希望这对某些人有所帮助!