实例说明
当窗体上有很多控件时,如果逐个设置字体属性,会非常繁琐,这时,可以将字体属性设置一致的控件选中进行统一设置,这样可以大大节省开发程序的时间。实例运行效果如图1所示。

设计过程

(1)打开Visual Studio 2019开发环境,新建一个Windows窗体应用程序,命名为SetFont。

(2)在默认窗体Form1中添加4个Button控件。

(3)在Form1窗体中选中添加的4个Button控件,单击鼠标右键,选择“属性”选项,在弹出的“属性”对话框中对其字体进行统一设置,这里将字体设置为“微软雅黑”、字体大小设置:四号、字体颜色设置为蓝,如图2、3所示。


秘笈心法

心法领悟:更快的提高程序开发效率!

在开发程序时,开发效率是非常重要的一个指标,使用Visual Studio 2019开发环境中的“属性”对话框可以对窗体中的控件属性进行统一设置,从而更快的提高程序的开发效率。

其他C#教程之WinForm中的几个实用技巧汇总

(1)用窗体的静态方法作为显示窗体和使用窗体功能的入口
一个窗体往往会显示其他窗体以实现一定的功能。通过在被调用窗体中实现一个静态函数供调用窗体使用可以简化窗体间的交互,隐蔽被调用窗体的数据,从而加强封装特性。
如主窗体为FormMain,被调用窗体为FormChild。在FormChild中实现一个静态方法:
Static void DoSomething()
{
new FormChild.ShowDialog();
//实现功能
//…
}
在主窗体中调用被调用窗体的DoSomething()方法:
FormChind.DoSomething();
这样就可以显示被调用窗体并由被调用窗体执行预设的功能,并且该静态函数封装了构造和初始化被调用窗体的逻辑。程序的结构更加清晰,类的职责更加明确。
(2) 判断用户在对话框中点击的按钮
对话框的ShowDialog方法会返回DialogResult类型的返回值。DialogResult是枚举类型,通过检查该枚举值,即可知道用户是通过单击哪个按钮关闭对话框的。
例如,要检测用户是否是单击了OK按钮从而关闭文件对话框,可以使用如下代码:
if (this.openFileDialogPhoto.ShowDialog()==DialogResult.OK)
{

}
(3) 将数据库中读取的照片文件显示在控件中
从数据库中读取照片,照片的列row.phptoImage是byte 数组类型。要将照片直接显示在控件中,而非先存储在硬盘上再调入控件显示,需要使用MemoryStream类。具体方法如下:
MemoryStream mstream;
if(row.photoImage.Length!=0)
{
mstream=new MemoryStream(row.photoImage);
this.picPhoto.Image= new Bitmap(mstream);
}
(4) 使用 Command 对象的 ExecuteScalar 方法
一般使用 Command 对象的 ExecuteReader 方法来将数据库的返回结果保存在 DataReader 中。如以下代码所示:
dbReader = cmd.ExecuteReader();
但如果返回结果是单个标量值,如一个整数或一个字符串,则可以执行 Command 对象的 ExecuteScalar 方法直接获取该值。
编码示例如下:
byte b;
b = (byte)cmd.ExecuteScalar();

(5) 为 Command 对象添加参数的两种方法
这两种方法其实是 Parameters 对象的 Add 方法的两种变体。第一种方法比较简单,就是直接使用 Add 方法添加参数,并同时指定参数的类型和值。代码如下:
cmd.Parameters.Add(“@EmpID”,System.Data.SqlDbType.Int).Value = iEmpID;
另外一种方法比较复杂,它需要先声明一个 SqlParameter 类型的对象,然后使用 Add 方法添加该参数对象。这种方法便于调试。代码如下:
SqlParameter paramEmpID = new SqlParameter(“@EmpID”, System.Data.SqlDbType.Int);
paramEmpID.Value = strSelfIntro;
cmd.Parameters.Add(paramEmpID);
(6) 解决Typed DataSet中空字段值的问题
Typed DataSet可以大大提高开发的效率。但是在某个字段值为空的情况下,使用Typed DataSet读取该字段会引发系统异常。要解决这个问题有两种方法:

  1.    在数据库中为所有运行为空的字段设置缺省值
    
  2.    修改VS.NET自动生成的XSD文件
    

