在 FlowLayoutPanel 中搜索控件
Search controls in a FlowLayoutPanel
我的 Windows 表单应用程序中有一个 FlowLayoutPanel
,我用它来存储电影同人画和标题,现在我正在寻找的是一种在 FlowLayoutPanel
。这是我的图形用户界面:
在 Search movies...
框中,我希望 TextChanged
事件仅显示电影 以及 与搜索输入相关的电影标签。
foreach (Control c in myFlowLayoutPanel.Controls)
{
if (!c.Property.Text.ToLower().Contains(searchBox.Text.ToLower()))
{
myFlowLayoutPanel.Controls.Remove(c);
}
}
这将遍历面板的 children - 您可以根据搜索词检查一些 属性 并删除 child 如果它不包含搜索词.
编辑:根据您的评论,您似乎只在标签上匹配,因此您的图片将消失。我采用的方法是创建一个包含图像和标签的 UserControl(Right-click 您的项目 - 添加 - 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。现在您可以保留或删除整个 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
}
}
}
您好;
foreach (Control item in flowLayoutPanel1.Controls)
{
if (item is Button)
{
item.Enabled = false;
}
}
MessageBox.Show("You lost loser!");
是working.Check出来的!;
#button #flowlayout #enable
我的 Windows 表单应用程序中有一个 FlowLayoutPanel
,我用它来存储电影同人画和标题,现在我正在寻找的是一种在 FlowLayoutPanel
。这是我的图形用户界面:
在 Search movies...
框中,我希望 TextChanged
事件仅显示电影 以及 与搜索输入相关的电影标签。
foreach (Control c in myFlowLayoutPanel.Controls)
{
if (!c.Property.Text.ToLower().Contains(searchBox.Text.ToLower()))
{
myFlowLayoutPanel.Controls.Remove(c);
}
}
这将遍历面板的 children - 您可以根据搜索词检查一些 属性 并删除 child 如果它不包含搜索词.
编辑:根据您的评论,您似乎只在标签上匹配,因此您的图片将消失。我采用的方法是创建一个包含图像和标签的 UserControl(Right-click 您的项目 - 添加 - 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。现在您可以保留或删除整个 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
}
}
}
您好;
foreach (Control item in flowLayoutPanel1.Controls)
{
if (item is Button)
{
item.Enabled = false;
}
}
MessageBox.Show("You lost loser!");
是working.Check出来的!; #button #flowlayout #enable