Q&A

  • [질문]리스트 박스 관련
리스트 박스 관련 질문입니다.

리스트박스에 인쇄할 파일 관련 정보가 있는데요.

예를 들면  
ㅡㅡㅡㅡㅡㅡㅡㅡㅡ
ㅣ doc1, page 1 ㅣ
ㅣ doc2, page 2 ㅣ                      
ㅣ doc3, page 3 ㅣ
ㅡㅡㅡㅡㅡㅡㅡㅡㅡ      

출력버튼을 누르면 리스트에 있는 정보를 읽어서
출력하게 하는 건데요 (출력 부분 소스는 생략)

var              
    strl  : TStringList;
    str   : String;

  for i := 0 to Listbox1.Items.Count -1  do
  begin
        str := Listbox1.Items[ListBox1.ItemIndex + 1];   // **
        strl := TStringList.Create;
        strl.Text := StringReplace(str, ',', #13#10 , [rfReplaceAll] );
  end;


이런식으로 소스를 작성하다 보니까
리스트박스를 아무것도 선택하지 않으면 ** 부분이 에러가 안 생기는데
만약에 doc2를 선택하면 index 값이 1이 되서
** 부분때문에 List Index out of bounds  에러가 생겨요.

어떤식으로 접근해서 해결해야 될까요?
4  COMMENTS
  • Profile
    최용일 2009.06.05 19:36
    선택한 것만 출력할것이 아니라면(목록의 모든것 출력) 아래와 같이 고치시는것이 맞을것 같은데요...

    str := Listbox1.Items[i]; // **
  • Profile
    행복찾기 2009.06.05 19:52
    되네요~ 감사합니다! ^^
    또 궁금한게 있는데요.
    만약에 선택한 index가 있으면 그것만 출력하게 하려고 하면요.
    리스트가 선택 되어있는지 없는지 알 수는 없나요~?
    제가 처음에 생각한 거는
    리스트가 선택되어 있다면
    처음 index값을 0으로 바꿔주려고 했었거든요~
  • Profile
    최용일 2009.06.05 20:28
    헬프를 보세요.
    TListBox.ItemIndex가 선택된 아이템의 인덱스을 가리킵니다. 선택되지 않을때는 -1이구요...

    if ListBox1.ItemIndex <> -1 then // if item selected
    begin
    str := Listbox1.Items[ListBox1.ItemIndex];
    strl := TStringList.Create;
    strl.Text := StringReplace(str, ',', #13#10 , [rfReplaceAll] );
    end;
  • Profile
    행복찾기 2009.06.08 20:58
    정보 감사합니다 ^^