逻辑问题,请大家帮忙ListView第5列可能值只有T,B两个字母,我现在载入一个表,我想检测该表中第5列如果没有T
逻辑问题,请大家帮忙
ListView第5列可能值只有T,B两个字母,我现在载入一个表,我想检测该表中第5列如果没有T,就跳出一个提示对话框,代码如下,但是下面这个代码是检测第5列中不等于T的,效果不一样,因为如果有B的话,B不等于T,还是会跳出对话框。这个逻辑关系,我搞糊涂了,请达人给解答下
C/C++ codefor(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 列数据完全一致
// 同样的,该干什么干什么
}
//---------------------------------------