|
박지훈.임프 님이 쓰신 글 :
: 박상열 님이 쓰신 글 :
: : 안녕하세여.....제가조금 멍청해서 다시질문드립니다
: : 근데여 ==로 Ansi스트링을 비교해서요
: : 비교한 값이 참이면 메세지박스를 띄우고
: : 참이아니면 다른 리스트박스에 비교하고자했던 스트링을 넣으려고 하는데요
: : 디버거를 실행해서 보니까요
: : == 연산으로 했을때 양쪽다 같은값이 들어가도 메세지박스가 뜨지가 않걸랑요
: : 이유가 무엇인지 아니면 제가 엉뚱하게 코딩을 해서인지.....
: : 수고스럽겠지만 한번만 더 봐주세여
: :
: : int k1;
: : AnsiString astr1,r_astr;
: : char szBuff[128],szBuff1[128];
: :
: : // 리스트박스의 사용자를 친구로 등록
: :
: : for ( int cnt=0;cnt<Search->ListBox1->Items->Count; cnt++ ){
: : k1 = Search->ListBox1->Selected[cnt];
: : if(k1){
: : astr1 = Search->ListBox1->Items->Strings[cnt];
: : }
: : }
: : for ( int cnt=0;cnt<Register->ListBox1->Items->Count; cnt++ ) {
: : r_astr = Register->ListBox1->Items->Strings[cnt];
: : if(astr1 == r_astr){
: : MessageDlg("이미 등록되있는 친구입니다",mtInformation,TMsgDlgButtons() <<mbOK,0);
: : break;
: : }
: : else{
: : Register->Show();
: : Register->ListBox1->Items->Add(astr1.SubString(1,80));
: : Register->SaveFile();
: : }
: :
: :
: : }
: :
: : 그럼 부탁좀드리겠습니다.....
:
:
:
: 임펠리테리입니다.
:
: 보여주신 내용만으로는 이상이 없어보입니다. 실제로 다른 문자열이거나, 혹은 마지막의
: Register->ListBox1->Items->Add(astr1.SubString(1,80));
: 이 라인이 의심스럽습니다.
:
: 참고로 말씀드리면.. TListBox에서 선택된 아이템 문자열을 얻어오기 위해 for 루프를 돌리면서 TListBox::Selected 프로퍼티로 검사를 하셨는데, 멀티셀렉트가 가능한 경우라면 그렇게 해야하지만, 보여주신 코드를 봐서는 멀티셀렉트를 고려하지 않으셨으니 그냥,
: Search->ListBox1->Items->Strings[Search->ListBox1->ItemIndex]
: 라고 하면 선택된 아이템의 문자열이 됩니다.
:
: 또한, TListBox::Items 프로퍼티는 TStrings형이므로, IndexOf() 메소드를 쓰면 소스가 아주 간단하게 됩니다. TStrings::IndexOf() 메소드는 인자로 넘겨준 문자열이 존재할 경우 그 인덱스를 돌려주고, 만약 없으면 -1을 돌려주는 함수입니다.
:
: astr1 = Search->ListBox1->Items->Strings[Search->ListBox1->ItemIndex]
: if(Register->ListBox1->Items->IndexOf(astr1) >= 0)
: MessageDlg("이미 등록되있는 친구입니다",mtInformation,TMsgDlgButtons() <<mbOK,0);
: else
: {
: Register->Show();
: Register->ListBox1->Items->Add(astr1.SubString(1,80));
: Register->SaveFile();
: }
:
: 그럼 참고하시길...
:
안녕하세요..!! 이영수 입니다.
AnsiString의 == 연산자는 약간 불안정한 면이 있습니다...
그래서 대응책으로 내놓은 AnsiString 메서드가 있죠...!!
이름 하야 짠짠!! AnsiCompare 입니다.
사용예는 다음과 같습니다.
AnsiString strTemp1 = "Test";
AnsiString strTemp2 = "test";
if(!strTemp1.AnsiCompare(StrTemp2))
{
같을 때 실행되는 부분
}
else
{
틀릴때 실행되는 부분
}
참고로 같으면 0을 리턴 합니다.
이상 임다..
|