不晓得是不是bug,进来看看!

annkie 2003-05-25 02:28:32
void __fastcall TMainForm::cbDWXZChange(TObject *Sender)
{
if(((TDBComboBox *)Sender)->ItemIndex != -1)
{
ShowMessage(((TDBComboBox *)Sender)->ItemIndex);
ShowMessage(((TDBComboBox *)Sender)->Items->Strings[((TDBComboBox *)Sender)->ItemIndex]);
//((TDBComboBox *)Sender)->Text = GetDM(((TDBComboBox *)Sender)->Items->Strings[((TDBComboBox *)Sender)->ItemIndex]);
}
}
当我直接修改默认的Text(确切的说是backspace删除的)时候,ItemIndex非常的大,然后就越界了,非常的奇怪!
...全文
18 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
annkie 2003-05-25
  • 打赏
  • 举报
回复

if(((TDBComboBox *)Sender)->ItemIndex != -1)
改成
if(((TSnDBComboBox *)Sender)->ItemIndex >= 0)
问题解决了。
多谢pazee 和 nobill!结贴。
annkie 2003-05-25
  • 打赏
  • 举报
回复
不好意思,下午突然断网,我写好了的帖子回复不了。
我上面的描述有点不对,当我直接修改Text的时候 ItemIndex就是0,如果我先选择下拉列表
的数据后再修改Text这个时候就会溢出,我得到的一个ItemIndex是 22791420
我的目的是可以让用户选,也可以修改Text,所以
当用户选的时候我把选中的数据重新处理了再设置为Text,问题就在这里实现不了。
((TDBComboBox *)Sender)->Text = GetDM(((TDBComboBox *)Sender)->Items->Strings[((TDBComboBox *)Sender)->ItemIndex]);
AnsiString __fastcall TMainForm::GetDM(const AnsiString sIn)
{
if(sIn.Pos("[") == 0)//直接默认值
{
return sIn;
}
else
{ //返回"【"与"】"之间的字符串
return sIn.SubString(sIn.Pos("[") + 1,sIn.Pos("]")- sIn.Pos("[") - 1);
}
}
请问有什么建议吗?
nobill 2003-05-25
  • 打赏
  • 举报
回复
我顶!
耙子 2003-05-25
  • 打赏
  • 举报
回复
你那个数是不是 4294967295 ?
耙子 2003-05-25
  • 打赏
  • 举报
回复
你先判断一下是不是-1就行了。
annkie 2003-05-25
  • 打赏
  • 举报
回复
似乎明白了,可是不知道如何解决问题
:)
我运行用户可以自己输入数据,这里就有这个问题,但TComboBox控件应该是不会有这个问题的,我这是绑定了数据库,想必跟这有关系,但跟踪的结果是显示itemindex非常大,越界了。
耙子 2003-05-25
  • 打赏
  • 举报
回复
你修改 Text 这时候 ItemIndex就变成了 -1
在无符号的整数里面这个-1当然很大了。

sendermessage参数是无符号类型
(DWORD)(-1) 你看看这个数多大!
你应该避免ItemIndex 出现负数

13,825

社区成员

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

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