WPF 员工卡条形码

大家都知道条形码(Barcode)是一种可以由机器识别的特殊编码,在生产、生活中也常常会见到并使用它。条形码的类型和种类很多感兴趣的朋友可以详细了解一下。其中Code 39 可以说是一种最为常见并广泛使用的字符与数字结合的编码类型,本篇也将利用它制作一个带有条形码的员工卡应用程序。

在公司内部员工卡是员工身份唯一的识别工具,同时也是考勤及门禁系统的主要信息来源。首先在WPF 中设计一个简单的员工卡样式,具备员工卡标识、员工相片、员工姓名等。

<Border CornerRadius="3" BorderBrush="Gray" BorderThickness="2" Background="White" MouseLeftButtonDown="Border_MouseLeftButtonDown"> <
Canvas x:Name="mainCanvas"> <Grid x:Name="closeBtn" Canvas.Left="330" Canvas.Top="0" MouseLeftButtonDown="Close_MouseLeftButtonDown"> <Ellipse Height="15" W
idth="15" HorizontalAlignment="Center"> <Ellipse.Fill> <SolidColorBrush x:Name="ellipseColor"/> </Ellipse.Fill> </Ellipse> <TextBlock Text="x" Margin="2,-2,2,2" HorizontalAlignment="Center"> <TextBlock.Foreground> <SolidColorBrush x:Name="textColor" Color="Gray"/> </TextBlock.Foreground> </TextBlock> </Grid> <Border BorderBrush="#FF54545C" Canvas.Top="25" CornerRadius="5" Height="49" Width="339" Background="#FF2192C4" Canvas.Left="5"> <TextBlock Text="EMPLOYEE CARD" Foreground="White" FontSize="20" VerticalAlignment="Center" HorizontalAlignment="Center" FontWeight="Black" FontFamily="Microsoft Sans Serif"/> </Border> <Grid Canvas.Left="96" Canvas.Top="78"> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition /> </Grid.RowDefinitions> <
Image Source="Images/cardpic.png" Grid.Row="0"/> <TextBlock Text="Li Jing Ran" FontSize="30" FontWeight="Black" Grid.Row="1" HorizontalAlignment="Center"/> </Grid> </Canvas></Border>

代码内容比较简单,其中需要提一下的是x:Name 为closeBtn 的<Grid>,可以看到它包含了一个<Ellipse>和<Textblock>,它们的颜色填充方式看上去做的很复杂。其实是为了实现一个动态效果:当鼠标移动到关闭图标上时,其<Ellipse>和<Textblock>会改变颜色(如下图对比)。

该效果代码如下,通过Window.Resources 设置一个ColorAnimation Storyboard,再通过MouseEnter、MouseLeave 来触发Storyboard 动画效果。

<Window.Resources> <Storyboard x:Key="flashClose"> <ColorAnimation Storyboard.TargetName="ellipseColor" Storyboard.TargetProperty="Color" From="White" To="Gray" Duration="0:0:0.1"/> <ColorAnimation Storyboard.TargetName="textColor" Storyboard.TargetProperty="Color" From="Gray" To="White" Duration="0:0:0.1"/> </Storyboard></Window.Resources><Window.Triggers> <EventTrigger SourceName="closeBtn" RoutedEvent="Grid.MouseEnter"> <BeginStoryboard x:Name="showClosBtn" Storyboard="{StaticResource flashClose}"/> </EventTrigger> <EventTrigger SourceName="closeBtn" RoutedEvent="Grid.MouseLeave"> <StopStoryboard BeginStoryboardName="showClosBtn"/> </EventTrigger></Window.Triggers>

完成上面的界面设计,最后只需在员工卡下放的空白处添加员工编号条形码即可。首先在项目中加入Barcode 和Code39 类,我们要通过这两个类完成条形码的绘制工作。打开C#程序,编写如下代码。

定义编码

通过Barcodes 类创建一个新的条形码,定义BarcodeType 为"Code39",编码Data 为“10001”,如果需要校验则将CheckDigit 设为"Yes"。其中thinWidth、thickWidth 用于定义黑白条码的宽窄度。

