这次合作,我们在讨论的时候发现,好多零碎的知识当时重构的时候查过,但是这次再用,还是记不住,也没有做总结,所以还得去查,所以这次就总结一些我在重构的时候遇到的一些小问题,和对应的解决方法,亦或是通过这个问题了解到的小知识。
1.算钱的时候遇到的Int函数
- Int(X)函数:数轴上向零取整,也就是不大于x的最大整数。
- CInt(X)函数:四舍五入取整,无论正数还是负数。但是遇到0.5的情况,则往往取偶数值。
举例:Int(4.6)=4 Int(-4.6)=-5
举例:CInt(1.5)=2 CInt(1.4)=1 CInt(1.6)=2
机房中有一个用例是查询正在工作的教师,教师在登录的时候,向工作记录中添加的是登录信息,而登出信息的字段是NULL值,所以当我想要查询的时候,我写的语句是这样的:
<span style="font-size:18px;">select * from T_WorkLog where UserID=1 and logoutDate =Null</span>
后来我改了一下sql语句,发现查到了这条数据:
原因:NULL表达的意思不是零,而是不可知,不确定,所以我们不能用=,<>,来进行判断,因为NULL与任何类型的值进行比较或运算的结果都是UnKnow,其实在自考中我们已经学过了这个小知识,但是在实际应用中又经常忘记
3.有关继承窗体的小设置
继承窗体中要想要更改父窗体的控件,我们必须将父窗体上的控件的modifiers 改为 protected,这个属性有五中不同的修饰符,分别是:Public、Protected 、Protected Internal、Internal、Privated,下边详细的讲解一下这五中修饰符在c#中的含义与作用
- Public:公有的,可以被任意存取
- Protected:只可以被本类和其继承子类存取
- Protected Internal:唯一一种组合限制修饰符,它只可以被本程序集内所有类和这些类的继承自己所存取
- Internal:只可以被本程序集内所有的类存取
- Privated:私有的,只可以被本类所存取。
这五中访问修饰符相当于给外界提供的五中不同的“钥匙”,这就保证了类中数据的安全性。
类本身有两道防线,一是命名空间(namespace),另一个是程序集(assembly),成员则有三道防线,因为类也是成员的一道方向,如果外界想要访问类中的成员,就要看该成员的修饰符是不是可以给你提供一把访问的钥匙。
4.关于界面优化的代码
我们在注册或者登录的时候,经常会见到textbox中会有浅灰色的提示文字(如下图),让文本框获得焦点的时候,该提示文字消失,当该文本框失去焦点的时候,如果该文本框没有键入内容,该提示文字又会再次出现,如何实现呢?其实很简单,只要熟悉控件的基本属性,很容易就做出来了。
首先我们要写两个方法,分别是控件获得焦点和失去焦点
窗体加载:
private void frmAddUser_Load(object sender, EventArgs e)
{
cboUserLevel.Items.Add("操作员");
cboUserLevel.Items.Add("管理员");
txtUserName.Focus();
txtUserID.Text = "请输入8位以内用户名";
txtUserID.Font = new Font(txtUserID.Font.Name, 9);
txtUserID.ForeColor = Color.Gray;
txtUserPWD1.Text = "请输入16位以内密码";
txtUserPWD1.Font = new Font(txtUserID.Font.Name, 9);
txtUserPWD1.ForeColor = Color.Gray;
txtUserPWD1.PasswordChar = Convert.ToChar(0);
}
获得焦点:
private void txtUserID_Enter(object sender, EventArgs e)
{
txtUserID.Text = "";
txtUserID.ForeColor = System.Drawing.Color.Black;
txtUserID.Font = new Font(txtUserID.Font.Name, 12);
}
private void txtUserPWD1_Enter(object sender, EventArgs e)
{
txtUserPWD1.Text = "";
txtUserPWD1.ForeColor = System.Drawing.Color.Black;
txtUserPWD1.Font = new Font(txtUserPWD1.Font.Name, 12);
}
失去焦点:
private void txtUserPWD1_Leave(object sender, EventArgs e)
{
if (txtUserPWD1.Text == "")
{
txtUserPWD1.ForeColor = System.Drawing.Color.Gray;
txtUserPWD1.Text = "请输入16位以内密码";
txtUserPWD1.Font = new Font(txtUserPWD1.Font.Name, 9);
txtUserPWD1.PasswordChar = Convert.ToChar(0);
}
}
private void txtUserID_Leave(object sender, EventArgs e)
{
if (txtUserID.Text == "")
{
txtUserID.ForeColor = System.Drawing.Color.Gray;
txtUserID.Text = "请输入12位以内用户名";
txtUserID.Font = new Font(txtUserID.Font.Name, 9);
}
}
写完之后发现一个问题,窗体一加载,焦点就获到了txtUserID上,不管我怎么在窗体加载中写让别的控件.focus都没有用,然后就发现了窗体上有一个属性,一定要把这个属性改掉才可以,将TabStop改为false,这个属性是当窗体打开是此空间是否获得焦点。
这样这个小小的提示功能就完成了
总结
在机房合作的时候,就会发现,有很多东西,我们当时不会,但是当时查了忘记了,没有好好的总结,也许是看不起这些零碎的小知识,但是正是这些微不足道的小的知识点推进了我们走向终点的脚步