日期:2014-05-17  浏览次数:20913 次

vs2005简单的问题
我建了一个windows应用程序,里面有几个textbox,我在它的属性中设置tag为false,可以运行,但是会出现异常,我在构造函数中定义
  this.nametextBox.Tag = false;
  就可以。那这两个设置有什么区别呢?


System.InvalidCastException: 指定的转换无效。
  在 WindowsApplication1.Form1.Validatedok() 这是异常,代码太长只能节选!



this.nametextBox.Validating +=new 
  System.ComponentModel.CancelEventHandler(this.textboxempty_Validating);


private void textboxempty_Validating(object sender, System.ComponentModel.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;
  }
  Validatedok();
  }


 private void Validatedok()
  {
  this.okbutton1.Enabled = ((bool)(this.nametextBox.Tag)
  && (bool)(this.addresstextbox.Tag)
  && (bool)(this.agetextBox4.Tag)
  && (bool)(this.occupationtextBox3.Tag));
  }

------解决方案--------------------
在它的属性中设置tag为false,取tag的值为string类型,直接转为bool类型就会报错,如果在构造函数中设置,用false给tag赋值,会默认为bool型,如果你在程序中this.nametextBox.Tag = "false",同样转换会报错。