我已经做了一个程序,将运行在启动要求用户选择他们的默认打印机。代码显示了ComboBox中所有已安装的打印机,提交按钮将把ComboBox中选定的打印机设置为该用户的默认打印机。
是否有一种方法可以只显示包含特定文本的打印机名称?
例如:
ABC
printer1ABC
network1 abc
printer2 def
network2def
字符串
所以它只会显示printer1ABC
和network1 abc
?下面是我目前为止的代码(一个ComboBox和一个Button)
Imports System.Drawing.Printing
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim strInstalledPrinters As String
Dim prntDoc As New PrintDocument
'check if there is installed printer
If PrinterSettings.InstalledPrinters.Count = 0 Then
MsgBox("No printer installed")
Exit Sub
End If
'display installed printer into combobox list item
For Each strInstalledPrinters In PrinterSettings.InstalledPrinters
ComboBox1.Items.Add(strInstalledPrinters)
Next strInstalledPrinters
'Display current default printer on combobox texts
ComboBox1.Text = prntDoc.PrinterSettings.PrinterName
Button1.Text = "Set Default Printer"
End Sub
End Class
型
将打印机设置为默认值的函数:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Shell(String.Format("rundll32 printui.dll,PrintUIEntry /y /n ""{0}""", ComboBox1.Text))
MsgBox("You have changed your default printer")
Me.Close()
End Sub
型
谢谢你的帮助
1条答案
按热度按时间eivgtgni1#
PrinterSettings.InstalledPrinters是枚举可用打印机名称的字符串集合。您可以用不同的方式筛选此集合,以便只选择要显示的打印机。
在这里,使用LINQ的Where()方法,集合被过滤,选择包含您要查找的名称的一部分的字符串:
字符串
您可以添加**
OrElse
**条件来包含其他过滤器。例如:型
在枚举打印机之前,应验证后台打印程序服务是否实际可用。您可以使用ServiceController类来检查**
spooler
**服务的Status
属性,看看它是否是ServiceControllerStatus.Running,并对其进行操作。如果后台打印程序未运行,则如果您尝试以任何方式枚举可用打印机,则会出现异常。▶将项目引用添加到
System.ServiceProcess
程序集。当您尝试执行此枚举时,还可能会得到其他异常,这取决于不同的条件,因此最好捕捉这些异常并做出不同的选择。
举个例子:
作为一个建议,给你的控件起一个有意义的名字,以防这些是你正在使用的实际名字
型
要更改默认打印机,我建议使用SetdefaultPrinter Win32函数或相应的WMI的Win32_Printer类SetDefaultPrinter方法。
▶当您单击Button设置新的默认打印机时,请使用GetItemText()方法获取
ComboBox1.SelectedItem
内容,不要依赖该控件的Text属性。型