Author: binzhouweichao@163.com
Copyright (c) 2013, Liu Xiaojian@BIT, All Rights Reserved.
Date: 2013-10-23声明:本程序供参考;允许二次开发,但不允许在毫无更改的情况下占为己有。
沿用前面的序号。
7. 绘制坐标轴
pictrueBox1的横纵大小为610*610。
实际的雷区大小,为中心结点到雷结点的距离(Communication Range),加上各雷点的探测距离(Detection Range),然后再乘以2。
也就是说,确定了通信距离和探测距离后,实际的雷区宽高Width和Height就已经确定了。所以,修订ParamsForm中,关于雷区宽高的限制。
打开ParamsForm.cs[设计]文件,将雷点的TextBox和雷区的宽高的TextBox的ReadOnly属性设置为True。
7.1 设置ParamsForm的通信距离和检测距离的TextBox的回车事件
这两个文本框,按回车时触发下方的仿真场景的宽高变化。
7.1.1 首先,设置这两个文本框只能输入数字
自定义一个判断只能输入数字的函数。为了在其他地方也能使用这个函数,我们为项目添加一个新类,用于定义存放这些自定义函数。
为项目AttackDecision添加一个新类,命名为MyFunctions.cs。
为了方便调用,将类声明为静态类。即在类前加static修饰符。
为此类添加第一个静态成员方法,用于限定TextBox输入文本只能是数字,命名为NumberOnly。入口形参为KeyPressEventArgs类型,所以需要在文件头添加包含这个类的库,即using System.Windows.Forms;
函数体参考:http://wenku.baidu.com/view/be25fb300b4c2e3f57276345.html
修改后的MyFunctions.cs如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace AttackDecision
{
static class MyFunctions
{
//7.1.1 限定TextBox只能输入数字,还包含退格和回车
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; }
}
}
}
7.1.2 设置Communication Range文本框的KeyPress事件
选中CommunicationRange的TextBox,在右下方属性窗口中,选择事件属性,找到KeyPress事件,双击,自动生成mineCommunicationTextBox_KeyPress()事件函数,自动关联此文本框的回车按键触发事件。添加:
//7.1.2 通信距离文本框回车事件
private void mineCommunicationTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
MyFunctions.NumberOnly(ref e);//判断输入是否为数字(包括退格和回车)
if (e.KeyChar == 13)//按回车执行下面的文本变换
{
if (mineCommunicationTextBox.Text != "")//前提是此文本非空
{
//仿真场景宽度为(通信距离+探测距离)*2
simulationWidthTextBox.Text = (2 * (int.Parse(mineCommunicationTextBox.Text) + int.Parse(mineDetectionTextBox.Text))).ToString();
//仿真场景高度与宽度相同
simulationHeightTextBox.Text = simulationWidthTextBox.Text;
}
}
}
这样,此文本框只能输入数字(包含退格和回车),在点击回车之后,如果此文本非空,则使得下面的仿真场景的宽高值跟随变化。
7.1.3 同理,设置DetectionRange文本框的回车事件
//7.1.3 检测距离文本框的回车事件
private void mineDetectionTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
MyFunctions.NumberOnly(ref e);//判断输入是否为数字(包括退格和回车)
if (e.KeyChar == 13)//按回车执行下面的文本变换
{
if (mineDetectionTextBox.Text != "")//前提是此文本非空
{
//仿真场景宽度为(通信距离+探测距离)*2
simulationWidthTextBox.Text = (2 * (int.Parse(mineCommunicationTextBox.Text) + int.Parse(mineDetectionTextBox.Text))).ToString();
//仿真场景高度与宽度相同
simulationHeightTextBox.Text = simulationWidthTextBox.Text;
}
}
}
7.1.4 顺便,设置一下AttackRange的文本框的KeyPress事件,只