2012-07-19 84 views
0

比方说,我有一个密码阵列...循环数组时间C#的WinForms

 var pass = new int[5]; 
     pass[0] = 111111; 
     pass[1] = 222222; 
     pass[2] = 333333; 
     pass[3] = 444444; 
     pass[4] = 555555; 

和当前时间的验证。例如,您的日程安排为上午7:30:00至上午11:30:00,如果您的密码还不是7:30,并且已经过了11:30,您将无法获得密码。但在这段时间之间,没关系,你可以得到你的密码。一旦Button1的点击(W/C意味着您已经授权 - 正确的时间),一个消息框会出现显示类似,

您的密码是111111

等等等等直到所有的密码用完,然后它会再次回到密码111111,222222,333333等......我该怎么办?像什么时间格式?我对时间比较很难。谢谢。

+1

您正在索引第4个元素数组FYI中的第五个元素。你的代码示例会崩溃。 – 2012-07-19 00:54:56

+0

[如何检查当前时间是否在一个时间范围之内?](http://stackoverflow.com/questions/592248/how-can-i-check-if-the-current-time-is-between在一个时间帧) – zimdanen 2012-07-19 00:58:33

回答

2

函数isValidTime仅在一天中的几小时检查时间。

如下所示,您可以使用模块化运算法封装您的密码。

对我来说,以下工作:

private int currentPassword = -1; 
    private int[] passwords = new int[]{111111,222222,333333,444444,555555}; 

    private DateTime startTime = new DateTime(2012, 7, 18, 22, 0, 0); 
    private DateTime endTime = new DateTime(2012, 7, 18, 22, 15, 0); 

    private void button1_Click(object sender, EventArgs e) 
    { 
     if (isValidTime(DateTime.Now)) 
     { 
      currentPassword++; 
      currentPassword = currentPassword % passwords.Length; 

      MessageBox.Show(passwords[currentPassword].ToString()); 
     } 
     else 
     { 
      MessageBox.Show("Try again at a different time"); 
     } 
    } 

    private bool isValidTime(DateTime now) 
    { 
     if (startTime.TimeOfDay.CompareTo(now.TimeOfDay) <= 0) 
     { 
      if (now.TimeOfDay.CompareTo(endTime.TimeOfDay) <= 0) 
      { 
       return true; 
      } 
     } 
     return false; 
    } 

刚开始一个新的Windows窗体中添加一个按钮1,这个代码应工作。

+0

它工作得很好,但是当我关闭消息框并尝试获取下一个密码(它是222222)时,它仍然是111111.为什么? – 2012-07-21 07:09:24

+0

@CantHandleMeBabe您是偶然关闭程序,而不是关闭消息框?因为,我们每次在显示msgBox之前增加密码。如果您希望currentPassword值在应用程序运行之间持续存在,请在您的问题中提及它。 – Xantix 2012-07-23 21:35:57