サポートコンボボックスデータを結合gotcha
-
08-06-2019 - |
質問
とを確認することができまには、次のようなもの
List<string> myitems = new List<string>
{
"Item 1",
"Item 2",
"Item 3"
};
ComboBox box = new ComboBox();
box.DataSource = myitems;
ComboBox box2 = new ComboBox();
box2.DataSource = myitems
そして今、2つのコンボボックスにその配列とともに働きます。が変更された場合には、メモを取る値のコンボボックスが変わることの両方のコンボボックスに一つだけを選択します。
現在もたらすであろうと確信して配列は、常に参照によって渡され(こんC D)ですが、なぜ地球上のようにコンボボックスの変化の相互の関連性を検討した。とは思っていないのコンボボックス制御の変更はコレクションです。
回避策として、わからないなこれを達成機能が期待される/希望
ComboBox box = new ComboBox();
box.DataSource = myitems.ToArray();
解決
このどうデータバインディングが設定され、dotnet枠組みに、特に BindingContext
.高レベルのこださいそれぞれの形態およびすべてのコントロール形状が同じ BindingContext
.きの設定 DataSource
物件の ComboBox
の利用 BindingContext
得 ConcurrenyMangager
ロッドやルアーを使用することに一覧です。の ConcurrenyManager
ストッカーなど、現在の選択した位置を一覧です。
セットする場合は DataSource
第 ComboBox
また同じ BindingContext
(形態)の利回りへの参照と同じ ConcurrencyManager
上記の使用データのランタイム環境を含んでいます。
への取り組みは数多くありましたが詳細な説明を参照 BindingContext.
他のヒント
より回避策によって、サイズのデータソース)を宣言することにつ BindingSource
オブジェクト(新し2.00)bindのコレクションとして結合し、従来から知られていたックスです。
を封入の完全な例です。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
private BindingSource source1 = new BindingSource();
private BindingSource source2 = new BindingSource();
public Form1()
{
InitializeComponent();
Load += new EventHandler(Form1Load);
}
void Form1Load(object sender, EventArgs e)
{
List<string> myitems = new List<string>
{
"Item 1",
"Item 2",
"Item 3"
};
ComboBox box = new ComboBox();
box.Bounds = new Rectangle(10, 10, 100, 50);
source1.DataSource = myitems;
box.DataSource = source1;
ComboBox box2 = new ComboBox();
box2.Bounds = new Rectangle(10, 80, 100, 50);
source2.DataSource = myitems;
box2.DataSource = source2;
Controls.Add(box);
Controls.Add(box2);
}
}
}
したい場合に混乱を自分でもって常に宣言のバインディングのコンストラクタです。できる結果の一部 本当に 好奇心のバグがいつも結合し、負荷イベントです。