如何从列表中删除?

时间:2019-11-30 01:15:21

标签: c#

我是编程新手,遇到了很多问题。 我敢肯定解决方案很简单,但是我无法解决。 我只想知道如何从列表框中删除并从列表中完全删除数据,因为每当我从列表框中删除时,它都会消失,但是当我添加新图层时,所有已删除的图层都会回来(所以我我猜是不是真的从列表中删除了?。

这是我代码顶部的开头:

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);
}


1 个答案:

答案 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); 会自动刷新列表框。