c#的winform窗体中如何嵌套exe应用程序

2024-11-19 12:36:09
推荐回答(1个)
回答1:

(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字段在数据库中可以为空值):






文章出处:http://www.diybl.com/course/4_webprogram/asp.net/netjs/2007921/72800.html