在 Combobox 中选择项目时如何将图像添加到 Flowlayoutpanel
How to add images into Flowlayoutpanel when item is selected in Combobox
如何在 select 将 ComboBox
编辑到 FlowLayoutPanel
时添加带按钮的图标(适用于家中的设备)。 ComboBox
有一个不同设备的列表,当你 select 一个时,额定功率出现在 TextBox
中。
是否可以将此信息和图标存储在 FlowLayoutPanel
中?
但是,我不确定 FlowLayoutPanel
是否是执行此操作的正确选项。
Is it possible to store this information and an icon in a flow layoutpanel?
不完全是,因为面板用于存储 UI 控件,而不是任意数据。您当然可以解决这个问题。
一种方法是使用包含图像的自定义支持列表 objects。下面的代码定义了这样一个 class (每个项目都有一个标题和图像)并使用这个信息加上几个事件挂钩来根据组合框用图像填充面板,然后在文本框中设置文本基于对图像的点击。
public partial class Form2 : Form
{
List<Item> itemList = new List<Item>();
public Context c = new Context();
public Form2()
{
InitializeComponent();
itemList.Add(new Item("First"));
itemList.Add(new Item("Second"));
itemList.Add(new Item("Third" ));
comboBox1.DataSource = itemList;
comboBox1.DisplayMember = "Title";
foreach (var itemView in itemList)
{
itemView.onClick += this.ItemClicked;
}
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
var s = (ComboBox) sender;
flowLayoutPanel1.Controls.Add(itemList[s.SelectedIndex].ThisImage);
}
private void ItemClicked(object sender, EventArgs e)
{
Item v = (Item)sender;
AssignTextBox(v.Title);
}
public void AssignTextBox(string text)
{
textBox1.Text = text;
}
}
public class Item
{
public string Title { get; set; }
public PictureBox ThisImage { get; set; }
public delegate void clicked(object sender, EventArgs e);
public event clicked onClick;
public Item(string title)
{
Title = title;
ThisImage = new PictureBox();
ThisImage.Paint += Paint_This;
ThisImage.Click += onClicked;
}
public void onClicked(object sender, EventArgs e)
{
if (onClick != null)
onClick(this, e);
}
private void Paint_This(object sender, PaintEventArgs e)
{
using (Font f = new Font("Verdana", 14))
{
e.Graphics.DrawString(Title, f, Brushes.Black, new Point(1,1));
}
}
}
如何在 select 将 ComboBox
编辑到 FlowLayoutPanel
时添加带按钮的图标(适用于家中的设备)。 ComboBox
有一个不同设备的列表,当你 select 一个时,额定功率出现在 TextBox
中。
是否可以将此信息和图标存储在 FlowLayoutPanel
中?
但是,我不确定 FlowLayoutPanel
是否是执行此操作的正确选项。
Is it possible to store this information and an icon in a flow layoutpanel?
不完全是,因为面板用于存储 UI 控件,而不是任意数据。您当然可以解决这个问题。
一种方法是使用包含图像的自定义支持列表 objects。下面的代码定义了这样一个 class (每个项目都有一个标题和图像)并使用这个信息加上几个事件挂钩来根据组合框用图像填充面板,然后在文本框中设置文本基于对图像的点击。
public partial class Form2 : Form
{
List<Item> itemList = new List<Item>();
public Context c = new Context();
public Form2()
{
InitializeComponent();
itemList.Add(new Item("First"));
itemList.Add(new Item("Second"));
itemList.Add(new Item("Third" ));
comboBox1.DataSource = itemList;
comboBox1.DisplayMember = "Title";
foreach (var itemView in itemList)
{
itemView.onClick += this.ItemClicked;
}
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
var s = (ComboBox) sender;
flowLayoutPanel1.Controls.Add(itemList[s.SelectedIndex].ThisImage);
}
private void ItemClicked(object sender, EventArgs e)
{
Item v = (Item)sender;
AssignTextBox(v.Title);
}
public void AssignTextBox(string text)
{
textBox1.Text = text;
}
}
public class Item
{
public string Title { get; set; }
public PictureBox ThisImage { get; set; }
public delegate void clicked(object sender, EventArgs e);
public event clicked onClick;
public Item(string title)
{
Title = title;
ThisImage = new PictureBox();
ThisImage.Paint += Paint_This;
ThisImage.Click += onClicked;
}
public void onClicked(object sender, EventArgs e)
{
if (onClick != null)
onClick(this, e);
}
private void Paint_This(object sender, PaintEventArgs e)
{
using (Font f = new Font("Verdana", 14))
{
e.Graphics.DrawString(Title, f, Brushes.Black, new Point(1,1));
}
}
}