当前位置:编程学习 > C#/ASP.NET >>

放血,有关隐形重写Show、Showdialog方法的技巧(win窗体权限判断)

如题,见blog
http://blog.csdn.net/jetlun/archive/2009/09/07/4529221.aspx
--------------------编程问答-------------------- 看了,不知道有什么特别作用. --------------------编程问答-------------------- 在win开发中,隐形重写Show、Showdialog方法的技巧(窗体权限判断)。  --------------------编程问答-------------------- 在窗体的Show或ShowDialog方法里面进行自定义,也就是说在窗体执行load事件之前可判断本窗体是否允许执行下去。可不用在load事件之后来判断。 --------------------编程问答--------------------     加贴内容:
    经常在win开发中,需要在弹出的窗体中,判断权限或参数,在LOAD事件中又不能直接执行Close或Dispose事件。这就需要我们重新找新的方案。很多人都会在窗体的执行前进行判断,但通过实践也不比较麻烦,且假如是后期进行开发判断的话,工作量也很大,而且维护量也可想而知。

    其实在窗体执行前的Show或Showdialog方法中做点文章也是可行的。

    使用这个方法之前需要首先建立自己的父类(同样是继承于System.Windows.Forms.Form),代码如下:

view plaincopy to clipboardprint?
/// <summary>   
/// 我的父类   
/// </summary>   
public class MyForm : System.Windows.Forms.Form   
{   
    /// <summary>   
    /// 隐形重写   
    /// </summary>   
    public void Show()   
    {   
        MessageBox.Show(this.GetType().ToString());//测试弹出的窗体类名   
        DialogResult MsgBoxResult   
                = MessageBox.Show("确定要继续吗?",//对话框的显示内容    
                                    "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation,//定义对话框内的图表式样,这里是一个黄色三角型内加一个感叹号    
                                    MessageBoxDefaultButton.Button2);//定义对话框的按钮式样    
  
        if (MsgBoxResult == DialogResult.Yes)//如果对话框的返回值是NO(按"N"按钮)    
        {   
            base.Show();//继续事件   
        }   
        else  
        {   
            MessageBox.Show("不再进行任何操作!");   
        }   
    }   
       
    /// <summary>   
    /// 隐形重写   
    /// </summary>   
    public void ShowDialog()   
    {   
        MessageBox.Show(this.GetType().ToString());//测试弹出的窗体类名   
        DialogResult MsgBoxResult   
                 = MessageBox.Show("确定要继续吗?",//对话框的显示内容    
                                     "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation,//定义对话框内的图表式样,这里是一个黄色三角型内加一个感叹号    
                                     MessageBoxDefaultButton.Button2);//定义对话框的按钮式样    
  
        if (MsgBoxResult == DialogResult.Yes)//如果对话框的返回值是NO(按"N"按钮)    
        {   
            base.ShowDialog();//继续事件   
        }   
        else  
        {   
            MessageBox.Show("不再进行任何操作!");   
        }   
    }     
}  
    /// <summary>
    /// 我的父类
    /// </summary>
    public class MyForm : System.Windows.Forms.Form
    {
        /// <summary>
        /// 隐形重写
        /// </summary>
        public void Show()
        {
            MessageBox.Show(this.GetType().ToString());//测试弹出的窗体类名
            DialogResult MsgBoxResult
                    = MessageBox.Show("确定要继续吗?",//对话框的显示内容 
                                        "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation,//定义对话框内的图表式样,这里是一个黄色三角型内加一个感叹号 
                                        MessageBoxDefaultButton.Button2);//定义对话框的按钮式样 

            if (MsgBoxResult == DialogResult.Yes)//如果对话框的返回值是NO(按"N"按钮) 
            {
                base.Show();//继续事件
            }
            else
            {
                MessageBox.Show("不再进行任何操作!");
            }
        }
        
        /// <summary>
        /// 隐形重写
        /// </summary>
        public void ShowDialog()
        {
            MessageBox.Show(this.GetType().ToString());//测试弹出的窗体类名
            DialogResult MsgBoxResult
                     = MessageBox.Show("确定要继续吗?",//对话框的显示内容 
                                         "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation,//定义对话框内的图表式样,这里是一个黄色三角型内加一个感叹号 
                                         MessageBoxDefaultButton.Button2);//定义对话框的按钮式样 

            if (MsgBoxResult == DialogResult.Yes)//如果对话框的返回值是NO(按"N"按钮) 
            {
                base.ShowDialog();//继续事件
            }
            else
            {
                MessageBox.Show("不再进行任何操作!");
            }
        }  
    } 

   

     具体的代码里MessageBox.Show(this.GetType().ToString())为验证测试弹出的窗体类名是否一样,是否是在相应的窗体执行操作。用MessageBox.Show方法来验证是否执行了重写的方法。

     其次建立自己的两个窗体,是继承于自己建立的父类窗体(MyForm)。
