首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Dotnet频道
中国IT教育
Google
首页 ASP.NET  C#  XML/WebService ADO.NET VC.NET VB.NET .NET 资讯动态 专题 RSS订阅 讨论 下载
您现在的位置: 中国IT实验室 >> Dotnet >> .NET Framework >> 正文

谈基于.net平台开发中的模式窗体

(3)使用公共属性
使用公共属性也是一种比较常用的方式,通过窗体设计器添加的控件默认访问修饰符为private级别,可以设置成public或Internal(在程序集内部可见)来对外公开。比如对窗体中的Button进行公开,那就可以访问Button的相关属性,同时也可以注册事件或撤销事件注册。如,
OptionForm form = new OptionForm();
form.buttonOK.Click += new EventHandler(buttonOK_Click);
form.ShowDialog();

对于只允许读取访问或修改访问的控件或变量可以通过属性来控制。对(1)方式进行修改,去除重载构造函数,增加属性也可以实现同样的效果。
public object MyParams
{
    get { return this.myParams;  }
    set { this.myParams = value;  }
}

(4)使用公共方法
使用公共方法类似于属性,对上面的同等实现如下,
//获取参数
public object GetParams()
{
    return this.myParams;
}
//设置参数
public void SetParams(object myParams )
{
    this.myParams = myParams;
}

(5)使用静态类该方式可以简单的理解为静态变量全局共享,通过下面代码能够比较清楚的理解,先来定义静态类,
public static class ParameterSettings
{
    //公共静态变量
    public static string Username = "Zhengzuo";
    //私有静态变量
    private static string userRole = "Administrators";
    //私有静态变量
    private static string password = "http://blog.csdn.net/zhzuo";
    //内部属性
    internal static string UserRole
    {
        get { return userRole; }
    }
    //公共属性
    public static string Password
    {
        get { return password; }
        private set { password = value; }
    }
}

在需要访问的地方通过以下方式进行,
string username = ParameterSettings.Username;
string password = ParameterSettings.Password;
string userRole = ParameterSettings.UserRole;
ParameterSettings.Username = "郑佐";
//修改成新用户名

(6)窗体实现Singleton模式
Singleton模式是我们开发过程中最常用的模式之一。在技术社区经常看到有人谈及对主窗体实现Singleton,但个人认为这不是一种妥当的做法,因为没有这个必要。这里通过另一个自定义类来进行演示。假设UserLoginInfo类用来保存登录系统后的用户凭据。
/*==============================================
程序 郑佐 2006-4-23 http://blog.csdn.net/zhzuo
==============================================*/

public class UserLoginInfo
{
    //实现Singleton模式,线程安全
    private readonly static UserLoginInfo currentUserInfo = new UserLoginInfo();
   
//提供全局访问点
    public static UserLoginInfo CurrentUserInfo
    {
        get { return currentUserInfo; }
    }
    //阻止显式实例化,但不能阻止反射方式调用。
    private UserLoginInfo()
    {
    }
   
//公共变量
    public string Username;
   
//私有变量
    private static string userRole;
   
//私有变量
    private static string password;
   
//内部属性
    internal string UserRole
    {
        get { return userRole; }
        set { userRole = value; }
    }
   
//公共属性
    public string Password
    {
        get { return password; }
        internal set { password = value; }
    }
}

在其他代码中进行访问,
UserLoginInfo.CurrentUserInfo.Username ="郑佐";
UserLoginInfo.CurrentUserInfo.UserRole = "dotnetlover";
UserLoginInfo.CurrentUserInfo.Password = "http://blog.csdn.net/zhzuo";

对于Singleton模式的实现方式有很多,编写时需要考虑是否需要保证实例访问的线程安全问题,以免引发不可预料的情况,为了提高性能可以考虑惰性实例化。关于Singleton模式的更多信息可以参考
另一篇文章。

(7)发布事件进行订阅
通过事件来传递参数应该说是一种推的实现方式,在产生事件时进行被动的获取相关数据。这里将通过一个自定义事件来演示数据的传输。
在自定义事件时,标准的做法都会先定义一个事件参数类,要么直接使用基类EventArgs,或者从EventArgs继承实现自己的参数类,假设自定义基类取名为OptionSettingEventArgs,
//选项设置事件参数类
public class OptionSettingEventArgs : EventArgs
{
    private string changedPath;
    //构造函数
    public OptionSettingEventArgs(string changedPath)
    {
        this.changedPath = changedPath;
    }
    //读取参数
    public string ChangedPath
    {
        get { return this.changedPath; }
    }
}

以上参数类只包含一个修改后的路径参数。接下去我们要对原先的OptionForm窗体增加事件定义,这里使用.net 2.0中提供的泛型类来实现。
//定义事件
public event EventHandler<OptionSettingEventArgs> OptionSettingChanged;
编写事件引发程序如下,
//引发OptionSettingChanged事件
protected virtual void OnOptionSettingChanged(OptionSettingEventArgs e)
{
    if (OptionSettingChanged != null)
    {
        OptionSettingChanged(this, e);
    }
}

对文件目录选择按钮事件处理程序进行修改来实现事件激发,并没有考虑直接从文本框直接数据输入方式。
//通过目录对话框设置新的路径
private void buttonBrowser_Click(object sender, EventArgs e)
{
    FolderBrowserDialog dialog = new FolderBrowserDialog();
    DialogResult result = dialog.ShowDialog(this);
    if (result == DialogResult.OK)
    {
        if(this.textBoxPath.Text != dialog.SelectedPath)
        {
            this.textBoxPath.Text = dialog.SelectedPath;
            OptionSettingEventArgs args = new OptionSettingEventArgs(dialog.SelectedPath);
            OnOptionSettingChanged(args);
        }
    }
}

上一页  [1] [2] [3] [4] 下一页

【责编:Peng】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 专题推荐

 ·WEB程序开发--ASP.NET和PHP、JSP究竟学哪个?
 ·五步带你入门XML
 ·关于Java框架技术专题
 ·XML全攻略技术专题
 ·JAVA开源技术介绍专题
 ·Java嵌入式开发之J2ME技术专题
 ·超前体验 Oracle 11g的5个新特性…
 ·揭密使用VB.NET的五个实用技巧
 ·Oracle和SQL Server常用函数对比专题…
 ·展现C#世界 C#程序设计专题…
 今日更新
 社区讨论
 博客论点
 频道精选
 Dotnet频道相关导航