Barcodes bb = new Barcodes();bb.BarcodeType = Barcodes.BarcodeEnum.Code39;bb.Data = "10001";bb.CheckDigit = Barcodes.YesNoEnum.Yes;bb.encode();int thinWidth;int thickWidth;thinWidth = 2;thickWidth = 3 * thinWidth;string outputString = bb.EncodedData;string humanText = bb.HumanText;绘制条形码

根据编码(EncodedData)的长度利用Rectangle 类逐一绘制黑、白条码,t 表示窄码,w 表示宽码。

int len = outputString.Length;int
currentPos = 50;int currentTop = 340;int currentColor = 0; for (int i = 0; i < len; i++){ Rectangle rect = new Rectangle(); rect.Height = 80; if (currentColor == 0) { currentColor = 1; rect.Fill = new SolidColorBrush(Colors.Black); } else { currentColor = 0; rect.Fill = new SolidColorBrush(Colors.White); } Canvas.SetLeft(rect, currentPos); Canvas.SetTop(rect, currentTop); if (outputString[i] == 't') { rect.Width = thinWidth; currentPos += thinWidth; } else if (outputString[i] == 'w') { rect.Width = thickWidth; currentPos += thickWidth; } mainCanvas.Children.Add(rect);}添加可读码

最后在条形码下方添加一行可读码,方便员工认读条形码内容,也就是将“10001”员工编号显示出来。

TextBlock tb = new TextBlock();tb.Text = humanText;tb.FontSize = 25;tb.FontFamily = new FontFamily("Consolas");Rect rx = new Rect(0, 0, 0, 0);tb.Arrange(rx);Canvas.SetLeft(tb, 120);Canvas.SetTop(tb, currentTop + 80);mainCanvas.Children.Add(tb);效果图

最后运行下程序看看效果如何,当然条形码内容可按各自需求添加任何字符或数字。

源代码下载

WPFBarcode.zip

时间: 2024-11-16 09:32:31

WPF 员工卡条形码的相关文章

一起谈.NET技术,WPF 员工卡条形码

     大家都知道条形码(Barcode)是一种可以由机器识别的特殊编码,在生产.生活中也常常会见到并使用它.条形码的类型和种类很多感兴趣的朋友可以详细了解一下.其中Code 39 可以说是一种最为常见并广泛使用的字符与数字结合的编码类型,本篇也将利用它制作一个带有条形码的员工卡应用程序.      在公司内部员工卡是员工身份唯一的识别工具,同时也是考勤及门禁系统的主要信息来源.首先在WPF 中设计一个简单的员工卡样式,具备员工卡标识.员工相片.员工姓名等. <Border CornerRad

电信运营商员工卡不断外流变身高价特殊资费卡

飞象网讯(魏德龄/文)近期,记者发现原本为三家电信运营商内部工作所使用的员工卡却被人销售于市场之上,并以接打不限.上网不限流量等噱头售以约1500-3000元不等的高价,且购买者的利益并无法有效保障. 此前,在手机及上网卡的号卡市场上一直都存在着一些特殊资费卡,这些号卡在资费上与常规的资费不同,如北京神州行和南京神州行的部分号卡则可实现15元包月不限流量进行Wap接入点的TD-SCDMA的3G上网.一些联通的特殊资费卡可添加相应数据流量包,并到个别地区出现无需计费的漏洞.而电信曾推出的包天和包小

将WPF UI单元复制到剪贴板

大家在日常工作中应该遇到过这样的问题:需要对应用程序界面进行截屏操作,然后将截屏内容拷贝到其他文档中使用.通常情况下我们会使用一些截屏软件或者"Ctrl+PrtSc ",本篇将介绍如何在WPF 程序中将UI 单元直接以图片形式复制到剪贴板,以达到为应用程序界面制作快照(Snapshot)的功能. 以我之前做过的一个"WPF 员工卡"的文章为例.首先,要为程序添加一个自定义命令(Command):CopyUI.该命令的快捷键方式为"Ctrl+U",

一起谈.NET技术,将WPF UI单元复制到剪贴板

