我使用以下代码打印我的帐单。我收到以下错误" Filesystem.Print有无效的参数",请帮助克服此错误。
using Microsoft.Visualbasic;
.......................
public void PrintHeader()
{
FileSystem.Print(eInit + eCentre + "My Shop","");
FileSystem.Print("Tel:0123 456 7890","");
FileSystem.Print("Web: www.ame.com");
FileSystem.Print("sales@ame.com");
FileSystem.Print("VAT Reg No:123 4567 89" + eLeft);
PrintDashes();
}
答案 0 :(得分:1)
public static void Print(
int FileNumber,
params Object[] Output
)
这显然是一个Visual Basic函数。 FileNumber
是使用FileOpen
打开的文件的句柄(它是Visual Basic 6.0及更早版本中OPEN
的残余部分。)
示例:
int myFileHandle = 1;
FileSystem.FileOpen(myFileHandle, "log.txt", OpenMode.Output);
FileSystem.Print(myFileHandle, "Hello", " ", "World!");
FileSystem.FileClose(myFileHandle);
您需要先打开一个带有指定句柄的文件,然后将其传递给FileNumber。
另一个更好的解决方案是不使用这些API,因为它们已经过时了。首选System.IO
命名空间。
修改强>
要使用System.IO命名空间,您可以打开StreamWriter:
var writer = new StreamWriter("mybill.txt");
您的PrintHeader
方法需要TextWriter
输入(StreamWriter
扩展TextWriter
)
public void PrintHeader(TextWriter output)
{
output.WriteLine(eInit + eCentre + "My Shop");
output.WriteLine("Tel:0123 456 7890","");
output.WriteLine("Web: www.ame.com");
output.WriteLine("sales@ame.com");
output.WriteLine("VAT Reg No:123 4567 89" + eLeft);
output.WriteLine(new string('-', 20));
}
如果您有冒险精神,可以将其设为异步
public async Task PrintHeaderAsync(TextWriter output)
{
await output.WriteLineAsync(eInit + eCentre + "My Shop");
await output.WriteLineAsync("Tel:0123 456 7890","");
await output.WriteLineAsync("Web: www.ame.com");
await output.WriteLineAsync("sales@ame.com");
await output.WriteLineAsync("VAT Reg No:123 4567 89" + eLeft);
await output.WriteLineAsync(new string('-', 20));
}
答案 1 :(得分:0)
FileSystem.Print方法如下所示:
public static void Print(
int FileNumber,
params Object[] Output
)
所以你必须在Print方法中传递两个参数,但在某些情况下你只传递一个参数,因此你得到了这个错误。
答案 2 :(得分:0)
问题似乎是"我该如何打印?"
解决方案是使用System.Drawing.Printing
命名空间。
但是我把它当作一个小挑战,所以我创建了一个PrinterWriter类,你可以用作普通的文本编写器。
源代码可在this gist中找到,其用法很简单:
using(var myPrinter = new PrinterWriter())
{
myPrinter.WriteLine("Hello World!");
}
如果要写入另一台打印机或更改字体(默认为Consolas 10pt),可以为构造函数提供参数。
使用很重要,因为它在调用Dispose()时开始打印。
注意:它不会自动换行。