C# 如何在“流布局”面板中搜索控件?

C# 如何在“流布局”面板中搜索控件?,c#,C#,在我的流程布局面板中,它在用户控件中加载图片和名称。 我试试这个,效果很好 foreach (DataRow row in dt.Rows) { byte[] data = (byte[])row["Image"]; pic = new PictureBox(); pic.Width = 150; pic.Height = 150; pic.BackgroundImageLayout = ImageLayout.Stretch;

在我的流程布局面板中,它在用户控件中加载图片和名称。

我试试这个,效果很好

foreach (DataRow row in dt.Rows)
{
    byte[] data = (byte[])row["Image"];
    pic = new PictureBox();
    pic.Width = 150;
    pic.Height = 150;
    pic.BackgroundImageLayout = ImageLayout.Stretch;
    pic.BorderStyle = BorderStyle.FixedSingle;
    string type = row.Table.Columns.Contains("liquidPriceId") ? "liquidPrice" : "itemMaster";
    string tag = row.Table.Columns.Contains("liquidPriceId") ? row["liquidPriceId"].ToString() : row["itemMasterId"].ToString();
    MemoryStream ms = new MemoryStream(data);
    pic.BackgroundImage = new Bitmap(ms);

    Label name = new Label();
    name.Text = row["Name"].ToString();
    name.BackColor = Color.FromArgb(45, 66, 91);
    pic.Controls.Add(name);
    flp.Controls.Add(pic);
}
然后在我的搜索文本更改中,我尝试了这个,我的问题是我不知道如何获取用于筛选的名称

foreach (Control c in flowLayoutPanel3.Controls)
如何进入我的pic和name值的c

private void txtSearchBox_TextChanged(object sender, EventArgs e)
{
    string searchValue = txtSearchBox.Text;

    try
    {
        if (txtSearchBox.Text.Length > 0)
        {
            string compareTo = String.Concat("*", txtSearchBox.Text.ToLower(), "*");

            foreach (Control c in flowLayoutPanel3.Controls)
            {
                c.Visible =(c.Name.ToLower() == compareTo); // c.Name is empty how can i get name ?
            }
        }
        else
        {
            foreach (Control c in flowLayoutPanel3.Controls)
            {
                c.Visible = true;
            }
        }
    }
}

从提供的代码和文本中看不清楚,但您可能需要设置在第一个代码段中创建的控件的Name属性。大概是这样的:

//...
pic = new PictureBox();
pic.Name = "My Picture";
// ...
我还想将比较改为:

c.Visible =(c.Name.ToLower() == compareTo);
为此:

c.Visible = c.Name.StartsWith(compareTo, StringComparison.CurrentCultureIgnoreCase);

从提供的代码和文本中看不清楚,但您可能需要设置在第一个代码段中创建的控件的Name属性。大概是这样的:

//...
pic = new PictureBox();
pic.Name = "My Picture";
// ...
我还想将比较改为:

c.Visible =(c.Name.ToLower() == compareTo);
为此:

c.Visible = c.Name.StartsWith(compareTo, StringComparison.CurrentCultureIgnoreCase);

创建PictureBox控件时,我将使标签的
Name
属性与
Text
属性相同:

name.Text = row["Name"].ToString();
pic.Name = name.Text;
但是,您正在将
*
添加到搜索字符串的开头和结尾。因此,如果搜索值包含在
Name
属性中的任何位置,是否需要匹配

如果是,则可以使用
String.Contains()


创建PictureBox控件时,我将使标签的
Name
属性与
Text
属性相同:

name.Text = row["Name"].ToString();
pic.Name = name.Text;
但是,您正在将
*
添加到搜索字符串的开头和结尾。因此,如果搜索值包含在
Name
属性中的任何位置,是否需要匹配

如果是,则可以使用
String.Contains()


您正在将
标签
添加到
图片盒
-这不会使其成为属性
名称
。您需要找到PictureBox控件的Label控件。您正在将
标签添加到
PictureBox
-这不会使其成为属性
名称
。你需要找到PictureBox控件的标签控件。谢谢@jiriThanks你@jiriThanks非常感谢@idle\u Mind非常感谢@idle\u Mind