2016-10-14 97 views
-1

我的Windows窗體應用程序中有一個FlowLayoutPanel,我用它來存儲電影fanarts和標題,現在我正在尋找的是一種方法來搜索FlowLayoutPanel中的現有項目。這是我的GUI:在FlowLayoutPanel中的C#搜索控件

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

這將通過面板的子項循環 - 您可以根據搜索項檢查一些屬性,並在子項不包含搜索項時刪除子項。

編輯:根據您的評論,它看起來像只在您的標籤上得到匹配,所以你的照片將消失。我將要做的方法是創建一個同時包含圖像和標籤的UserControl(右鍵單擊您的項目 - 添加 - 用戶控件 - 給它一個名稱)。使用設計器添加一個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 
     } 
    } 
} 
+0

非常感謝!文本部分適用於我,現在當我搜索電影時,它可以讓我看到:[鏈接](http://imgur.com/download/zQqciyr)。 –

+0

但我仍然需要在搜索電影時顯示電影縮略圖。我認爲這是不可能的... –

+0

@KeesvanV。一切皆有可能!我已經修改了我的答案,並提出了一些額外的建議,這些建議應該指向正確的方向 –