代码之家  ›  专栏  ›  技术社区  ›  Kees van Voorthuizen

在FlowLayoutPanel中搜索控件

  •  0
  • Kees van Voorthuizen  · 技术社区  · 8 年前

    我有一个 FlowLayoutPanel 在我的Windows窗体应用程序中,我使用它来存储电影粉丝和标题,现在我要寻找的是一种在 FlowLayoutPanel

    GUI Screenshot

    Search movies... TextChanged 仅显示电影的事件 具有

    2 回复  |  直到 4 年前
        1
  •  1
  •   Dave Smash    8 年前
    foreach (Control c in myFlowLayoutPanel.Controls)
    {
        if (!c.Property.Text.ToLower().Contains(searchBox.Text.ToLower()))
        {
            myFlowLayoutPanel.Controls.Remove(c);
        }
    }
    

    这将循环通过面板的子项-您可以根据搜索项检查某些属性,如果子项不包含搜索项,则将其删除。

    编辑:根据您的评论,看起来您只能在标签上找到匹配项,因此您的图片将消失。我的方法是创建一个同时包含图像和标签的用户控件(右键单击您的项目-添加-用户控件-给它一个名称)。使用设计器添加PictureBox和标签(或您正在使用的任何控件)。用户控件的代码隐藏如下所示:

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

    对于每个电影,您可以通过传递缩略图图像和标题来创建新自定义用户控件的实例,然后将整个用户控件添加到FlowLayoutPanel。现在,您可以保留或删除整个UserControl,具体取决于Title属性是否匹配。您的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
            }
        }
    }
    
        2
  •  0
  •   mekanaydemir    4 年前

    你好

                foreach (Control item in flowLayoutPanel1.Controls)
                {
                    if (item is Button)
                    {
                        item.Enabled = false;
                    }
                }
                MessageBox.Show("You lost loser!");
    

    它正在发挥作用。过来看!; #按钮#flowlayout#启用