|
질문 내용이 잘 이해가 안됩니다. 혼란스럽네요.
만약 제가 제대로 짐작한 거라면... 리스트박스에 여러 아이피들이 나열되고, 그중 하나를 선택하면 그게 클라이언트 소켓의 Address 속성에 넣는 거 맞습니까? (그런데 스트링그리드가 갑자기 나오고 해서 그것도 아닌 거 같기도 하고..)
하여튼 제 짐작이 맞다면...
보여주신 코드는 아이피 주소들이 줄줄줄 나열되어 있는 텍스트 파일을 불러들이는 코드와 그중 첫번째 항목을 클라이언트 소켓에 설정하는 코드입니다. 불러들이는 코드는 있는데, 당연히 일단 불러들인 후에 나중에 선택을 하겠죠? 그리고 아마도 OK 버튼 등을 눌렀을 때 처리하려는 것 아닌가요?
그렇다면, 예를 들어 OK 버튼을 눌렀을 때 처리하면 된다면, 옵션 폼이 나타날 때 다음 코드를 실행하고,
ListBox->Items->LoadFromFile("data.ini");
마지막에 OK 버튼의 이벤트 핸들러에서,
cs1->Address = ListBox->Items->String[ListBox->ItemIndex];
이렇게 해주면 될 겁니다.
주의할 것은, 만약 사용자가 리스트박스를 한번도 클릭하지 않았다면 선택된 것이 없을 것이고 따라서 ListBox->ItemIndex 값이 -1이 됩니다. 그때 위 코드를 그냥 실행해버리면 실행하다가 List index out of bounds 에러가 발생할 겁니다. 따라서 -1이 아닌가를 검사하는 코드가 추가로 필요합니다.
if(ListBox->ItemIndex = -1)
{
ShowMessage("IP 주소를 선택해주세요");
return;
}
cs1->Address = ListBox->Items->String[ListBox->ItemIndex];
승현 님이 쓰신 글 :
: 안녕하세요.
: 현재 만든 프로그램이, 클라이언트의 데이터를 서버로 개시하는 프로그램입니다.
: 그럼 클라이언트소켓에 서버의 어드레스를 설정해줘야 하는데,
: 이걸 옵션창을 이용해서 아이피 입력을 받아서 설정이 저장되어 그 아이피가 고정되게 해주려고 합니다.
: 쉽게말해서 메뉴에서 옵션에 들어가면, 서버 IP를 입력하는 탭이 있고 저장시키는 방식인데요.
: 지금 그냥 막연하게 리스트박스 하나 만들고, 거기에 LoadFromFile로 불러들여서 그렇게 불러들이고 있습니다.
:
: AnsiString ip;
: ListBox->Items->LoadFromFile("data.ini");
: ip = ListBox->Items->String[0];
: cs1->Address = ip;
: ListBox->Clear();
:
: 이런식으로 구성되어 있는데, 클라이언트소켓에 아이피가 지정이 안되더군요;
: 'ip'에는 값이 들어가 있는데, 저 명령어가 아닌것 같습니다만 감이 잘 안잡힙니다.
:
: 그 방법을 모르다보니 위에서처럼 달랑 IP만 써져있는 파일에 리스트박스에 불러들이는 방법을 사용하고 있네요.
: 위 방법을 쓰면, 지정되는 아이피가 하나만 필요한 클라이언트는 괜찮은데, 지정되는 아이피가 약 열개정도 되는
: 서버의 경우에는 파일을 여러개 만들수도 없고; 그래서 해당 파일의 몇번째 줄의 데이터를 뽑아내는 방법을 써야합니다.
: 즉 프로그램에서 보면, ini파일에
:
: [ClientIP1]
: ip=192.192.192.192
:
: [ClientIP2]
: ip=123.123.123.123
:
: [ClientIP3]
: ip=000.000.000.000
:
: 이런식으로 저장되어서 1번 StringGrid 에 IP는 ClientIP1 이다, 2번은 ClientIP2다, 이런식으로 지정되게 해줘야 합니다.
: 허나 방법을 잘 모르겠네요; 가지고 있는 바이블을 뒤져봐도 해당문이 제대로 설명이 되어 있지 않은건지,
: 아니면 제가 찾지 못하는건지 머리만 아프더랍니다.
:
: 그래도 믿을만한곳이 볼랜드포럼밖에 없어서, 이렇게 염치없지만 질문을 드립니다 ;ㅅ;
: 많은 도움 부탁드리겠습니다.
|