以新的形式加载搜索结果

时间:2013-04-13 16:33:59

标签: c# forms search

我一直在努力理解ArrayList但我的搜索功能的最后部分遇到了问题。

我设置了一个数组列表,用于从StreamReader获取数据。数据包含许多与团队相关的属性,例如其名称和徽标的图像路径。

然后我创建了一个搜索,通过数组列表扫描用户通过文本框输入的特定字符串。

然后我创建了一个if语句来打开一个新表单,如果该搜索返回true。

我希望新表单根据搜索到的数据加载团队的每个属性。例如,如果我搜索“利物浦”,那么它将提供经理姓名,体育场名称以及新表格中搜索的名称。我不知道该怎么做。

我真正想到的唯一工具是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; 
            }
        }

    }

以上是我的搜索功能。 (我没有使用List<T>,因为要求所有内容都必须存储在ArrayList中。)

我想要实现的目标是什么?如果是这样的话?

3 个答案:

答案 0 :(得分:0)

如果您需要搜索诸如teamName之类的字符串,最好使用Dictionary<string,Team>而不是Arraylist之类的字符串。然后你就可以了

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

其中dic是包含所有团队的Dictionary<string,Team>的实例。

答案 1 :(得分:0)

此外,您可能希望在ArrayList上使用Linq

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;
    }
}

在TeamForm类的构造函数中,您只需将Team-Object中的所有值分配给Form上的字段。

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

}

答案 2 :(得分: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; 
        }
    }

但是为什么不使用类型化的通用List,而不必做所有这些愚蠢的演员。

但你的问题是“我怎样才能将搜索到的内容传递给新表格”,对吗?我将FormTeam的构造函数更改为类似FormTeam(Team t, string nameToMatch)的内容,并在TeamForm中本地保存值,以便您可以进行突出显示或其他任何内容。