回 帖 发 新 帖 刷新版面

主题:一个不知道怎么形容的弱智问题

private bool flag;

private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
  if(e.KeyChar==(char) 13)
  textBox2.Focus();
  else if(e.KeyChar<'0'||e.KeyChar>'9')
  {
     MessageBox.Show("只能输入数字");
     flag=false;
  }
     else
     flag=true;
        
  }

private void textBox1_TextChanged(object sender, System.EventArgs e)
{
    if(flag==false)
{
    string s1;
    s1=textBox1.Text;
    [color=800000][size=4][u]flag=true[/u][/size][/color]
    textBox1.Text=s1.Remove(s1.Length-1,1);
}
}

划线部分一旦删除,编译时在textBox1中输入数字,如果出现了非数字就会报"StartIndex 不能小于 0。"的错,但是s1的值是有的,为什么还会报这种错呢

回复列表 (共5个回复)

沙发

private void textBox1_TextChanged(object sender, System.EventArgs e)
{
    if(flag==false)
{
    string s1;
    s1=textBox1.Text;
    //flag=true
    textBox1.Text=s1.Remove(0,s1.Length);
}
}

这样就算把flag=true注释掉也不会出问题了

板凳

我是群里的Jack,帮你问题解决了,我得睡觉了

3 楼

这样做的效果是把textBox1里的内容都清了,我要的效果只是想把最后那个非数字的字符删掉,我是想知道flag=true在这里的效果是什么,因为我测了一下,加不加flag=true,s1的值都是应该存在的,但是一旦删除,执行后就会出现:StartIndex 不能小于 0。难道这个时候s1是没有任何值的吗

4 楼

你把flag=true加上,当第二次输入非数字字符时,还是会把前面的数字一起清掉的,同样存在问题

5 楼

你放了个flag=true,也就是执行了上面那个方法里的else,也就是说当输入数字时执行下面remove,而去掉后,执行的是else if,所以,不论你输入的是数字还是其他字符实际上文本框里没有值,也就出现了StartIndex 不能小于 0

我来回复

您尚未登录,请登录后再回复。点此登录或注册