2016-10-14 2 views
-1

У меня есть FlowLayoutPanel в моем приложении Windows Forms, которое я использую для хранения фанатов и заголовков фильмов, теперь то, что я ищу, - это метод поиска существующих объектов в FlowLayoutPanel. Это мой GUI:Элементы управления C# в FlowLayoutPanel

GUI Screenshot

В Search movies... поле, я хочу TextChanged событие, чтобы показать только фильмы с этикетки фильмов, связанных с входом поиска.

ответ

0
foreach (Control c in myFlowLayoutPanel.Controls) 
{ 
    if (!c.Property.Text.ToLower().Contains(searchBox.Text.ToLower())) 
    { 
     myFlowLayoutPanel.Controls.Remove(c); 
    } 
} 

Это будет проходить через дочерние элементы панели - вы можете проверить какое-либо свойство в отношении поискового запроса и удалить его, если он не содержит поисковый запрос.

EDIT: на основании вашего комментария, похоже, что вы получаете совпадения только на своих ярлыках, поэтому ваши фотографии уходят. Способ, которым я хотел бы подойти, - создать UserControl, который содержит как изображение, так и метку (щелкните правой кнопкой мыши ваш проект - Добавить - UserControl - укажите его имя). Используйте конструктор для добавления PictureBox и метки (или любых других элементов управления, которые вы уже используете). Ваш код позади для 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. Теперь вы можете сохранить или удалить весь 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 
     } 
    } 
} 
+0

Большое спасибо! Текстовая часть работает для меня, теперь она позволяет мне видеть это, когда я ищу фильм: [link] (http://imgur.com/download/zQqciyr). –

+0

Но мне все же нужны мои миниатюры для фильма, которые будут показаны при поиске фильма. Думаю это невозможно ... –

+0

@ KeesvanV. Все возможно! Я пересмотрел свой ответ с некоторыми дополнительными предложениями, которые должны указывать на вас в правильном направлении. –

Смежные вопросы