当前位置: 代码网 > it编程>编程语言>Asp.net > visual studio C# winform实现个人信息的导入导出

visual studio C# winform实现个人信息的导入导出

2024年08月01日 Asp.net 我要评论
2、添加5个label分别命名为label_Name、label_Address、label_Occupation、label_Age、Label_Output,text属性分别为:姓名、地址、工作、年龄、输出。添加5个textBox分别命名为textBox_Name、textBox_Address、textBox_Occupation、textBox_Age、textBox_Output。3、将textBox_Address、textBox_Output的multiline属性改成TRUE。

1、新建工程命名为windowsformtextboxvalidation。

2、添加5个label分别命名为label_name、label_address、label_occupation、label_age、label_output,text属性分别为:姓名、地址、工作、年龄、输出。添加5个textbox分别命名为textbox_name、textbox_address、textbox_occupation、textbox_age、textbox_output。添加2个按钮,分别命名为btn_ok、btn_help,text属性分别为确定、帮助。

3、将textbox_address、textbox_output的multiline属性改成true。

4、把窗体的text值设成textboxtestvalidation。

5、把textbox_output的readonly属性设成true。

6、把textbox_address和textbox_output的scrollbar属性值设为true。

7、将btn_help的causesvalidation属性设置为false。

8、设置所有类型控件的anchor属性。首先按住ctrl键,依次选择除了textbox_output之外的所有文本框控件,在properties窗口中把anchor属性值设置为top、left、right,然后选择textbox_output将他的anchor属性设置成top、bottom、left、right,最后把两个按钮的anchor属性设置成top、right。

9、运行程序看效果。

10、给btn_ok填写代码,如下:
private void btn_ok_click(object sender, eventargs e)
{
string output;
output = "姓名: " + this.textbox_name.text + “\r\n”;
output += "地址: " + this.textbox_address.text + “\r\n”;
output += "工作: " + this.textbox_occupation.text + “\r\n”;
output += "年龄: " + this.textbox_age.text + “\r\n”;
this.textbox_output.text = output;
}

11、给btn_help填写代码,如下:
private void btn_help_click(object sender, eventargs e)
{
string output;
output = “姓名 = 你的名字\r\n”;
output += “地址 = 你的家庭住址\r\n”;
output += “工作 = 这里只允许填写"程序员”\r\n";
output += “年龄 = 你的年龄\r\n”;

        this.textbox_output.text = output;
    }

12、在插入用户信息的时候无需检查信息是否正确,这就是说,必须在其他地方进行验证检查。此时需要满足的条件为:用户名不能为空;用户的年龄必须是一个大于或等于0 的数字;用户的职业必须是“程序员”或者空;用户的地址不能为空。

13、此时应该考虑当用户没有输入完成信息时不能点击“确定”按钮。所以在窗体构造函数中将btn_ok的enable属性设成false。
public form1()
{
initializecomponent();

     this.buttonok.enabled = false;

  }

14、给textbox_name添加validating事件代码,如下:
private void textbox_name_validating(object sender, canceleventargs e)
{
if (textbox_name.text.length == 0)
{
textbox_name.backcolor = color.red;
//textbox_name.tag = false; //后加入
}
else
{
textbox_name.backcolor = system.drawing.systemcolors.window;
}
}

15、运行程序,演示两种情况,首先,当text为空时光标离开textbox_name,其次当text不为空时光标离开textbox_name。

16、给textbox_address添加validating事件代码,如下:
private void textbox_address_validating(object sender, canceleventargs e)
{
if (textbox_address.text.length == 0)
{
textbox_address.backcolor = color.red;
//textbox_address.tag = false; //后加入
}
else
{
textbox_address.backcolor = system.drawing.systemcolors.window;
}
}

17、这里我们如何告诉按钮btn_ok输入的信息合法并使btn_ok可用呢?这里采用控件tag属性来完成这项任务,这里我们可以吧tag属性理解为控件的状态。tag属性是用来存储控件信息的属性值。当通过windows form 设计器给属性赋值时,就只能给它赋一个字符串值。所以这里我们在form的构造函数中添加如下代码而不选择在窗体设计器中添加属性:
public form1()
{
initializecomponent();

     this.buttonok.enabled = false;

     // tag values for testing if the data is valid
     this.textbox_address.tag = false;
     this.textbox_age.tag = false;
     this.textbox_name.tag = false;
     this.textbox_occupation.tag = false;
   }

18、给textbox_age添加keypress事件代码如下:
private void textbox_age_keypress(object sender, keypresseventargs e)
{
if ((e.keychar < 48 || e.keychar > 57) && e.keychar != 8)
{
e.handled = true;
}
}

19、给textbox_occupation添加validating事件,代码如下:
private void textbox_occupation_validating(object sender, canceleventargs e)
{
if (textbox_occupation.text.compareto(“programmer”) == 0 || textbox_occupation.text.length == 0)
{
textbox_occupation.backcolor = systemcolors.window;
textbox_occupation.tag = true;
}
else
{
textbox_occupation.backcolor = color.red;
textbox_occupation.tag = false;
}
}