大家在日常工作中应该遇到过这样的问题:需要对应用程序界面进行截屏操作,然后将截屏内容拷贝到其他文档中使用.通常情况下我们会使用一些截屏软件或者"Ctrl+PrtSc ",本篇将介绍如何在WPF 程序中将UI 单元直接以图片形式复制到剪贴板,以达到为应用程序界面制作快照(Snapshot)的功能. 以我之前做过的一个"WPF 员工卡"的文章为例.首先,要为程序添加一个自定义命令(Command):CopyUI.该命令的快捷键方式为"Ctrl+U",

将WPF UI单元复制到“.NET研究”剪贴板

大家在日常工作中应该遇到过这样的问题:需要对应用程序界面进行截屏操作,然后将截屏内容拷贝到其他文档中使用.通常情况下我们会使用一些截屏软件或者"Ctrl+PrtSc ",本篇将介绍如何在WPF 程序中将UI 单元直接以图片形式复制到剪贴板,以达到为应用程序界面制作快照(Snapshot)的功能. 以我之前做过的一个"WPF 员工卡"的文章为例.首先,要为程序添加一个自定义命令(Command):CopyUI.该命令的快捷键方式为"上海网站建设Ctrl+U&

新OK卡使用范围缩水

摘要: 旧卡仍可在加盟商户使用 未获央行牌照没有影响预付卡发售 9月1日大限已过,沪上最大的两家预付卡公司百联电子商务有限公司.上海斯玛特企业服务有限公司均没有拿到央行颁发的第 旧卡仍可在加盟商户使用 未获央行牌照没有影响预付卡发售 9月1日大限已过,沪上最大的两家预付卡公司--百联电子商务有限公司.上海斯玛特企业服务有限公司均没有拿到央行颁发的第三方支付牌照,但两家企业的新卡发行业务却并未因此停止. 9月1日.2日两天,上述两家企业的售卡点像往常一样对外发售新卡,3日.4日两天双休日,售卡点照

未获支付牌企业预付卡仍可售 使用范围缩小

摘要: 旧卡仍可在加盟商户使用 未获央行牌照没有影响预付卡发售 9月1日大限已过,沪上最大的两家预付卡公司百联电子商务有限公司.上海斯玛特企业服务有限公司均没有拿到央行颁发的第 旧卡仍可在加盟商户使用 未获央行牌照没有影响预付卡发售 9月1日大限已过,沪上最大的两家预付卡公司--百联电子商务有限公司.上海斯玛特企业服务有限公司均没有拿到央行颁发的第三方支付牌照,但两家企业的新卡发行业务却并未因此停止. 9月1日.2日两天,上述两家企业的售卡点像往常一样对外发售新卡,3日.4日两天双休日,售卡点照

一名华为员工终于愿意站出来讲述华为加班的真实情况

在华为的员工胡新宇病故后一周,六月五日晚上,一名华为员工终于愿意站出来讲述华为加班的真实情况,看得出来,对于任正非,这名员工充满了敬意,对于华为的加班制度,这位员工也表示理解.出于保护这名员工的原因,改名员工化名李强.在位于北京上地附近的一个餐厅里,李强向网易科技报道讲述了他所了解的华为加班真相.每个工位有一个床垫在华为,新员工进入之后,都会去深圳总部集训两周,称作"下大队",进行军训,接受华为精神的培训.一旦开始工作,床垫就伴随着你在华为的日子.华为的公司文化的精髓在于任正非强调的&

马云吹响集结号:6千阿里巴巴员工搬家滨江

中介交易 SEO诊断 淘宝客 云主机 技术大厅 阿里巴巴跨江搬迁,利其器;落子布局,养其气. 马云有数.阿里巴巴集团未来三五年的焦点会在淘宝;再之后三五年,会是支付宝加口碑网.再之后的五年,说不好,看"云计算"融入普通人生活的度,毕竟谁都想过把"云里雾里"的日子.就像下围棋,偏安一隅,不够大气--于是,阿里巴巴B2B公司漂亮转身,率先过江.在它身后,淘宝.支付宝.口碑网等子公司,同样发展迅猛,好一个开枝散叶的局面. 马云有劲.搬家这件事,如果要用三个词形容:烦.乱总