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

逻辑有关问题,请大家帮忙

2012-05-09 
逻辑问题,请大家帮忙ListView第5列可能值只有T,B两个字母,我现在载入一个表,我想检测该表中第5列如果没有T

逻辑问题,请大家帮忙
ListView第5列可能值只有T,B两个字母,我现在载入一个表,我想检测该表中第5列如果没有T,就跳出一个提示对话框,代码如下,但是下面这个代码是检测第5列中不等于T的,效果不一样,因为如果有B的话,B不等于T,还是会跳出对话框。这个逻辑关系,我搞糊涂了,请达人给解答下

C/C++ code
for(int i = 0; i < ListView1 -> Items -> Count; i++)    {    if((ListView1 -> Items -> Item[i] -> SubItems -> Strings[3] != "T")        {        MessageBox(NULL, "List表中没有T, 如需要请重新加载数据...", "提示", MB_ICONINFORMATION | MB_OKCANCEL);        break;        }    }


[解决办法]
如果确保 第 5 列只有 T 或者 B 的话,那么 

AnsiString s = ListView1->Items->Item[i]->SubItems->Strings[3].UpperCase();

if ( s == "T" )
{
}
else
{

}

[解决办法]
你提问把别人搞运了
你是问,不包含T的显示对话框吗

AnsiString s = ListView1->Items->Item[i]->SubItems->Strings[3].UpperCase();
if(s.Pos("T")<=0)
{
MessageBox(NULL, "List表中没有T, 如需要请重新加载数据...", "提示", MB_ICONINFORMATION | MB_OKCANCEL);
}
[解决办法]
ListView只是一个显示工具,最好不要在ListView中做检测
在内存中保留一份原始数据,对原始数据进行操作,把结果通过各种控件展现出来
[解决办法]
void __fastcall TForm1::Button1Click(TObject *Sender)
{
// 取出第一行第5列的值,无论是 T 还是 B
AnsiString s = ListView1->Items->Item[0]->SubItems->Strings[3].UpperCase();

// 循环比对剩余的行, 如果不与第一行一致则报警
// 因为需求为: 要么全部T,要么全部B, 反正不能有交叉出现的情况
for ( int i=1, n=ListView1->Items->Count; i<n; ++i )
{
// 如果发现不一致的字符
if ( s != ListView1->Items->Item[i]->SubItems->Strings[3].UpperCase() )
{
// 报警啦,然后该做什么做什么
ShowMessage("adsfasfasdfasdf");
// to do

return;
}
}

// 如果执行到这里了,那就是第 5 列数据完全一致
// 同样的,该干什么干什么

}
//---------------------------------------

热点排行