20、这是我们考虑通过对textbox_name、textbox_age、textbox_occupation、textbox_address的有效性来判断btn_ok的可用与否,此时添加方法validateok(),代码如下:
private void validateok()
{
this.btn_ok.enabled = (bool)(this.textbox_address.tag) &&
(bool)(this.textbox_age.tag) &&
(bool)(this.textbox_occupation.tag) &&
(bool)(this.textbox_name.tag);
}

21、并在每个textbox中的validating代码中添加该函数。修改代码如下:
private void textbox_name_validating(object sender, canceleventargs e)
{
if (textbox_name.text.length == 0)
{
textbox_name.backcolor = color.red;
textbox_name.tag = false;
}
else
{
textbox_name.backcolor = system.drawing.systemcolors.window;
textbox_name.tag = true;
}
validateok();
}

    private void textbox_address_validating(object sender, canceleventargs e)
    {
        if (textbox_address.text.length == 0)
        {
            textbox_address.backcolor = color.red;
            textbox_address.tag = false;
        }
        else
        {
            textbox_address.backcolor = system.drawing.systemcolors.window;
            textbox_address.tag = true;
        }
        validateok();
    }

    private void textbox_occupation_validating(object sender, canceleventargs e)
    {
        if (textbox_occupation.text.compareto("programmer") == 0 || textbox_occupation.text.length == 0)
        {
            textbox_occupation.backcolor = systemcolors.window;
            textbox_occupation.tag = true;
        }
        else
        {
            textbox_occupation.backcolor = color.red;
            textbox_occupation.tag = false;
        }
        validateok();
    }

    private void textbox_age_keypress(object sender, keypresseventargs e)
    {
        if ((e.keychar < 48 || e.keychar > 57)  &&  e.keychar != 8)
        {
            e.handled = true;
        }
        validateok();
    }

22、给textbox_age添加validating事件,代码如下:
private void textbox_age_validating(object sender, canceleventargs e)
{
if (textbox_age.text.length == 0)
{
textbox_age.backcolor = color.red;
textbox_age.tag = false;
}
else
{
textbox_age.backcolor = system.drawing.systemcolors.window;
textbox_age.tag = true;
}
validateok();
}

23、运行应用程序。

24、回想程序,我们发现textbox_name、textbox_age、textbox_address相应的validating事件都是一样的,均为长度不能是0,所以这里考虑合并代码。首先创建事件处理的函数,代码如下:(函数名只需模仿前面的任意一个validating事件的函数名即可)
private void textboxempty_validating(object sender, canceleventargs e)
{
textbox tb = (textbox)sender;
if (tb.text.length == 0)
{
tb.backcolor = color.red;
tb.tag = false;
}
else
{
tb.backcolor = system.drawing.systemcolors.window;
tb.tag = true;
}
validateok();
}

25、将textboxempty_validating替代textbox_name、textbox_age、textbox_address原有的validating事件名。

26、运行程序。

27、事件的添加也可以通过代码实现,在构造函数中添加代码如下,并删除事件窗口的对应函数。
public form1()
{
initializecomponent();
this.btn_ok.enabled = false;
this.textbox_address.tag = false;
this.textbox_age.tag = false;
this.textbox_name.tag = false;
this.textbox_occupation.tag = false;

        this.textbox_name.validating+=new canceleventhandler(textboxempty_validating);
        this.textbox_address.validating+=new canceleventhandler(textboxempty_validating);
        this.textbox_age.validating+= new canceleventhandler(textboxempty_validating);
    }

28、如果用户在文本框出输入里有效的文本,使btn_ok的enable属性值为true,紧接着修改文本框的输入使之成为非法治,此时发现btn_ok仍然为可用状态,此时由于光标没有离开该textbox所以是无法触发validating事件的。所以此时需要添加textchanged事件来解决该问题。

29、给四个textbox控件生成一个共同的textchanged事件。选择所有的4个textbox控件。然后在属性窗口中选择textchanged事件在文本框中输入事件函数名称textbox_textchanged,然后回车。添加的代码如下:
private void textbox_textchanged(object sender, eventargs e)
{
textbox tb = (textbox)sender;
if (tb.text.length == 0 && tb != textbox_occupation)
{
tb.tag = false;
tb.backcolor = color.red;
}
else if (tb == textbox_occupation && (tb.text.length != 0 && tb.text.compareto(“programmer”) != 0))
{
tb.tag = false;
}
else
{
tb.tag = true;
tb.backcolor = systemcolors.window;
}

        validateok();
    }

30、此时发现初始状态下如果,光标不经过textbox_occupation,只对其他三个textbox输入合法值,btn_ok仍然属于不可用状态,此时必须使textbox_occupation至少选中或填写一次正确值才可以是的btn_ok成为可用。这是不合理的。此时考虑修改text_box_occupation.tag的初始值。代码修改如下:
public partial class form1 : form
{
public form1()
{
initializecomponent();
this.btn_ok.enabled = false;
this.textbox_address.tag = false;
this.textbox_age.tag = false;
this.textbox_name.tag = false;
this.textbox_occupation.tag = true;

        this.textbox_name.validating+=new canceleventhandler(textboxempty_validating);
        this.textbox_address.validating+=new canceleventhandler(textboxempty_validating);
        this.textbox_age.validating+= new canceleventhandler(textboxempty_validating);
    }
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/b2628cc437c64ad1860c0dda1766829b.png#pic_center)

在这里插入图片描述

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com