我的Windows窗體應用程序中有一個FlowLayoutPanel
,我用它來存儲電影fanarts和標題,現在我正在尋找的是一種方法來搜索FlowLayoutPanel
中的現有項目。這是我的GUI:在FlowLayoutPanel中的C#搜索控件
在Search movies...
中,我希望TextChanged
事件,只顯示電影與相關搜索輸入電影的標籤。
我的Windows窗體應用程序中有一個FlowLayoutPanel
,我用它來存儲電影fanarts和標題,現在我正在尋找的是一種方法來搜索FlowLayoutPanel
中的現有項目。這是我的GUI:在FlowLayoutPanel中的C#搜索控件
在Search movies...
中,我希望TextChanged
事件,只顯示電影與相關搜索輸入電影的標籤。
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
}
}
}
非常感謝!文本部分適用於我,現在當我搜索電影時,它可以讓我看到:[鏈接](http://imgur.com/download/zQqciyr)。 –
但我仍然需要在搜索電影時顯示電影縮略圖。我認爲這是不可能的... –
@KeesvanV。一切皆有可能!我已經修改了我的答案,並提出了一些額外的建議,這些建議應該指向正確的方向 –