【C#】万事开头难(一)<机房重构>

前言

        机房重构的登录已经完美实现,现在我就来总结一下,我在实现的过程中遇到的问题和总结出来的经验。

TextBox

        第一次机房收费系统,没有想那么多或者说根本想不到那么多,但是这不是第一次,这是第二次,不管从技术上,还是从思想上,都得有点进步才行,技术上就不说了,说说思想,第一次机房的时候就听说有人用循环遍历处理TextBox,当时没在意,现在我感觉,如果不用,这个机房重构我根本做不下去,看到那么多重复的代码头疼。话不多说,先看一个判断所有TextBox和ComboBox是否为空的。

#region//判断是否为空
foreach (Control ctrl in this.Controls)   // 所有的TextBox 或者 ComboBox为空
{
    if (ctrl is TextBox || ctrl is ComboBox)
    {
        if (ctrl.Text == "")
        {
            MessageBox.Show("请输入完整信息。");
            ctrl.Focus();
            return;
        }
    }
}
#endregion
        再来个清空所有TextBox中内容的。

#region//清空text
foreach (Control ctrl in this.Controls)
{
    if(ctrl is TextBox){ ctrl.Text = ""; }
}
#endregion
        根本停不下来,再来一个判断TextBox中内容是否为数字的。

public bool isnumeric(string str)
{
    ASCIIEncoding ascii = new ASCIIEncoding();//new ASCIIEncoding 的实例  
    byte[] bytestr = ascii.GetBytes(str);         //把string类型的参数保存到数组里  
    foreach (byte c in bytestr)                   //遍历这个数组里的内容  
    {
        if (c < 48 || c > 57)                          //判断是否为数字  
        {return false; }
    }
    return true;
}
        好了,关于TextBox先说到这里。

优化

        优化我是和代码同步进行的,总觉得在运行的时候看着怪怪的窗体太难看,心里别扭,再有就是如果等完成了再去优化工作量会太大,所以,我在完成这么几个功能的情况下,优化没有落下。

窗体固定大小

        首先,看一下窗体的优化,在各个窗体中,有时候你不想让这个窗体有最大化的功能,而且用户也不能自行去改变窗体的大小,你就要设置这两项:

1、MaximizeBox的属性设置为false;

2、AutoSize的属性设置为GrowAndShrink。

        好了,是不是发现用户再也不能改变窗体的大小了。

背景图片

        一个好的界面能让用户心情舒畅,本着界面友好的思想,我们就需要在frmMain中添加图片,根据王啸的建议,我们现在frmMain窗体上添加Panel容器,然后在这个容器上面添加一个PictureBox,然后添加自己认为美丽的图片,别忘了把图片置底,第一步就完成了。

控件浮动

        完成第一步后,我们兴高采烈的打开窗体欣赏一下自己的系统,打开一个子窗体,却发现所有控件浮动在子窗体之上,这是为什么呢?其实我们在VB第一版机房的时候就有这个问题,当时我们是引用了一个API函数解决的,这次同样适用。

1、首先,引用命名空间:

    using System.Runtime.InteropServices;

2、然后,引用该函数:

    [DllImport("user32")]
    public static extern int SetParent(int hWndChild, int hWndNewParent);

3、在我们需要将子窗体显示出来的时候:

    子窗体 ad = new 子窗体();
    ad.MdiParent = this;
    ad.Show();
    SetParent((int)ad.Handle, (int)this.Handle);

    注意,这个要在MID主窗体的触发事件中编写哦。

控件透明

        完成了上面两步之后,会发现界面几乎完美了,唯一的缺点就是,我有背景图片,但是label控件那难看的颜色却浮在图片表面,让人很是捉急,有的同学会把label控件的BackColor属性设置为Transparent,以为这样就能实现透明,这样是不能的,由于控件属于窗体不属于picturebox,所以就算透明了,它的颜色也是主窗体的颜色,这怎么办呢?

1、就像上一步,将label控件的BackColor属性设置为Transparent。

2、给label控件换个“爹”

    #region//改变控件属于图片
    this.pictureBox.Controls.Add(this.label1);

    #endregion

    注意:这里,我尝试了很多方法,始终没能将这个语句改变成循环遍历语句,只能有多少个label写多少次这个语句了,如果有小伙伴能写出这个语句的遍历的话,欢迎给我留言哦。

总结

        及时的总结往往能让我们学到更多的东西,不要等好多东西都忘记了,才想起去总结,这是我这么长时间总结出来的惟一一个我觉得特别对的道理。

        下图附上一张我的机房登录后的图。






  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 38
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 38
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值