C#Windows窗体界面设计_攻击决策项目_03_数据绘图_02_修订坐标轴和ParamsForm文本框数据
来源:互联网 发布:ftp端口 编辑:程序博客网 时间:2024/05/22 10:26
Author: binzhouweichao@163.com
Copyright (c) 2013, Liu Xiaojian@BIT, All Rights Reserved.
Date: 2013-10-25
声明:本程序供参考;允许二次开发,但不允许在毫无更改的情况下占为己有。
8. 首先修订坐标轴
参考:
http://www.cnblogs.com/stg609/archive/2008/03/16/1108407.html
http://tech.ddvip.com/2008-10/122483754482646.html
坐标轴为虚线,末尾加箭头,标注原点等。
8.1 设置坐标轴为虚线,并在末尾加自定义箭头
打开MyFunctions.cs,在自定义函数CreateBAxis()中,在画笔下方添加:
//设置画笔 Pen pBAxis = new Pen(Color.Blue, 1 / GlobalVars.scaleTimes); //8.1 设置坐标轴为虚线 pBAxis.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash; //8.1 末尾加箭头 //自定义箭头大小 System.Drawing.Drawing2D.AdjustableArrowCap myLineCap = new System.Drawing.Drawing2D.AdjustableArrowCap(6, 6, false); pBAxis.CustomEndCap = myLineCap;
由于边界遮挡问题,在pictureBox1的上下左右各留出5的边界,所以重置放大倍数为pictureBox1的宽高减去10之后再计算。
//放大倍数 //GlobalVars.scaleTimes = (float)GlobalVars.mainForm.pictureWidth / int.Parse(GlobalVars.mainForm.paramsForm.simulationWidth); //8.1 重置放大倍数,上下左右各留5边界 GlobalVars.scaleTimes = (float)(GlobalVars.mainForm.pictureWidth - 5 * 2) / int.Parse(GlobalVars.mainForm.paramsForm.simulationWidth);
8.2 描出原点
参考:http://wenku.baidu.com/view/25f6161d14791711cc7917ea.html
//绘制原点 //8.2 建立画刷 SolidBrush oBrush = new SolidBrush(Color.Red); //8.2 设定点的大小,带放大倍数 float pointSize = 5F / GlobalVars.scaleTimes; //8.2 填充点 gBAxis.FillEllipse(oBrush, oAxis.X - pointSize / 2, oAxis.Y - pointSize / 2, pointSize, pointSize);
8.3 标注原点、X轴、Y轴
由于对坐标系进行了x轴对称反转,所以同一坐标系下文字也会反转(包括缩放)。为了解决这个问题,在绘制文字之前,对坐标系再反转过来,绘制完后在旋转回去。
参考:
http://hi.baidu.com/biongiser/item/831cfd4058941dae61d7b929
http://zhidao.baidu.com/question/48797170.html
先在原点位置绘制O:
//8.3 标注原点、X轴、Y轴 gBAxis.ScaleTransform(1, -1);//反转坐标系,以绘制文字 string oString = "O";//要绘制的文字,O //字体设置,字体为Times New Roman,磅值为10(还有缩放倍数),类型为斜体+粗体 Font myFont = new Font("Times New Roman", 10 / GlobalVars.scaleTimes, FontStyle.Italic | FontStyle.Bold); gBAxis.DrawString(oString, myFont, oBrush, oAxis);//要绘制的文字O,字体类型,画刷颜色,起始位置
再把坐标轴标注补充完整:
抗锯齿参考:http://bbs.csdn.net/topics/270089022
//8.3 标注原点、X轴、Y轴 gBAxis.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;//抗锯齿 gBAxis.ScaleTransform(1, -1);//反转坐标系,以绘制文字 string oString = "O";//要绘制的文字,O string xString = "x";//x string yString = "y";//y //字体设置,字体为Times New Roman,磅值为10(还有缩放倍数),类型为斜体+粗体 Font myFont = new Font("Times New Roman", 16 / GlobalVars.scaleTimes, FontStyle.Italic | FontStyle.Bold); gBAxis.DrawString(oString, myFont, oBrush, oAxis);//要绘制的文字O,字体类型,画刷颜色,起始位置 SolidBrush xyBrush = new SolidBrush(Color.Black);//x y的画刷为黑色 gBAxis.DrawString(xString, myFont, xyBrush, xAxis[1].X - 20 / GlobalVars.scaleTimes, xAxis[1].Y);//在x右侧顶点绘制文字 gBAxis.DrawString(yString, myFont, xyBrush, yAxis[1].X-20 / GlobalVars.scaleTimes, (-1) * yAxis[1].Y);//在y上方顶点绘制文字 gBAxis.ScaleTransform(1, -1);//再反转回去。。 //释放资源 pBAxis.Dispose(); gBAxis.Dispose(); oBrush.Dispose(); xyBrush.Dispose(); myFont.Dispose();
效果图:
9. 修订文本输入框输入0时的bug
前面已经修订过ParamsForm的文本框,限制只能输入数字(包括退格和回车)。但是,当只有0时,也是合法的输入,却是后面计算中的bug。所以,还要限定在文本框为空的条件下,不能输入0,即首字符不能为0。
9.1 重新做一下MyFunctions.NumberOnly()函数,输入参数添加一个文本框的文本变量。
打开MyFunctions,修改NumberOnly()函数:
//7.1.1 限定TextBox只能输入数字,还包含退格和回车 //9.1 修订限定文本框函数,添加第一个字符不能为0 /* public static void NumberOnly(ref KeyPressEventArgs e) { if ((e.KeyChar < 48 || e.KeyChar > 57) && (e.KeyChar != 13) && (e.KeyChar != 8))//数字0-9的ASCII码的范围,13为回车,8为退格 { e.Handled = true; } else { e.Handled = false; } } * */ public static void NumberOnly(string str, ref KeyPressEventArgs e) { if ((e.KeyChar < 48 || e.KeyChar > 57) && (e.KeyChar != 13) && (e.KeyChar != 8))//数字0-9的ASCII码的范围,13为回车,8为退格 { e.Handled = true; } else { if (str == "" && e.KeyChar == 48) { e.Handled = true; } else { e.Handled = false; } } }
9.2 更新ParmsForm三个文本框的限定输入数字部分
mineCommunicationTextBox_KeyPress()
//MyFunctions.NumberOnly(ref e);//判断输入是否为数字(包括退格和回车) //9.2 更新 MyFunctions.NumberOnly(mineCommunicationTextBox.Text, ref e);
mineDetectionTextBox_KeyPress()
//MyFunctions.NumberOnly(ref e);//判断输入是否为数字(包括退格和回车) //9.2 更新 MyFunctions.NumberOnly(mineDetectionTextBox.Text, ref e);
mineAttackTextBox_KeyPress()
//MyFunctions.NumberOnly(ref e);//判断输入是否为数字(包括退格和回车) //9.2 更新 MyFunctions.NumberOnly(mineAttackTextBox.Text, ref e);
修订后,这三个文本框第一位不能输入0。
项目代码:
http://yunpan.cn/Q9AIuu527SD2N
- C#Windows窗体界面设计_攻击决策项目_03_数据绘图_02_修订坐标轴和ParamsForm文本框数据
- C#Windows窗体界面设计_攻击决策项目_03_数据绘图_01_绘制坐标轴_修订ParamsForm
- C#Windows窗体界面设计_攻击决策项目_03_数据绘图_03_绘制雷点
- C#Windows窗体界面设计_攻击决策项目_02_设计窗体_04_修订主窗体工具栏和状态栏
- C#Windows窗体界面设计_攻击决策项目_02_设计窗体_03_设置窗体弹出退出顺序
- C#Windows窗体界面设计_攻击决策项目_02_设计窗体_02_子窗体
- C#Windows窗体界面设计_攻击决策项目_02_设计窗体_01_主窗体
- C#Windows窗体界面设计_攻击决策项目_真实轨迹RealTrack
- C#Windows窗体界面设计_攻击决策项目_01_系统架构
- C#Windows窗体界面设计_02_绘制三角函数_多点作图法_全局变量思想
- C#Windows窗体界面设计_02_绘制三角函数_多点作图法
- C#Windows窗体界面设计_03_坐标系平移 旋转 镜像
- C#Windows窗体界面设计_04_添加PictureBox控件绘图
- C#Windows窗体界面设计_06_通过调整坐标系来调整数据
- C#Windows窗体界面设计_01_绘制三角函数_附强制类型转换
- C#Windows窗体界面设计_01_绘制三角函数_五点作图法
- C#Windows窗体界面设计_07_多窗体设计
- javascript 子窗体向父窗体文本框传数据
- Error executing aapt: Return code -1073741819
- poj 3342 树形dp_最大独立集合
- HTML 读取文本文件
- BASE64编解码简单实现
- C++中当对象指针为空时,虚函数和非虚函数的调用情况
- C#Windows窗体界面设计_攻击决策项目_03_数据绘图_02_修订坐标轴和ParamsForm文本框数据
- glDepthMask
- Ubuntu Linux 环境变量PATH设置
- RMAN加密
- shell 过滤磁盘信息
- WMI_远程计算机配置
- Linux下USB MASS STORAGE驱动的分析和改造
- JS验证用户真实姓名
- 来往干掉微信的必杀技