
using System;
using SystemCollectionsGeneric;
using SystemWindowsForms;
using SystemDrawingPrinting;
namespace FindPrinterDemo
{
public partial class Demo : Form
{
public Demo()
{
thisText= "本地打印机列表";
ListBox fListBox = new ListBox();
fListBoxDock = DockStyleFill;
foreach (String fPrinterName in LocalPrinterGetLocalPrinters())
fListBoxItemsAdd(fPrinterName);
thisControlsAdd(fListBox);
}
}
/// <summary>
/// 标题:获取本地打印机信息
/// 作者:肖小勇
/// 日期:2009-09-22
/// </summary>
public class LocalPrinter
{
private static PrintDocument fPrintDocument = new PrintDocument();
/// <summary>
/// 获取本机默认打印机名称
/// </summary>
public static String DefaultPrinter
{
get { return fPrintDocumentPrinterSettingsPrinterName; }
}
/// <summary>
/// 获取本机的打印机列表。列表中的第一项就是默认打印机。
/// </summary>
public static List<String> GetLocalPrinters()
{
List<String> fPrinters = new List<string>();
fPrintersAdd(DefaultPrinter); // 默认打印机始终出现在列表的第一项
foreach (String fPrinterName in PrinterSettingsInstalledPrinters)
{
if (!fPrintersContains(fPrinterName))
fPrintersAdd(fPrinterName);
}
return fPrinters;
}
}
}
WPF将Windows表示层发展至用声明式语言进行开发,并且融入大量的动画和特效,使得在Win32中极难做到的富客户端应用能在WPF中信手拈来,同时用矢量图取代位图,引入路由事件(RoutedEvent)对元素树进行多层监听,通过依赖属性(DependencyProperty)动态变更控件树等。在WinForm程序开发时,一旦涉及多线程 *** 作,我们一般不可能没有见过InvalidOperationException这个异常。这个异常的出现多数情况是由于worker线程(子线程)修改主线程控件(或对象)的属性而导致的非法 *** 作,当然这种做法也非每次都会失败,这主要取决于子线程想要 *** 作的对象是不是线程安全的。
WinForm控件提供了InvokeRequired属性来判断当前线程是不是创建此控件的线程。一旦控件创建完成,那么InvokeRequired的效率将会不错,且也能保证安全。不过若是目标控件尚未被创建(此时,虽然C#对象已经存在,不过其底层的窗口句柄仍旧为null),那么InvokeRequired则可能会耗费比较长的时间。(它会从下至上遍历整个控件树,直到找到一个可以承载此控件且已经实例化并被创建了的父控件,这种做法可以保证子控件将会与父控件在同一个线程上创建。找到合适的父控件之后,框架即可执行同样的检查,比较当前线程的ID和创建该父控件的线程的ID。)。若是框架无法找到任何一个已创建的父窗体,那么则需要找到一些其他类型的窗体。若在层次体系中无法找到可用的窗体,那么框架将开始寻找暂存窗体(parking window),暂存窗体让你不会被某些Win32 API奇怪的行为所干扰。简而言之,有些对窗体的修改(例如修改某些样式)需要销毁并重新创建该窗体。暂存窗体就是用来在父窗体被销毁并重新创建的过程中用来临时保存其中的控件的。在这段时间内,UI线程仅运行于暂存窗体中。
通常,WPF 应用程序从两个线程开始:一个用于处理呈现,一个用于管理 UI。呈现线程有效地隐藏在后台运行,而 UI 线程则接收输入、处理事件、绘制屏幕以及运行应用程序代码。
WPF为Windows Presentation Foundation的缩写 ,其原来代号为“Avalon”,因“我佩服”拼音首字母组合一样,国内有人调侃地称之为“我佩服”。WPF是微软新一代图形系统,运行在NET Framework 30架构下,为用户界面、2D/3D 图形、文档和媒体提供了统一的描述和 *** 作方法。基于DirectX 9/10技术的WPF不仅带来了前所未有的3D界面,而且其图形向量渲染引擎也大大改进了传统的2D界面,比如Vista中的半透明效果的窗体等都得益于WPF。 程序员在WPF的帮助下,要开发出媲美Mac程序的酷炫界面已不再是遥不可及的奢望。 WPF相对于Windows客户端的开发来说,向前跨出了巨大的一步,它提供了超丰富的NET UI 框架,集成了矢量图形,丰富的流动文字支持flow text support,3D视觉效果和强大无比的控件模型框架。
button_clik(objce sender,e)
{
var d= sender as button
dname;
}
没开VS,手打的不知道有没有打错,大体上就这样,你懂的被VS惯坏了,基本记不住
WPF基础知识
快速学习绝不是从零学起的,良好的基础是快速入手的关键,下面先为大家摞列以下自己总结的学习WPF的几点基础知识:
1) C#基础语法知识(或者其他NET支持的语言):这个是当然的了,虽然WPF是XAML配置的,但是总还是要写代码的,相信各位读者应该也都有这个基础了。
2) HTML语言:虽然WPF是窗体程序但是由于使用的XAML语言,如果以前接触过HTML、XHTML、ASPNET之路的东西的话会,接受这些标签会很有帮助的,如果以前一直是从事win form开的人来说可能就要适应一下了。
3) 对C#中的代理、事件要做到熟练掌握,在NET 30 版本后有增加了Routed Events,要想日后不糊涂,这个是基础。
4) 有一定的winform或ASPNET经验,主要是对控件事件的处理要有写了解。
5) 拥有良好的面向对象的思想:思想是语言的升华(本人的OO思想完全是Java中领悟来的)。在WPF中,经常要灵活运用各种继承关系、多态、重载等,因此一定要把基础知识打牢固。
6) DataBinding要有所了解:Binding是WPF的一大亮点,在接触它以前如果接触国ADONET里面的DataBinding的话对相对起来会容易接受一点,虽然这两个有一定的不同。
7) 对设计模式要有一定的了解:当然是越深入越好了,在实际项目中,各种设计模式经常交融使用。
快速的识别并合理的运用,无论是在开发还是调试时都是非常高效的。另外,WPF存在的初衷即是表现与逻辑的松耦合,最普遍的情况就是XAML作为表现层,背后cs文件作为逻辑层。因此,日后在从事项目工作时,要时刻谨记这一点,千万不可背道而驰。
不要为了凸显自己的某一些代码特长而将各种逻辑混写在一起,这样非常不实际的,这一点都在校生应该尤为重要。
8) 对XML的理解:XAML也是XML,对XML的理解绝对有助于快速的接受和使用XAML,并不需要多XML有多么高深的见解。
但是最好还是有空看一看XML相关的书籍>
以上就是关于求教wpf如何获取当前默认打印机的名称全部的内容,包括:求教wpf如何获取当前默认打印机的名称、Winform和WPF的区别和WPF具体用法、wpf 中的单击事件怎么获取当前控件的名字等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)