在这里仅介绍第二种方法。对于值可以为空的字段,XSD文件中原来的描述应该类似如下代码(其中DeptName、Title和Telephone字段在数据库中可以为空值):
< xs:element name =“Name” type =“xs:string” />
< xs:element name =“LoginName” type =“xs:string” />
< xs:element name =“Email” type =“xs:string” />
< xs:element name =“DeptName” type =“xs:string” minOccurs =“0” />
< xs:element name =“Title” type =“xs:string” minOccurs =“0” />
< xs:element name =“Telephone” type =“xs:string” minOccurs =“0” />
为了避免在使用Typed DataSet访问数据库时出现异常,可以手工修改定义,在字段描述中加上 codegen:nullValue=" “,从而避免错误的出现。修改后,XSD文件片断如下:
< xs:element name =“Name” type =“xs:string” />
< xs:element name =“LoginName” type =“xs:string” />
< xs:element name =“Email” type =“xs:string” />
< xs:element name =“DeptName” codegen : nullValue =”" type =“xs:string” minOccurs =“0” />
< xs:element name =“Title” codegen : nullValue =“” type =“xs:string” minOccurs =“0” />
< xs:element name =“Telephone” codegen : nullValue =“” type =“xs:string” minOccurs =“0” />
更多关于XSD文件修改的内容,请参考微软知识库文章:
http://support.microsoft.com/default.aspx?scid=kb;en-us;318048
(7) 在TreeView控件中使用拖放功能
在TreeView中使用拖放功能可以简化用户的操作,提供更加友好的界面。
TreeView控件中的拖放和一般控件相比更加复杂。需要三个事件处理函数配合使用。代码如下(其中tvDept是一个TreeView控件):
///
/// 用拖放的方式实现员工在部门间的移动
///
///
///
private void tvDept_ItemDrag(object sender, System.Windows.Forms.ItemDragEventArgs e)
{
DoDragDrop(e.Item, DragDropEffects.Move);
}

///
/// 用拖放的方式实现员工在部门间的移动
///
///
///
private void tvDept_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
{
e.Effect = DragDropEffects.Move;
}

