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, “组合”和“聚合”的区别到底是什么呢?用接口来代替继承更易于应对变化?

3,Observer模式实例

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;
        }
}



本文转自Phinecos(洞庭散人)博客园博客,原文链接:http://www.cnblogs.com/phinecos/archive/2006/10/24/538873.html,如需转载请自行联系原作者
目录
相关文章
|
存储 JSON NoSQL
Node.js使用数据库LevelDB:超高性能kv存储引擎
Node.js被设计用来做快速高效的网络I/O。它的事件驱动流使其成为一种智能代理的理想选择,通常作为后端系统和前端之间的粘合剂。Node的设计初衷就是为了实现这一目的,但与此同时,它已成功用于构建传统的Web应用程序:一个HTTP服务器,提供为HTML页面或JSON消息响应,并使用数据库存储数据。
960 0
Node.js使用数据库LevelDB:超高性能kv存储引擎
|
6月前
|
数据采集 算法 数据挖掘
CLIMB自举框架:基于语义聚类的迭代数据混合优化及其在LLM预训练中的应用
英伟达提出的CLIMB框架,是一种自动化优化大型语言模型(LLM)预训练数据混合的创新方法。通过语义嵌入与聚类技术,CLIMB能系统地发现、评估并优化数据混合策略,无需人工干预。该框架包含数据预处理、迭代自举及最优权重确定三大阶段,结合小型代理模型与性能预测器,高效搜索最佳数据比例。实验表明,基于CLIMB优化的数据混合训练的模型,在多项推理任务中显著超越现有方法,展现出卓越性能。此外,研究还构建了高质量的ClimbMix数据集,进一步验证了框架的有效性。
217 0
CLIMB自举框架:基于语义聚类的迭代数据混合优化及其在LLM预训练中的应用
|
关系型数据库 MySQL Java
Flink问题之数据清理如何解决
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。
232 0
|
IDE Java 开发工具
深入探索安卓应用开发:从环境搭建到第一个"Hello, World!"应用
本文将引导读者完成安卓应用开发的初步入门,包括安装必要的开发工具、配置开发环境、创建第一个简单的安卓项目,以及解释其背后的一些基本概念。通过一步步的指导和解释,本文旨在为安卓开发新手提供一个清晰、易懂的起点,帮助读者顺利地迈出安卓开发的第一步。
376 65
|
7月前
|
存储 固态存储 文件存储
一台电脑最多能接几个硬盘?
电脑硬盘扩展指南:从硬件接口(SATA、M.2、USB)到供电散热,再到操作系统盘符限制,本文全面解析一台电脑最多能接多少硬盘。普通用户适合2-4块硬盘,专业人士可扩展至8块以上,企业服务器则无明确上限。通过RAID阵列或NAS设备,还能突破传统限制,满足海量存储需求。了解这些技巧,助您合理规划存储方案!
|
数据采集 监控 安全
LabVIEW控制步进电机如何应用于自动化设备中?
LabVIEW控制步进电机如何应用于自动化设备中?
216 0
|
10月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于贝叶斯优化CNN-GRU网络的数据分类识别算法matlab仿真
本项目展示了使用MATLAB2022a实现的贝叶斯优化、CNN和GRU算法优化效果。优化前后对比显著,完整代码附带中文注释及操作视频。贝叶斯优化适用于黑盒函数,CNN用于时间序列特征提取,GRU改进了RNN的长序列处理能力。
|
12月前
|
设计模式 网络协议 Java
05.静态代理设计模式
《静态代理设计模式》详细介绍了静态代理的基本概念、原理与实现、应用场景及优缺点。主要内容包括静态代理的由来、定义、使用场景、实现方式、结构图与时序图,以及其在降低耦合、保护对象权限等方面的优势。同时,文章也指出了静态代理的局限性,如缺乏灵活性、难以复用、难以动态添加功能等,并介绍了动态代理如何弥补这些不足。最后,通过多个实际案例和代码示例,帮助读者更好地理解和应用静态代理模式。
127 4
|
机器学习/深度学习 算法 数据挖掘
算法金 | 欧氏距离算法、余弦相似度、汉明、曼哈顿、切比雪夫、闵可夫斯基、雅卡尔指数、半正矢、Sørensen-Dice
**摘要:** 了解9种距离和相似度算法:欧氏距离、余弦相似度、汉明距离、曼哈顿距离、切比雪夫距离、闵可夫斯基距离、雅卡尔指数、半正矢距离和Sørensen-Dice系数。这些算法在机器学习、文本分析、图像处理和生物学等领域各有应用。例如,欧氏距离用于KNN和K-Means,余弦相似度用于文本相似性,汉明距离在错误检测中,曼哈顿距离在数据挖掘,切比雪夫距离在棋盘游戏,闵可夫斯基距离通过调整参数适应不同场景,雅卡尔指数和Sørensen-Dice系数用于集合相似度。每种算法有其优缺点,如欧氏距离对异常值敏感,余弦相似度忽略数值大小,汉明距离仅适用于等长数据。
486 2
算法金 | 欧氏距离算法、余弦相似度、汉明、曼哈顿、切比雪夫、闵可夫斯基、雅卡尔指数、半正矢、Sørensen-Dice
|
存储 缓存 弹性计算
阿里云轻量应用服务器及u1、c7、g7、r7和gpu云服务器价格
阿里云服务器最新价格更新,轻量应用服务器2核2G 108元1年,每天仅需0.3元,2核4G 298元1年,每天只要0.81元;通用算力u1实例云服务器731.52 元1年起、计算型c7实例云服务器1718.61元1年起;通用型g7实例云服务器2117.95元1年起;内存型r7实例云服务器2715.74元1年起;gpu云服务器3368.00元1个月起。本文为大家汇总了阿里云轻量应用服务器及u1/c7/g7/r7和gpu云服务器最新优惠价格,以供参考。
770 0
阿里云轻量应用服务器及u1、c7、g7、r7和gpu云服务器价格