FlowLayoutPanel中的搜索控件

问题描述 投票:0回答:2

我在Windows窗体应用程序中有一个FlowLayoutPanel,用于存储电影爱好者和标题,现在我正在寻找的是一种在FlowLayoutPanel中搜索现有项目的方法。这是我的GUI:

“

Search movies...框中,我希望TextChanged事件仅显示电影with与搜索输入有关的电影标签。

c# search flowlayoutpanel
2个回答
1
投票
foreach (Control c in myFlowLayoutPanel.Controls)
{
    if (!c.Property.Text.ToLower().Contains(searchBox.Text.ToLower()))
    {
        myFlowLayoutPanel.Controls.Remove(c);
    }
}

这将在面板的子级之间循环-您可以对照搜索词检查某些属性,如果该子项不包含搜索词,则将其删除。

编辑:根据您的评论,看来您只在标签上找到了匹配项,所以您的图片不见了。我采用的方法是创建一个同时包含图像和标签的UserControl(右键单击您的项目-Add-UserControl-给它命名)。使用设计器添加一个PictureBox和一个Label(或您已经使用的任何控件)。您在UserControl后面的代码如下所示:

public partial class Movie : UserControl
{
    public string Title { get; set; } // for easy matching

    public Movie()
    {
        InitializeComponent();
    }

    public Movie(Image thumbnail, string title) // use this constructor to make your movie tiles
    {
        InitializeComponent();
        pictureBox1.Image = thumbnail;
        label1.Text = title;
        Title = title;
    }
}

对于每部电影,您可以通过传递缩略图和标题来创建新的自定义UserControl的实例,然后将整个UserControl添加到FlowLayoutPanel中。现在,您可以根据Title属性是否匹配来保留或删除整个UserControl。您的foreach循环更改为:

foreach (Control c in flp.Controls)
{
    // Check if the control is one of your custom UserControls:
    if (c.GetType() == typeof(Movie))
    {
        // since it is a "Movie", it is safe to cast it:
        Movie movie = (Movie)c;
        if (!movie.Title.ToLower().Contains(searchBox.Text.ToLower()))
        {
            flp.Controls.Remove(c); // remove or keep both the image and text
        }
    }
}

0
投票

如何使用数据库搜索此布局的图像?

© www.soinside.com 2019 - 2024. All rights reserved.