view plaincopy to clipboardprint?
public partial class Form3 : MyForm   
{   
    public Form3()   
    {   
        InitializeComponent();   
    }   
}   
  
public partial class Form2 : MyForm   
{   
    public Form3()   
    {   
        InitializeComponent();   
    }   
}  
    public partial class Form3 : MyForm
    {
        public Form3()
        {
            InitializeComponent();
        }
    }

    public partial class Form2 : MyForm
    {
        public Form3()
        {
            InitializeComponent();
        }
    } 

  Designer代码这里省了不写。

  然后建立一个窗体,添加四个按钮来验证重写的方法

  代码如下:

view plaincopy to clipboardprint?
public partial class Form1 : Form   
   {   
       public Form1()   
       {   
           InitializeComponent();   
       }   
  
       private void button1_Click(object sender, EventArgs e)   
       {   
           new Form2().Show();   
       }   
  
       private void button2_Click(object sender, EventArgs e)   
       {   
           new Form2().ShowDialog();   
       }   
  
       private void button4_Click(object sender, EventArgs e)   
       {    
           new Form3().ShowDialog();   
       }   
  
       private void button3_Click(object sender, EventArgs e)   
       {   
           new Form3().Show();   
       }   
   }  
 public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            new Form2().Show();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            new Form2().ShowDialog();
        }

        private void button4_Click(object sender, EventArgs e)
        { 
            new Form3().ShowDialog();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            new Form3().Show();
        }
    } 

  其界面如下:

 

   分别点击按钮,就出现重写的方法。

  如果有执行不成功的话,可以向我索要案例代码,QQ:277512377 Or MSN:jetlun@msn.com



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/jetlun/archive/2009/09/07/4529221.aspx --------------------编程问答-------------------- up --------------------编程问答-------------------- □□□■□□□□□■□□□□□□□□□□□□■□□□■□□□□□□ 
□□□■□□■■■■■■■■□□□□□□□□■□□□□■□□□□□ 
□□□■□□□□□□□□□□□□□□□□□■□□□□□■□□□□□ 
■■■■■■□■□□□□■□□□□□□□■□□□□□□□■□□□□ 
□□□■□□□□■□□■□□□□□□□■□□□□□□□□□■□□□ 
□□□■□■■■■■■■■■■□□□■□□□□□□□□□□□■□□ 
□□□■□□□□□■□□□□□□□■□□■■■■■■■■□□□■□ 
□□□■■□□□□■□□□□□□□□□□□□■□□□□■□□□□□ 
□□■■□■■■■■■■■■■□□□□□□□■□□□□■□□□□□ 
■■□■□□□□■□□□■□□□□□□□□□■□□□□■□□□□□ 
□□□■□□□■□□□□■□□□□□□□□■□□□□□■□□□□□ 
□□□■□□□□■□□■□□□□□□□□□■□□□□□■□□□□□ 
□□□■□□□□□■■□□□□□□□□□■□□□□□□■□□□□□ 
□■□■□□□■■□□■■□□□□□□■□□□□■□■□□□□□□ 
□□■□□■■□□□□□□■□□□□■□□□□□□■□□□□□□□ 
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,