2016-10-19 24 views
0

noob问题在这里。我正在尝试编写一个程序,以便当有人在标签上点击鼠标左键时,文本框中的值增加1.当右键点击它时,值减1。不希望价值能够成为负数。我试图阻止它的发生,并且它在文本框中已经存在正值时起作用。但是,如果在左键单击标签之前(在文本框中有任何值之前)右键单击该标签,它仍会变为“-1”,然后在此处停止。下面是我使用的代码:如何不允许文本框有负值? (Visual Basic)

Private Sub Label5_MouseClick(sender As Object, e As MouseEventArgs) Handles Label5.MouseClick 

    If e.Button = MouseButtons.Left Then 
     SawWhetOwl.Text = (Val(SawWhetOwl.Text) + 1).ToString() 
     Label5.Text = SawWhetOwl.Text 
    ElseIf e.Button = MouseButtons.Right Then 
     If SawWhetOwl.Text = CInt(SawWhetOwl.Text < 0) Then 
      Exit Sub 
     Else 
      SawWhetOwl.Text = (Val(SawWhetOwl.Text) - 1).ToString() 
      Label5.Text = SawWhetOwl.Text 
     End If 
    End If 
End Sub 

的问题,我认为,是在文本框中的值出发为空,没有分配给它的价值。因此,当我给它赋值之前右键单击它时,它不能计算它是否小于0,它只是给我-1,我想。我很困惑,抱歉如果这个问题很混乱。我错过了明显的东西吗?

+0

您可能需要使用的NumericUpDown如果数值或范围是很重要的 – Plutonix

+0

我将如何申请,在代码,我张贴?我是绝对的编程初学者,所以我真的不知道那是什么。 – onemillionwords17

+0

它们在控制工具箱中 - 而不是文本框(用于文本)使用“NumericUpDown”来收集数字。它有最小,最大和小数位的属性,以允许你想要的 – Plutonix

回答

0

您可能需要检查文字不为空以减少计数。

Private Sub Label5_MouseClick(sender As Object, e As MouseEventArgs) Handles Label5.MouseClick 

    If e.Button = MouseButtons.Left Then 
     SawWhetOwl.Text = (Val(SawWhetOwl.Text) + 1).ToString() 
     Label5.Text = SawWhetOwl.Text 
    ElseIf e.Button = MouseButtons.Right Then 
     If String.IsNullOrEmpty(SawWhetOwl.Text) OrElse CInt(SawWhetOwl.Text) <= 0 Then 
      Exit Sub 
     Else 
      SawWhetOwl.Text = (Val(SawWhetOwl.Text) - 1).ToString() 
      Label5.Text = SawWhetOwl.Text 
     End If 
    End If 
End Sub 
+0

visual studio在'IsNullOrEmpty'下放置一条红线,表示没有声明? – onemillionwords17

+0

哦,对了......应该是String.IsNullOrEmpty。更新了帖子。 –

+0

它似乎应该工作,但是当我运行它并右键单击它崩溃,然后指向“如果SawWhetOwl.Text = CInt(SawWhetOwl.Text <0)OrElse String.IsNullOrEmpty(SawWhetOwl.Text)然后”line ,并说“在Microsoft.VisualBasic.dll 中发生”类型'System.InvalidCastException'未处理的异常其他信息:从字符串“”转换为类型'双'无效。“ – onemillionwords17