A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘欢(安阳) 中级黑马   /  2012-9-28 10:50  /  1608 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在winform里有一个登陆练习,老师讲的代码是
//string useName = textBox1.Text;
            //string passWard = textBox2.Text;
            
            //if ((useName == "admin") && (passWard == "8888"))
            //{ MessageBox.Show("登陆成功"); }
            //else
            //{
            //    MessageBox.Show("登陆失败!");
            //    times++;
            //    if (times > 3)
            //    { MessageBox.Show("登陆超过三次,退出登陆");
            //    this.Close();
            //    }

(times是全局变量,在外面定义,这里没粘)


然后我想用for循环来做, for (int i = 0; i < 3; i++)
            {
                string useName = textBox1.Text;
                string passWard = textBox2.Text;
                if ((useName == "admin") && (passWard == "8888"))
                { MessageBox.Show("登陆成功"); }
                else
                {
                    MessageBox.Show("登陆失败!");
                }
            }
            MessageBox.Show("登陆超过三次,退出登陆");
            this.Close();
               
            

但是每次循环都不会重新写入TextBox的值,应该怎么解决?

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

4 个回复

正序浏览
在Winform中用for循环去实现这个效果是没什么意义的。只要稍微分析一下程序执行流程就明白了。1.输入用户名和密码  2.点击登录按钮判断:如果正确提示成功,如果不正确给出相应错误处理:错误次数<=3次重新输入,>3次程序退出。重新输入这一操作要执行完button1_Click这一事件函数才能办到。而for循环是写在button1_Click这一函数里。也就是说,输入完毕点登录后因为for(int i=0;i<3;i++)的原因在内部会判断3次(但是在判断过程无法实现重新输入这操作,因为现在仍然在button1_Click内部执行)虽然可以用break改变循环判断次数,但这变得毫无意义。正常交互过程应该是:输入→点击登录判断→输入→点击登录判断.......

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Text;
  7. using System.Windows.Forms;

  8. namespace 密码判断
  9. {
  10. public partial class Form1 : Form
  11. {
  12. int i;
  13. public Form1()
  14. {

  15. InitializeComponent();
  16. }

  17. private void button1_Click(object sender, EventArgs e)
  18. {


  19. for (int k = i; k < 3; )
  20. {
  21. i++;
  22. string useName = textBox1.Text;
  23. string passWard = textBox2.Text;
  24. if ((useName == "admin") && (passWard == "8888"))
  25. { MessageBox.Show("登陆成功"); }
  26. else
  27. {
  28. MessageBox.Show("登陆失败!");
  29. break;

  30. }

  31. }
  32. if (i >=3)
  33. {
  34. MessageBox.Show("登陆超过三次,退出登陆");
  35. this.Close();
  36. }

  37. }
  38. }
  39. }
复制代码
关键是要有个if判断和break跳出配合,就可以实现了。
希望对你有所帮助。

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

回复 使用道具 举报
  1. private int EerroTime = 0;
  2. string useName = textBox1.Text;
  3.                   string passWard = textBox2.Text;                  
  4.             for (int i = 0; i < 3; i++)
  5.             {               
  6.                 if ((useName == "admin") && (passWard == "8888"))
  7.                 {
  8.                     MessageBox.Show("登陆成功");
  9.                     break;
  10.                 }
  11.                 else
  12.                 {
  13.                     EerroTime++;
  14.                     if (EerroTime < 3)
  15.                     {
  16.                         MessageBox.Show("登录失败");
  17.                         break;
  18.                     }
  19.                     else
  20.                     {
  21.                         MessageBox.Show("登录次数过多");
  22.                         break;
  23.                     }
  24.                 }
  25.                 this.Close();
  26.             }
复制代码
关键是在方法外部定义EerroTime 变量的值,使其在随着for循环自增的情况下,而不每次都要初始化

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 许庭洲 于 2012-9-28 11:15 编辑

//用if......else...... 语句解决
private void button1_Click(object sender, EventArgs e)
{
              string username = txtUserName.Text.Trim();
              string password = txtPassword.Text;
              if(username.Equals("admin",StringComparison.OrdinalIgnoreCase&&password == "888888")
             {
                        Message.Show("登陆成功!");
             }
            else
            {
                      int i=0;
                      i++;
                      if(i>=3)
                      {
                              MessageBox.Show("登陆成功!");
                       }
                      esle
                      {
                              /*
                               int i=0;
                               i++;
                               if(i>=3)
                               {
                                        MessageBox.Show("错误次数过多,程序即将退出!");
                                        Application.Exit();
                                }*/
                               ErrorTimes++; //局部变量每次运行完毕变量的值都会被销毁,下次再运行,会重新初始化。而类字段,只要是一                                                        

                               //个对象,那么只要对象不销毁,就会一直保持对象的字段值。
                              if(ErrorTimes>=3)
                              {
                                         MessageBox.Show("错误次数过多,程序即将退出!");
                                         Application.Exit();
                              }
                               MessageBox.Show("登陆失败!");
                         }
                }                              
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马