以新形式加载搜索结果

本文关键字:搜索结果 加载 新形式 | 更新日期: 2023-09-27 18:08:55

我一直在努力理解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中。)

我想要达到的是可能的吗?如果是,那又是怎么回事呢?

以新形式加载搜索结果

同样,你也可以在你的数组列表中使用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();
    ...
}

如果您需要搜索字符串,例如teamName,那么最好使用Dictionary<string,Team>而不是Arraylist。然后你就可以做

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

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

首先,这里缺少一个变量名。我想你是指

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

但是为什么不使用类型化泛型列表,这样就不用做这些愚蠢的类型转换了。

但你的问题是"我怎么能传递什么我搜索到新的形式",正确吗?我会将FormTeam的构造函数更改为FormTeam(Team t, string nameToMatch)之类的东西,并将值本地保存在TeamForm中,以便您可以进行高亮显示或其他操作。