【问题标题】:Loading search results in a new form以新形式加载搜索结果
【发布时间】:2013-04-13 16:33:58
【问题描述】:

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

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

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

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

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

我真正能想到的唯一工具是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中。)

我想要实现的目标可能吗?如果是的话怎么办?

【问题讨论】:

    标签: c# forms search


    【解决方案1】:

    另外,您可能希望在 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 类的构造函数中,您只需将 TeamObject 中的所有值分配给表单上的字段。

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

    【讨论】:

    • 抱歉回复晚了。我仍在努力解决这个问题。我没有使用 LINQ,因为我对 c# 还没有那么自信。您在第 1 部分中演示的方法。这不仅会显示团队名称吗?我有点想从一个搜索值中显示球队的每个属性(经理、体育场)。
    • 是的,你必须实现你需要的一切,我看到你的构造函数接受了整个团队对象。我会解决这个问题。
    • 这对我来说仍然很困惑。澄清第 1 部分表示返回搜索结果,如果为真,则启动新表单。然后将第二部分的代码设置为新创建的表单的第一个方法。由于构造函数接受整个对象,因此我将每个值例如`teamName.Text = team.TeamName;`分配给文本框或标签之类的东西,对吗?抱歉让我这么痛苦,我知道这一定看起来很乏味。
    • 我删除了任何部分以减少这里的混乱。至于最后一部分,你是对的。将要显示的 Teamobject 中的所有值分配给表单的成员。就像一个实验室或一个文本框。
    【解决方案2】:

    如果您需要搜索诸如teamName 之类的字符串,最好使用Dictionary&lt;string,Team&gt; 之类的东西,而不是Arraylist。那你就可以了

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

    其中 dic 是 Dictionary&lt;string,Team&gt; 的实例,包含您的所有团队。

    【讨论】:

      【解决方案3】:

      首先,您在那里缺少一个变量名。我想你的意思是

      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 中,以便您可以进行突出显示或其他操作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-15
        • 2019-01-05
        • 1970-01-01
        • 2014-05-15
        • 2012-05-30
        • 2011-01-25
        相关资源
        最近更新 更多