///
/// 用拖放的方式实现员工在部门间的移动
///
///
///
private void tvDept_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
{
try
{
// 执行业务逻辑,处理拖放事件

C#学习记录——统一窗体中控件的字体设置相关推荐

  1. C#按比例缩放窗体控件及字体

    按照比例缩放窗体控件及字体,如需等比例缩放,只需将x,y的比例设置成相同即可. 为了减小误差,建议使用原始尺寸来计算比例. 1 private float X, Y;2 3 private bool ...

  2. 6.5(一) 窗体中控件及其应用之控件类型及其功能

    目录 (1)文本框 (2)标签 (3)标题 (4)复选框.切换按钮和选项按钮 (5)选项组控件 (6)组合框与列表框 (7)命令按钮 (8)选项卡与附件控件 (9)图像控件 (10)子窗体/子报表 在 ...

  3. 6.5(二) 窗体中控件及其应用添加控件(下)

    目录 (8)创建命令按钮 (9)创建子窗体 (8)创建命令按钮 窗体上放置命令按钮是为了用来执行某种操作.命令按钮执行的操作可分为六大类:记录导航.记录操作.窗体操作.报表操作.应用程序和杂项共32项 ...

  4. C#实现WindowsAPI改变 鼠标指向的任意窗体中控件的大小和位置实例

    [实例简介] 用.net实现 改变其它任意窗体控件的属性值 [实例截图] 文件:590m.com/f/25127180-494436363-36e5a6(访问密码:551685) [核心代码]publ ...

  5. C#获取容器窗体中控件Location问题

    C#将相对于屏幕的坐标转化为相对于控件的坐标?,怎么弄? 窗体内的所有控件都有Location这个属性.对于直属于窗体的控件来说,Location的值就是该控件相对于窗体左上角的 坐标 .如果要获取控 ...

  6. C#学习记录——Windows打印控件

    『多少事,从来急,天地转,光阴迫,一万年太久,只争朝夕.』-- 毛泽东语录 Windows打印控件 PageSetupDialog控件 PageSetupDialog控件用于设置页面详细信息以便打印. ...

  7. android gridview行分割线,Android中控件GridView实现设置行列分割线的方法示例

    前言 虽然Aandroid目前已经有RecyclerView了.非常强大的一个View.可以直接控制成ListView以及GridView等.而且画框线也比较方便.但是呢在很多情况下我们不得不仍然使用 ...

  8. latex学习记录2:上下标及字体的斜体加粗

    下标: ($ED_2$) 上标: ($ED^2$) 上下标一起: ($_2^2x^2_2$) 斜体: \emph {内容} (\emph {$X_2$})%公式必须加$$且位置要对 加粗: \pmb{ ...

  9. 学习记录:关于通过使用express,设置reffer和host获取qq音乐数据

    因为qq音乐歌手信息的获取,设置了reffer(设置了url的来源)和host(决定了虚拟机上的哪个站点), 所以通过使用express配置路由, 通过axios来获取数据, 将数据返回给前端请求的路 ...

最新文章

  1. android 5.0 9300,三星Android5.0升级名单曝光 S2止步4.2
  2. Android应用程序与SurfaceFlinger服务之间的共享UI元数据(SharedClient)的创建过程分析...
  3. python 寻找比目标字母大的最小字符
  4. 【ASP.NET Web API教程】3.3 通过WPF应用程序调用Web API(C#)
  5. 测试环境服务器硬盘塞满问题排查
  6. mysql 日期操作 增减天数、时间转换、时间戳(转换)
  7. BASH 比较运算小结[转载 小蜗牛五二]
  8. 用Navicat for MySQL往数据表中添加数据时汉字出现乱码
  9. 如何配置Ubuntu 16.04 GRUB 2引导加载程序
  10. 1. Window环境下 - 开发环境的配置: (安装Android Studio 2.1)
  11. 看了这个视频都想辞职了
  12. 还有3天就要上班了,面试中灵魂拷问的问题送给你
  13. 009 [转载]天才与鬼才:黑客精英-凯文·米特尼克
  14. java openxml word_C#采用OpenXml实现给word文档添加文字
  15. LED背光源的结构分类
  16. 云计算现在前景如何?怎么转型成为云计算工程师?
  17. (windows)Hexo博客建站$ npm install -g hexo-cli时遇到npm ERR! Response timeout……的解决方案
  18. 车载网络: CAN (Control Area Network) 控制器局域网络
  19. 【圣诞节限定】教你用Python画圣诞树,做个浪漫的程序员
  20. c语言笛卡尔坐标系两点坐标,计算笛卡尔坐标系或极坐标系中2个位置之间的夹角...

热门文章

  1. OpenCV模板匹配识别图片中的数字
  2. 传感器研究NO2.激光雷达
  3. oppo计算机的夜间模式,OPPO如何设置夜间护眼模式?OPPO手机护眼模式使用教程
  4. 量化投资学习——Barra Optimizer API使用学习
  5. 【刘文彬】以太坊RPC机制与API实例
  6. ObjectMapper详细介绍,真的就这么简单
  7. axais初步接触(二)
  8. Mac 常用软件下载
  9. 上海交大卢策吾团队在Nature上发表行为理解最新研究成果!
  10. 专有云ABC Stack,真正的实力派!