2013-04-13 1 views
0

나는 ArrayList을 이해하려고 노력하고 있지만 검색 기능의 마지막 부분에 문제가 있습니다.검색 결과를 새로운 형식으로 로딩

데이터를 가져올 배열 목록이 StreamReader에서 있습니다. 데이터는 이름 및 로고 이미지 경로와 같이 팀과 관련된 수많은 속성으로 구성됩니다.

그런 다음 사용자가 텍스트 상자를 통해 입력 한 특정 문자열 조각에 대해 배열 목록을 검색하는 검색을 만들었습니다.

그런 다음 검색을 true로 반환 한 경우 새 양식을 여는 if 문을 만들었습니다.

검색된 데이터에 따라 팀의 각 속성을로드하는 새 양식이 필요합니다. 예를 들어 "리버풀"을 검색하면 매니저 이름, 스타디움 이름 및 검색된 이름이 새 양식에 표시됩니다. 나는 이것을 어떻게하는지 모른다.

이 작업을 수행하는 데 정말로 유용한 도구는 load.event 절차이지만 배열 목록에 연결하는 것에 대한 많은 정보를 찾을 수 없습니다.

private void btn_Search_Click(object sender, EventArgs e) 
    { 
     foreach (Object obj in allTeams) 
     { 
      Team = (Team)obj; 
      if (team.teamName.ToUpper() == nameToMatch.ToUpper()) //case insensitive search. 
      { 
       FormTeam frmTeam = new FormTeam(Team); //windows form that displays team info. 
       frmTeam.Visible = true; 
       break; 
      } 
     } 

    } 

위는 내 검색 기능입니다. (ArrayList에 모든 것을 저장해야하기 때문에 List<T>을 사용하지 않았습니다.)

달성하려는 작업은 무엇입니까? 그리고 만약 그렇다면 어떻게?

답변

0

또한, 당신은 당신이 단순히 양식의 필드에 팀 - 개체의 모든 값을 지정하여 TeamForm 클래스의 생성자 내부에 ArrayList를

foreach(var team in allTeams.OfType<Team>()) 
{ 
    if(team.TeamName.Equals(nameToMatch, StringComparison.InvariantCultureIgnoreCase)) 
    { 
     frmTeam = new FormTeam(Team); 
     Aplication.Run(frmTeam); // or frmTeam.Show(); 
     break; 
    } 
} 

에 Linq에를 사용할 수 있습니다.

public FormTeam (Team team) 
{ 
    teamName.Text = team.TeamName; // label or something 
    teamPlayerCount.text = team.PlayerCount.ToString(); 
    ... 

} 
+0

늦게 답장을 드려 죄송합니다. 나는 아직도 이것에 대해 머리를 쓰려고 노력하고있다. 나는 LINQ를 사용하지 않았지만 아직 C#에서는 확신하지 못했습니다. 파트 1에서 보여준 방법. 팀 이름 만 표시하는 것이 아닌가요? 나는 한 가지 검색 값으로 팀의 각 속성 (관리자, 경기장)을 보여주고 싶었습니다. – zac

+0

네가 필요로하는 모든 것을 구현해야한다. 나는 당신의 생성자가 전체 팀 객체를 받아들이는 것을 보았다. 나는 이것을 고쳐 줄 것이다. – CSharpie

+0

이것은 아직도 나에게 혼란 스럽다.파트 1을 명확히하기 위해 검색 결과를 반환하고 참이면 새 양식을 시작하십시오. 그런 다음 두 번째 부분의 코드가 새로 만들어진 양식의 첫 번째 방법으로 설정됩니다. 생성자가 전체 객체를 받아들이므로'teamName.Text = team.TeamName; '과 같이 각 값을 텍스트 상자 나 레이블과 같은 것으로 지정합니다. 죄송합니다. 아프다는 것을 아는 것은 지루한 것처럼 보입니다. – zac

0

teamName과 같은 문자열을 검색해야하는 경우 Arraylist 대신 Dictionary<string,Team>과 같은 것을 사용하는 것이 좋습니다. DIC는 모든 팀을 포함 Dictionary<string,Team>의 인스턴스가 어디 그럼 당신은

Team t = dic[nameToMatch.ToUpper()]; 

을 할 수있을 것입니다.

0

먼저 변수 이름이 누락되었습니다. 당신이 의미하는 것 같아요

foreach (Object obj in allTeams) 
    { 
     Team t = (Team)obj; 
     if (t.teamName.ToUpper() == nameToMatch.ToUpper()) //case insensitive search. 
     { 
      FormTeam frmTeam = new FormTeam(t); //windows form that displays team info. 
      frmTeam.Visible = true; 
      break; 
     } 
    } 

그러나 왜이 모든 어리석은 캐스팅을 할 필요가없는 타입이 지정된 일반 목록을 사용하지 않았습니까?

하지만 질문은 "내가 검색 한 내용을 어떻게 새로운 양식으로 전달할 수 있습니까?"라고 정확합니까? FormBox의 생성자를 FormTeam(Team t, string nameToMatch)과 같이 변경하고 TeamForm에 값을 로컬로 저장하여 강조 표시 등을 할 수 있습니다.

관련 문제