博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
选中用户牙科诊所管理软件中也许会使用的标记牙问题的自定义控件
阅读量:5877 次
发布时间:2019-06-19

本文共 13654 字,大约阅读时间需要 45 分钟。

首先声明,我是一个菜鸟。一下文章中出现技术误导情况盖不负责

/*  * ============================================= * Wrote By Deboy Wang @ 2013/5/3 * If you have any question , * pls contact me with email: deboywang@126.com * Copyright 2013  * =============================================*/using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace D8DentistryMS{    ///     /// 牙科诊所管理软件中许也会应用的标记牙问题的自定义控件    /// 本控件可以示表恒牙,也可以示表乳牙    /// 用户可以通过鼠标点击来 选中或者取消选中 牙齿    ///     /// 在牙科标记方法中,将人的牙齿标记如下:    ///     /// 成年人牙齿(恒牙)    /// 第一象限                                 第二象限    /// 18 17 16 15 14 13 12 11 | 21 22 23 24 25 26 27 28    /// -------------------------------------------------    /// 48 47 46 45 44 43 42 41 | 31 32 33 34 35 36 37 38    /// 第四象限                                 第三象限    ///     /// 婴幼儿牙齿(乳牙)    /// 第一象限               第二象限    /// 55 54 53 52 51 | 61 62 63 64 65    /// -------------------------------    /// 85 84 83 82 81 | 71 72 73 74 75    /// 第四象限               第三象限    ///     public class Teeth : Control    {        #region  自定义段字        private Color _SelectedColor = Color.OrangeRed;        private ToothType _TeethType = ToothType.AdultTeeth;        private float BUTTON_WIDTH = 10f;        private float BUTTON_HEIGHT = 12f;        private List
_SelectedTeeth = new List
();#endregion #region 自定义属性 ///
/// 用户点击择选牙齿的时候,被选中牙齿的色颜 /// [Browsable(true), Category("Appearance")] public Color SelectedColor { get { return _SelectedColor; } set { _SelectedColor = value; } } ///
/// 设置或者获得 牙齿类型:恒牙 或 乳牙 /// [Browsable(true), Category("Appearance"),DefaultValue(ToothType.AdultTeeth)] public ToothType TeethType { get { return _TeethType; } set { if (_TeethType != value) { _TeethType = value; _SelectedTeeth.Clear(); } } } ///
/// 设置或者获得 用户选中的牙齿编号 /// [Browsable(true), Category("Data")] public List
SelectedTeeth { get { return _SelectedTeeth; } set { _SelectedTeeth = value; this.Refresh(); } } #endregion #region 写重控件事件 ///
/// 写重系统的Paint事件处理法方,实现牙齿列排图形和编号的制绘 /// ///
protected override void OnPaint(PaintEventArgs pe) { if (this.Parent != null) this.BackColor = Color.White; Brush defaultb = new SolidBrush(Color.LightGray); Brush selectedb = new SolidBrush(Color.White); if (this.TeethType == ToothType.AdultTeeth) { #region 成年人牙齿列排 for (int i = 1; i < 9; i++) { //第二象限 if (this._SelectedTeeth.Contains(20 + i)) { pe.Graphics.FillRectangle(new SolidBrush(_SelectedColor), new RectangleF(80 + BUTTON_WIDTH * i, 2, BUTTON_WIDTH, BUTTON_HEIGHT)); pe.Graphics.DrawString(i.ToString(), Font, selectedb, new PointF(80 + BUTTON_WIDTH * i, 2)); } else { pe.Graphics.FillRectangle(new SolidBrush(this.BackColor), new RectangleF(80 + BUTTON_WIDTH * i, 2, BUTTON_WIDTH, BUTTON_HEIGHT)); pe.Graphics.DrawString(i.ToString(), Font, defaultb, new PointF(80 + BUTTON_WIDTH * i, 2)); } //第三象限 if (this._SelectedTeeth.Contains(30 + i)) { pe.Graphics.FillRectangle(new SolidBrush(_SelectedColor), new RectangleF(80 + BUTTON_WIDTH * i, 6 + BUTTON_HEIGHT, BUTTON_WIDTH, BUTTON_HEIGHT)); pe.Graphics.DrawString(i.ToString(), Font, selectedb, new PointF(80 + BUTTON_WIDTH * i, 6 + BUTTON_HEIGHT)); } else { pe.Graphics.FillRectangle(new SolidBrush(this.BackColor), new RectangleF(80 + BUTTON_WIDTH * i, 6 + BUTTON_HEIGHT, BUTTON_WIDTH, BUTTON_HEIGHT)); pe.Graphics.DrawString(i.ToString(), Font, defaultb, new PointF(80 + BUTTON_WIDTH * i, 6 + BUTTON_HEIGHT)); } } for (int i = 8; i > 0; i--) { //第一象限 if (this._SelectedTeeth.Contains(10 + i)) { pe.Graphics.FillRectangle(new SolidBrush(_SelectedColor), new RectangleF(82 - BUTTON_WIDTH * i, 2, BUTTON_WIDTH, BUTTON_HEIGHT)); pe.Graphics.DrawString(i.ToString(), Font, selectedb, new PointF(82 - BUTTON_WIDTH * i, 2)); } else { pe.Graphics.FillRectangle(new SolidBrush(this.BackColor), new RectangleF(82 - BUTTON_WIDTH * i, 2, BUTTON_WIDTH, BUTTON_HEIGHT)); pe.Graphics.DrawString(i.ToString(), Font, defaultb, new PointF(82 - BUTTON_WIDTH * i, 2)); } //第四象限 if (this._SelectedTeeth.Contains(40 + i)) { pe.Graphics.FillRectangle(new SolidBrush(_SelectedColor), new RectangleF(82 - BUTTON_WIDTH * i, 6 + BUTTON_HEIGHT, BUTTON_WIDTH, BUTTON_HEIGHT)); pe.Graphics.DrawString(i.ToString(), Font, selectedb, new PointF(82 - BUTTON_WIDTH * i, 6 + BUTTON_HEIGHT)); } else { pe.Graphics.FillRectangle(new SolidBrush(this.BackColor), new RectangleF(82 - BUTTON_WIDTH * i, 6 + BUTTON_HEIGHT, BUTTON_WIDTH, BUTTON_HEIGHT)); pe.Graphics.DrawString(i.ToString(), Font, defaultb, new PointF(82 - BUTTON_WIDTH * i, 6 + BUTTON_HEIGHT)); } } pe.Graphics.DrawLine(new Pen(Brushes.Gray, 1), new Point(2, 15), new Point(170, 15)); pe.Graphics.DrawLine(new Pen(Brushes.Gray, 1), new Point(85, 2), new Point(85, 28)); #endregion } else { #region 婴幼儿牙齿列排 for (int i = 1; i < 6; i++) { #region 第二象限 if (this._SelectedTeeth.Contains(60 + i)) { pe.Graphics.FillRectangle(new SolidBrush(_SelectedColor), new RectangleF(50 + BUTTON_WIDTH * i, 2, BUTTON_WIDTH, BUTTON_HEIGHT)); pe.Graphics.DrawString(i.ToString(), Font, selectedb, new PointF(50 + BUTTON_WIDTH * i, 2)); } else { pe.Graphics.FillRectangle(new SolidBrush(this.BackColor), new RectangleF(50 + BUTTON_WIDTH * i, 2, BUTTON_WIDTH, BUTTON_HEIGHT)); pe.Graphics.DrawString(i.ToString(), Font, defaultb, new PointF(50 + BUTTON_WIDTH * i, 2)); } #endregion #region 第三象限 if (this._SelectedTeeth.Contains(70 + i)) { pe.Graphics.FillRectangle(new SolidBrush(_SelectedColor), new RectangleF(50 + BUTTON_WIDTH * i, 6 + BUTTON_HEIGHT, BUTTON_WIDTH, BUTTON_HEIGHT)); pe.Graphics.DrawString(i.ToString(), Font, selectedb, new PointF(50 + BUTTON_WIDTH * i, 6 + BUTTON_HEIGHT)); } else { pe.Graphics.FillRectangle(new SolidBrush(this.BackColor), new RectangleF(50 + BUTTON_WIDTH * i, 6 + BUTTON_HEIGHT, BUTTON_WIDTH, BUTTON_HEIGHT)); pe.Graphics.DrawString(i.ToString(), Font, defaultb, new PointF(50 + BUTTON_WIDTH * i, 6 + BUTTON_HEIGHT)); } #endregion } for (int i = 5; i > 0; i--) { #region 第一象限 if (this._SelectedTeeth.Contains(50 + i)) { pe.Graphics.FillRectangle(new SolidBrush(_SelectedColor), new RectangleF(52 - BUTTON_WIDTH * i, 2, BUTTON_WIDTH, BUTTON_HEIGHT)); pe.Graphics.DrawString(i.ToString(), Font, selectedb, new PointF(52 - BUTTON_WIDTH * i, 2)); } else { pe.Graphics.FillRectangle(new SolidBrush(this.BackColor), new RectangleF(52 - BUTTON_WIDTH * i, 2, BUTTON_WIDTH, BUTTON_HEIGHT)); pe.Graphics.DrawString(i.ToString(), Font, defaultb, new PointF(52 - BUTTON_WIDTH * i, 2)); } #endregion #region 第四象限 if (this._SelectedTeeth.Contains(80 + i)) { pe.Graphics.FillRectangle(new SolidBrush(_SelectedColor), new RectangleF(52 - BUTTON_WIDTH * i, 6 + BUTTON_HEIGHT, BUTTON_WIDTH, BUTTON_HEIGHT)); pe.Graphics.DrawString(i.ToString(), Font, selectedb, new PointF(52 - BUTTON_WIDTH * i, 6 + BUTTON_HEIGHT)); } else { pe.Graphics.FillRectangle(new SolidBrush(this.BackColor), new RectangleF(52 - BUTTON_WIDTH * i, 6 + BUTTON_HEIGHT, BUTTON_WIDTH, BUTTON_HEIGHT)); pe.Graphics.DrawString(i.ToString(), Font, defaultb, new PointF(52 - BUTTON_WIDTH * i, 6 + BUTTON_HEIGHT)); } #endregion } pe.Graphics.DrawLine(new Pen(Brushes.Gray, 1), new Point(2, 15), new Point(110, 15)); pe.Graphics.DrawLine(new Pen(Brushes.Gray, 1), new Point(55, 2), new Point(55, 28)); #endregion } base.OnPaint(pe); } ///
/// 写重系统的 OnMouseClick 事件处理法方,实现选中牙齿编号获得和设置 /// ///
protected override void OnMouseClick(MouseEventArgs e) { // MessageBox.Show(GetClickNumber(e.Location).ToString()); int number = GetClickNumber(e.Location); if (this._SelectedTeeth.Contains(number)) { this._SelectedTeeth.Remove(number); } else { this._SelectedTeeth.Add(number); } this.Refresh(); base.OnMouseClick(e); } ///
/// 根据用户鼠标点击位置,获得牙齿编号 /// ///
///
protected int GetClickNumber(Point p) { int no = 0; if (this.TeethType == ToothType.AdultTeeth) { if (p.Y < 15 && p.X < 90) { no = 1 * 10 + (90 - p.X) / 10; } if (p.Y < 15 && p.X > 80) { no = 2 * 10 + (p.X - 80) / 10; } if (p.Y > 15 && p.X > 80) { no = 3 * 10 + (p.X - 80) / 10; } if (p.Y > 15 && p.X < 90) { no = 4 * 10 + (90 - p.X) / 10; } if (no % 10 < 9 && no % 10 > 0) return no; else return -1; } else { if (p.Y < 15 && p.X < 60) { no = 5 * 10 + (60 - p.X) / 10; } if (p.Y < 15 && p.X > 50) { no = 6 * 10 + (p.X - 50) / 10; } if (p.Y > 15 && p.X > 50) { no = 7 * 10 + (p.X - 50) / 10; } if (p.Y > 15 && p.X < 60) { no = 8 * 10 + (60 - p.X) / 10; } if (no % 10 < 6 && no % 10 > 0) return no; else return -1; } } #endregion #region 组件设计器生成的代码 ///
/// 必需的设计器变量。 /// private System.ComponentModel.IContainer components = null; ///
/// 清理所有正在应用的资源。 /// ///
如果应释放托管资源,为 true;否则为 false。 protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } ///
/// 默认构造函数 /// public Teeth() { InitializeComponent(); //设置控件初始大小 this.Width = 170; this.Height = 30; } ///
/// 设计器支持所需的法方 - 不要 /// 应用代码编辑器修改此法方的内容。 /// private void InitializeComponent() { components = new System.ComponentModel.Container(); } #endregion } ///
/// 牙齿类型 /// public enum ToothType { ///
/// 儿童乳牙 /// BabyTeeth, ///
/// 成年人恒牙 /// AdultTeeth }}
    每日一道理
书,各种各样的书。书,寄托着人类热切的希望;书,蕴含着人类丰富的感悟。提起书,会有说不完的话语……

    

    控件运行效果图:

    

    选中和用户

    

    

文章结束给大家分享下程序员的一些笑话语录: N多年前,JohnHein博士的一项研究表明:Mac用户平均IQ要比PC用户低15%。超过6000多的参加者接受了测试,结果清晰的显示IQ比较低的人会倾向于使用Mac。Mac用户只答对了基础问题的75%,而PC用户却高达83%。

你可能感兴趣的文章
struts中的xwork源码下载地址
查看>>
Android硬件抽象层(HAL)深入剖析(二)
查看>>
CDays–4 习题一至四及相关内容解析。
查看>>
L3.十一.匿名函数和map方法
查看>>
java面向对象高级分层实例_实体类
查看>>
android aapt 用法 -- ApkReader
查看>>
[翻译]用 Puppet 搭建易管理的服务器基础架构(3)
查看>>
Android -- AudioPlayer
查看>>
Python大数据依赖包安装
查看>>
Android View.onMeasure方法的理解
查看>>
Node.js 爬虫初探
查看>>
ABP理论学习之仓储
查看>>
NestJS 脑图
查看>>
我的友情链接
查看>>
Html body的滚动条禁止与启用
查看>>
Tengine新增nginx upstream模块的使用
查看>>
多媒体工具Mediainfo
查看>>
1-小程序
查看>>
CentOS图形界面和命令行切换
查看>>
HTML5通信机制与html5地理信息定位(gps)
查看>>