刷新数据时的列表框项“不可见”(winform)

时间:2017-11-20 12:49:29

标签: c# .net winforms listbox display

我的列表框有问题:如果我更改数据中的任何内容(例如添加项目或删除项目),项目将变为隐形,但实际上仍然是“在这里”(我可以看到它因为我已经进行了排序鼠标悬停时的工具提示。)

我的列表框的目的是在用户选择带有组合框的文件夹时显示场景列表(如文件)。

这是我的代码:

public partial class FormScenario : Form
{
    BindingList<Folder> blFolders = new BindingList<Folder>();
    BindingList<Scene> blScenes = new BindingList<Scene>();

    public FormScenario(FormMainPanel fParent)
    {
        InitializeComponent();
        FParent = fParent;
    }

    public void Refresh_blScenes()
    {
        lb_scenes.DataSource = null;
        lb_scenes.Items.Clear();
        lb_scenes.DataSource = this.blScenes;
        lb_scenes.DisplayMember = "SceneName";

        //attempt to fix the bug ... not working
        lb_scenes.DrawMode = DrawMode.Normal;
        lb_scenes.DrawMode = DrawMode.OwnerDrawFixed;
    }

    public void Populate_Scene_Datas()
    {
        blScenes.Clear();
        Folder fol = (Folder)cb_listfolders.SelectedItem;
        if (fol != null){
            foreach (Scene sce in fol.ListScenes){
                this.blScenes.Add(sce);
            }
        }
    }
}

如果它有用,那就有我的对象:

class Folder
{
    public Int32 IdFolder { get; set; }
    public String FolderName { get; set; }
    public String FolderInfo { get; set; }

    // contains the list to show in the listbox 
    public List<Scene> ListScenes = new List<Scene>();
}

class Scene
{
    public Int32 IdScene { get; set; }
    public String SceneName { get; set; }
    public byte[] SceneDesc { get; set; }
    public byte[] SceneInfo { get; set; }
}

我按以下顺序使用这些功能:

Populate_Scene_Datas();
Refresh_blScenes();

如果有人在这个问题上给我一个提示或答案,那将非常有帮助!

谢谢!

1 个答案:

答案 0 :(得分:0)

我找到了一个解决方案......但我无法解释它为什么会起作用。 如果有人遇到同样的问题,我会张贴这个。

我改变了这个:

lb_scenes.DataSource = this.blScenes;

by:

lb_scenes.Items.AddRange(blScenes.ToArray());