2017-11-20 16 views
0

リストボックスに問題があります:項目の追加や削除などのデータを変更すると、項目は見えなくなりますが、 (私のマウスがマウスを動かしたときに一種のツールチップを作ったので、私はそれを見ることができます)。リストボックスの項目データを更新する際の非表示項目(winform)

リストボックスの目的は、ユーザーがコンボボックスでフォルダを選択したときのシーン(ファイルなど)のリストを表示することです。ここで

は私のコードです:

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

場合誰かがこの問題で私にヒントや答えを与えてくれれば、とても役に立つでしょう!

ありがとう!

+0

はあなたが表示部材と、選択した値のプロパティを設定しようとした

私はこれを変更しています。 –

+0

データを追加または削除するときに** Populate_Scene_Datas()**関数を呼び出さなければならないと思います。 –

+0

@VickyS私はDisplaymemberを設定しましたが(私のポストで見ることができます)、selectedvalueではありません...試してみます! – Sanno

答えて

0

私は解決策を見つけました...しかし、なぜそれが働いているのか説明できません。 誰かが同じ問題に遭遇した場合、私はこれを投稿しています。

lb_scenes.DataSource = this.blScenes; 

によって:

lb_scenes.Items.AddRange(blScenes.ToArray()); 
関連する問題