再问一个简单问题,为啥函数总是执行两次?

freeia 2003-09-15 12:09:25
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
ComboBoxEx1->Items->Add("vc");
ComboBoxEx1->Items->Add("bcb");
ComboBoxEx1->Text = "abc";
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ComboBoxEx1Change(TObject *Sender)
{
ShowMessage(ComboBoxEx1->Text);
}
//---------------------------------------------------------------------------

我想就凭这些大家已经知道我的整个测试代码了.
我切换时,ShowMessage总是连续执行两次,为何?有什么办法让它只执行一次?
...全文
119 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
asimpleman 2004-03-08
  • 打赏
  • 举报
回复
up
freeia 2003-09-16
  • 打赏
  • 举报
回复
那为啥我点击COmboBox切换时候也显示两次呢?
firestars 2003-09-16
  • 打赏
  • 举报
回复
并不是这样的,combobox在刚画出来的时候是会触发onChange事件的,然后你又ComboBoxEx1->Text = "abc"; 就会第二次触发这个事件。
freeia 2003-09-16
  • 打赏
  • 举报
回复
自己顶一下.
sun_wyz 2003-09-15
  • 打赏
  • 举报
回复
在comboBox的change事件中最好使用index来获得text..
sun_wyz 2003-09-15
  • 打赏
  • 举报
回复
你为什么不在设计时期就把那些item填到combobox里去呢??
freeia 2003-09-15
  • 打赏
  • 举报
回复
明白.
但是为什么上面的这种情况竟然啥都没得到呢?怪啊.
freeia 2003-09-15
  • 打赏
  • 举报
回复
我这个好像也是触发两次啊.
但是在我的工程里面ComboBoxExAccountList->Text;//这里得到的内容竟然为空,faint~~~~~~~~~

void __fastcall TFormMain::ComboBoxExAccountListChange(TObject *Sender)
{
AnsiString strAccountName = ComboBoxExAccountList->Text;//这里得到的内容竟然为空,faint~~~~~~~~~
this->LoadAccountInfo(ComboBoxExAccountList->Text);
}
不知有没有人碰到过.
sun_wyz 2003-09-15
  • 打赏
  • 举报
回复
我的意思是如果你要精确的判断OnChange事件,最好设置一个变量比如bool IsChang;
第一次发生OnChange事件后就 IsChange=true;

以后判断为true就说明已经改变过了,就执行别的东西了
sun_wyz 2003-09-15
  • 打赏
  • 举报
回复
TrackBar控件的OnChange事件,鼠标按下和抬起同样触发2次,除了第一次触发。。。。。
freeia 2003-09-15
  • 打赏
  • 举报
回复
"错了!是TrackBar控件"
你在说什么啊?
freeia 2003-09-15
  • 打赏
  • 举报
回复
To sun_wyz:
就是说要在里面再判断鼠标是按下还是抬起?这样就可以是一次了,对不?
sun_wyz 2003-09-15
  • 打赏
  • 举报
回复
错了!是TrackBar控件
freeia 2003-09-15
  • 打赏
  • 举报
回复
void __fastcall TFormMain::ComboBoxExAccountListChange(TObject *Sender)
{
AnsiString strAccountName = ComboBoxExAccountList->Text;//这里得到的内容竟然为空,faint~~~~~~~~~
this->LoadAccountInfo(ComboBoxExAccountList->Text);
}
sun_wyz 2003-09-15
  • 打赏
  • 举报
回复
spliter的OnChange事件,鼠标按下课抬起同样触发2次,除了第一次触发。。。。。

vcl的消息机制决定的吧。。。。。。。。。。。。
ccrun.com 2003-09-15
  • 打赏
  • 举报
回复
程序在执行ComboBoxEx1->Items->Add("vc");时已经触发ComboBoxEx1Change了。
thp 2003-09-15
  • 打赏
  • 举报
回复
d
wenminghu 2003-09-15
  • 打赏
  • 举报
回复
to chenqm():
不知你有没有用简单的例子测试过,到底有没有这种毛病.
chenqm 2003-09-15
  • 打赏
  • 举报
回复
楼主所给出的程序运行时,如果切换ComboBoxEx1的值,ShowMessage绝不会连续执行两次(只能执行一次)。因为ComboBoxEx1Change()事件仅当ComboBoxEx1->Text发生变化时触发,而在楼主给出的代码中,切换ComboBoxEx1的值并不会引发 A事件:
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
运行。当然如果引发了A事件,A事件发生时的涉及的三个步骤:
ComboBoxEx1->Items->Add("vc");
ComboBoxEx1->Items->Add("bcb");
ComboBoxEx1->Text = "abc";
中的前两个步骤只是使ComboBoxEx1->Items对应的选择增加两种,并未使ComboBoxEx1->Text发生变化,第三步当然只能引发ComboBoxEx1Change()事件一次,大家可以上机试一下。
也许是楼主将遇到的问题进行了不正确的抽象。或者是楼主的原代码中在切换ComboBoxEx1的值时,因其它代码(并未给出)引发A事件或改变ComboBoxEx1的值。

sun_wyz 2003-09-15
  • 打赏
  • 举报
回复
用index就没问题的了
加载更多回复(2)

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