web-dev-qa-db-ja.com

C#のリストボックスRefresh()

int[] arr = int[100];
listBox1.DataSource = arr;
void ComboBox1SelectedIndexChanged(object sender, EventArgs e)
{
    .....//some processes
    listBox1.DataSource = null;
    listBox1.DataSource = arr;
}

is not working,

また、

listBox1.Refresh(); is not working,

また、

listBox1.Update(); is not working,


BindingList<T>を使用できることはわかっていますが、配列のみを操作する必要があります。

リストボックスを更新する方法を教えてください。

9
Okan Kocyigit

次を試してください

listBox1.DataBind()
1
Bala R

ここでスタック交換に関する私の最初の答え。

C#.Net 4.0:

listBox1.DataSource = null;
listBox1.DataSource = names;

初めてデータソースを設定すると、更新されることに気づきました。設定されているときに、もう一度同じに設定しようとしても、更新されません。

だから私はそれをnullにし、同じものに設定しました、そしてそれはこの問題で私のために正しく表示されました。

12
Grease

なんとか

FirstListBox.DataContext = null;
FirstListBox.DataContext = App.ViewModel;

単にリンクを失い、すべてのデータをリンクに戻します。

3
Midnight

問題はListBoxSelectionModeに起因する可能性があります。

わからない理由で、SelectionModeがSelectionMode.Noneの場合、データバインディングは機能しません。

回避策は次のとおりです。

listBox.SelectionMode = SelectionMode.MultiExtended;
listBox.DataSource = myDatasource;
listBox.SelectionMode = SelectionMode.None;

それが役に立てば幸い。

2
Nahtanoj

ListBoxは、dataSourceにバインドされているオブジェクトが自身の変更を通知した場合にのみ、表示されているコンテンツを更新します。 BindingSourceオブジェクトには、DataSourceChangedというイベントがあります。ソースが別のオブジェクトに変更されると、リストボックスはそれ自体を更新します。リストをバインドするときも同じです。リストは変更されたことを通知しないため、リストを変更しても何も起こりません。この問題には簡単な解決策があります。BindingListを使用してください http://msdn.Microsoft.com/de-de/library/ms132679%28v=vs.110%29.aspx

bindingListには、リストが変更されるたびに(明らかに)ListChangedイベントが呼び出されます。したがって、Windows.FormオブジェクトのDataBindingsは、ListChangedなどのイベントを使用して自身を更新します。単純なリストはこのイベントをサポートしていません。

したがって、多くのデータバインディングを操作する場合は、次のことを知っておく必要があります。 http://msdn.Microsoft.com/de-de/library/system.componentmodel.inotifypropertychanged%28v=vs.110%29 .aspx

2
user3803560

まあ、バインドせずに私は管理しただけです:

this.Hide();
this.Show();

それはすべてを再描画します...

1
dre

ListBoxを継承し、RefreshItems()を呼び出すパブリックメソッドを追加しました。これは必要な処理を実行します。すでに実装されており、すべて。彼らが公の方法を採用しなかった理由はわかりません。

1
gdube

BeginUpdateとEndUpdateを使用すると、問題が解決するはずです。データソースを2回設定する必要はありません

listBox1.BeginUpdate();

listBox1.DataSource = myList;

listBox1.EndUpdate();
0
Mitzi

ロードが完了する前に、特にリストボックスやその他のコントロールの変更を確認するためのWindowsフォームには注意が必要です。ロードされたデータを表示するには、invalidate();を使用します。次にUpdate();

0
Peter Chifamba

これらのリンクが役立つ場合があります。

リストボックスアイテム(C#)を更新するにはどうすればよいですか? - http://arstechnica.com/civis/viewtopic.php?f=20&t=554717

ArrayListをListBoxにバインド--- http://www.Java2s.com/Tutorial/CSharp/0460__GUI-Windows-Forms/BindArrayListtoListBox.htm

0
Divi