zl程序教程

您现在的位置是:首页 >  后端

当前栏目

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

c#学习 设置 记录 控件 字体 统一 窗体
2023-09-11 14:14:49 时间

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

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

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

(3)在Form1窗体中选中添加的4个Button控件,单击鼠标右键,选择“属性”选项,在弹出的“属性”对话框中对其字体进行统一设置,这里将字体设置为“微软雅黑”、字体大小设置:四号、字体颜色设置为蓝,如图2、3所示。
图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
{
// 执行业务逻辑,处理拖放事件