我是编程新手,遇到了很多问题。 我敢肯定解决方案很简单,但是我无法解决。 我只想知道如何从列表框中删除并从列表中完全删除数据,因为每当我从列表框中删除时,它都会消失,但是当我添加新图层时,所有已删除的图层都会回来(所以我我猜是不是真的从列表中删除了?。
这是我代码顶部的开头:
List<Layer> layers = new List<Layer>();
这是我的图层类:
public class Layer
{
private Image mLayerData = null;
private string mLayerName = "Layer";
public string LayerName
{
get { return mLayerName; }
set { mLayerName = value; }
}
public Image LayerData
{
get { return mLayerData; }
}
public Layer(int width = 500, int height = 500, string layername = "Layer")
{
mLayerData = new Bitmap(width, height);
mLayerName = layername;
}
}
这是我的addLayer函数:
private void addNewLayer()
{
string layerName = "Layer";
layerName += layers.Count;
// Create a default layer in our stack of layers
layers.Add(new Layer(pictureBox1.Width, pictureBox1.Height, layerName));
// Make the picture box talk to the default layer
pictureBox1.Image = layers[0].LayerData;
pictureBox1.Invalidate();
// Update the list of layers
listLayers.Items.Clear();
foreach(Layer l in layers)
{
listLayers.Items.Add(l.LayerName);
}
listLayers.SelectedIndex = listLayers.Items.Count - 1;
}
对于我的deleteLayer函数,我有这个:
private void deleteLayer()
{
listlayers.Items.RemoveAt(listlayers.SelectedIndex);
}
答案 0 :(得分:1)
更好的方法是使用BindingList,它支持数据绑定,并使用DataSource
的{{1}}属性来绑定集合。
例如,
Listbox
此外,请注意,不要将BindingList<Layer> layers = new BindingList<Layer>();
listBox.DataSource = layers;
listBox.DisplayMember = nameof(Layer.LayerName);
的名称绑定/添加到Layer
,而应绑定“图层集合”并使用Listbox
属性来确保{{1 }}显示在列表框中。
现在您可以按如下所示将其添加到列表框中
DisplayMember
删除
LayerName
var layer = new Layer(pictureBox1.Width, pictureBox1.Height, layerName);
layers.Add(newLayer);
会自动刷新列表框。