首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

DBEdit与Onclick事件的小疑问,无法理解,该怎么处理

2012-02-26 
DBEdit与Onclick事件的小疑问,无法理解现在我的窗口里有两个为DBEdit1与DBEdit2,我想实现的是互斥按钮的效

DBEdit与Onclick事件的小疑问,无法理解
现在我的窗口里有两个为DBEdit1与DBEdit2,我想实现的是互斥按钮的效果,如点击DBEdit则赋值为"√",表示已选择,我是在两个DBEDit1与DBEdit2的onclick事件,都同时指向同一个DBEditClick函数如下:
void __fastcall TfrmAddBl::DBEditClick(TObject *Sender)
{

  AnsiString asTempDBEditName = ((TDBEdit *)Sender)->Name;
  AnsiString asDBEditContent;
   
  if ( ((TDBEdit *)Sender)->Text == "" )
  ((TDBEdit *)Sender)->Text = "√";
  else
  ((TDBEdit *)Sender)->Text = "";

  if ( asTempDBEditName == "DBEdit1" || asTempDBEditName == "DBEdit2"){
   
  int sum = (DBEdit1->Text == "√") + (DBEdit2->Text == "√");
  if( sum != 0 ){ //如果两个都没选择,则不处理,否则,先清空再赋值
  DBEdit1->Text = "";
  DBEdit2->Text = "";
  ((TDBEdit *)Sender)->Text = "√";
  }
  }
}

上面的代码,运行可以实现互斥了,但现在有个小问题,如,
1.先点击DBEdit1,
2.再点击DBEdit2,可以实现互斥的效果,此时DBEdit2打上勾了,
3.点击DBEdit2,将勾取消,此时两个勾都没了,
4.第四步,当我接着点击DBEdit1时,这个勾打不上,
  我单步调试时,发现,在第四步单击DBEdit1时,还没进入DBEditClick事件,就已经被赋值为"√",接着在DBEditClick就会将其作为原来是打勾的,故又赋值为"",从而出现打勾打不上的情况,我所不理解的事情就是在第四步的时候,原来DBEdit1为空的,点击时,还没进入DBEditClick事件,为什么就已经被赋值为"√"
  讲得有点啰嗦,求论坛各位指教下。。。。。。

[解决办法]
经测试,第四步没有发现你说的情况
[解决办法]
废话不说,直接上码
void __fastcall TfrmAddBl::DBEditClick(TObject *Sender)
{
AnsiString asTempDBEditName = ((TDBEdit *)Sender)->Name;
if (asTempDBEditName=="DBEdit1")
{
if (DBEdit1->Text == "√")
{
DBEdit1->Text == "";
}
else
{
DBEdit1->Text == "√";
DBEdit2->Text == "";
}
}
else if (asTempDBEditName=="DBEdit2")
{
if (DBEdit2->Text == "√")
{
DBEdit2->Text == "";
}
else
{
DBEdit2->Text == "√";
DBEdit1->Text == "";
}
}
}
[解决办法]
来个简单的方法

void __fastcall TfrmAddBl::DBEditClick(TObject *Sender)
{
AnsiString sTemp = ((TDBEdit *)Sender)->Text ;
DBEdit1->Text = "";
DBEdit2->Text = "";

 ((TDBEdit *)Sender)->Text =sTemp =="√" ? "":"√";

}

如果有多个组件互斥,可以先定义一个数值,把所有组件的指针存进去
事件里循环依次判别,是本组件的,符号取反,不是本组件一律置空。
[解决办法]
我是按楼主的意图写的,代码简单多了,可以互斥,也可以全部取消,lz试试我的代码就知道了。
最后一个条件语句会根据组件原来的值取反的。
lz仔细看这个语句:
((TDBEdit *)Sender)->Text = sTemp == "√" ? "":"√";

热点排行