WebCast听课录(7)

课程名:Windows应用程序开发入门到精通四:Windows窗体开发中的面向对象概念

1,自定义控件的开发。

最简单的控件自定义是重写公共控件的方法。例如,可以重写 TextBox 控件的 OnKeyPress 继承方法,提供将输入限制为数字字符的代码。

public class NumricTextBox : System.Windows.Forms.TextBox
    
{
        
bool allowSpace = false//不允许出现空格

        
protected override void OnKeyPress(KeyPressEventArgs e)
        
{    // 限制输入字符为数字,小数点,负号,Backspace键    
            base.OnKeyPress(e);

            NumberFormatInfo numberFormatInfo 
= System.Globalization.CultureInfo.CurrentCulture.NumberFormat;
            
string decimalSeparator = numberFormatInfo.NumberDecimalSeparator;
            
string groupSeparator = numberFormatInfo.NumberGroupSeparator;
            
string negativeSign = numberFormatInfo.NegativeSign;

            
string keyInput = e.KeyChar.ToString();

            
if (Char.IsDigit(e.KeyChar))
            
{
                
//输入为数字
            }

            
else if (keyInput.Equals(decimalSeparator) || keyInput.Equals(groupSeparator) ||
                keyInput.Equals(negativeSign))
            
{
                
// 输入小数分隔符号
            }

            
else if (e.KeyChar == '\b')
            
{
                
// Backspace键    
            }

            
else if (this.allowSpace && e.KeyChar == ' ')
            
{

            }

            
else
            
{
                e.Handled 
= true//通知父类事件已经处理过了,父类不必再响应
            }

        }


        
public int IntValue
        
{
            
get
            
{
                
return Int32.Parse(this.Text);
            }

        }


        
public decimal DecimalValue
        
{
            
get
            
{
                
return Decimal.Parse(this.Text);
            }

        }


        
public bool AllowSpace
        
{
            
set
            
{
                
this.allowSpace = value;
            }


            
get
            
{
                
return this.allowSpace;
            }

        }


    }


2, “组合”和“聚合”的区别到底是什么呢?用接口来代替继承更易于应对变化?


3Observer模式实例


public interface ISubject
    
{
    }


    
public interface IObserver
    
{
        ISubject Subject
        
{
            
set;
        }

    }


    
public class MainSubject : ISubject
    
{
        
public event EventHandler SelectedChanged;
        
private int m_selected;

        
public int Selected
        
{
            
get
            
{
                
return m_selected;
            }

            
set
            
{
                m_selected 
= value;
                
if (SelectedChanged != null)
                
{
                    SelectedChanged(
this, EventArgs.Empty);
                }

            }

        }


        
public MainSubject()
        
{
        }

    }


    
public class Buttons : System.Windows.Forms.UserControl, IObserver
    
{
        
private System.Windows.Forms.Button button1;
        
private System.Windows.Forms.Button button2;
        
private System.Windows.Forms.Button button3;

        
private MainSubject m_subject;

        
private void button1_Click(object sender, System.EventArgs e)
        
{
            
this.m_subject.Selected = 1;
        }


        
private void button2_Click(object sender, System.EventArgs e)
        
{
            
this.m_subject.Selected = 2;
        }


        
private void button3_Click(object sender, System.EventArgs e)
        
{
            
this.m_subject.Selected = 3;
        }

        
IObserver Members
    }


    
public class Views : System.Windows.Forms.UserControl, IObserver
    
{
        
private System.Windows.Forms.TextBox textBox1;
        
private MainSubject m_subject;

        
IObserver Members

        
private void m_subject_SelectedChanged(object sender, EventArgs e)
        
{
            
this.textBox1.Text = m_subject.Selected.ToString();
        }

    }


    
public class Form1 : System.Windows.Forms.Form
    
{
        
private ObserverPattern.Buttons buttons1;
        
private ObserverPattern.Views views1;
        
private MainSubject m_subject;

        
private System.ComponentModel.Container components = null;

        
public Form1()
        
{
            InitializeComponent();
            m_subject 
= new MainSubject();
            
this.buttons1.Subject = m_subject;
            
this.views1.Subject = m_subject;
        }

}

 

posted on   Phinecos(洞庭散人)  阅读(590)  评论(0编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述

导航

统计

点击右上角即可分享
微信分享提示