我试图让我的代码变得更加完美,我正在使用Crystal Report,对于一个项目,我使用的代码可以更快地打印Crystal Report而无需选择打印机,问题是,我使用了很多水晶报告,我想创建一个可以帮助我的功能,通常我使用该方法:
Select Case string_printer
Case "cristale1"
cristale1.PrintOptions.PaperSource = CrystalDecisions.Shared.PaperSource.Auto
cristale1.PrintToPrinter(NB_Copy.Value, True, 0, 2)
cristale1.Close()
Case "cristale2"
cristale2.PrintOptions.PaperSource = CrystalDecisions.Shared.PaperSource.Auto
cristale2.PrintToPrinter(NB_Copy.Value, True, 0, 2)
cristale2.Close()
Case "cristale3"
cristale3.PrintOptions.PaperSource = CrystalDecisions.Shared.PaperSource.Auto
cristale3.PrintToPrinter(NB_Copy.Value, True, 0, 2)
cristale3.Close()
End Select
我尝试做的是这样的事情:
Sub Print_Report(string_printer as String , NB_Copy as Integer)
Dim class_here = // CHANGING THE STRING to the Class using the string_printer
Dim data = Ctype(class_here,ReportClass)
data .PrintOptions.PaperSource = CrystalDecisions.Shared.PaperSource.Auto
data .PrintToPrinter(NB_Copy, True, 0, 2)
data .Close()
End Sub
任何想法?
答案 0 :(得分:0)
(我的VB有点生疏)怎么样
Dim printer;
Select Case string_printer
Case "cristale1"
printer = cristale1;
Case "cristale2"
printer = cristale2;
Case "cristale3"
printer = cristale3;
End Select
printer.PrintOptions.PaperSource = CrystalDecisions.Shared.PaperSource.Auto
printer.PrintToPrinter(NB_Copy.Value, True, 0, 2)
printer.Close()
ETA:找到了这个
System.Reflection.Assembly.GetExecutingAssembly().CreateInstance(string className)
所以这应该有用
Sub Print_Report(string_printer as String , NB_Copy as Integer)
Dim class_here = System.Reflection.Assembly.GetExecutingAssembly().CreateInstance(string_printer)
Dim data = Ctype(class_here,ReportClass)
data .PrintOptions.PaperSource = CrystalDecisions.Shared.PaperSource.Auto
data .PrintToPrinter(NB_Copy, True, 0, 2)
data .Close()
End Sub
或者您可以使用this
Activator.CreateInstance("PersonInfo", "Person");
答案 1 :(得分:0)
你可以试试(抱歉,这是C#):
public Printer GetByName(string name) {
return this.GetType().GetFields().First(f => f.Name == name).GetValue(this) as Printer;
}
GetFields docs。这使用反射,因此如果您经常访问此代码,则可能效率低下。但是,我认为这不会是一个问题。但是,如果它会,那么我建议你坚持使用当前的方法。
请注意,使用反射会产生cristale1,2,3
字段的非显而易见的用法。这可能应该在某处记录,以便您的代码读者确信这些是必要的,GetByName
是他们使用的地方。
可以找到显示基础知识的工作示例here。