以新形式加载搜索结果
本文关键字:搜索结果 加载 新形式 | 更新日期: 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中,以便您可以进行高亮显示或其他操作。