C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: コンボボックスの値をコピーするには


(過去ログ 137 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■80824 / inTopicNo.1)  コンボボックスの値をコピーするには
  
□投稿者/ あ (10回)-(2016/08/13(Sat) 00:25:23)

分類:[.NET 全般] 



VB.NETでコンボボックスのリストを別のコンボボックスでも使いたい場合

VBAだと
ComboBox2.List = ComboBox1.List
のようにしてコピーすることができました。
http://oshiete.goo.ne.jp/qa/9183904.html

VB.NETだとエラーが出てしまうのですが
どうしたら良いですか?


引用返信 編集キー/
■80825 / inTopicNo.2)  Re[1]: コンボボックスの値をコピーするには
□投稿者/ 魔界の仮面弁士 (817回)-(2016/08/13(Sat) 00:34:47)
No80824 (あ さん) に返信
> VB.NETでコンボボックスのリストを別のコンボボックスでも使いたい場合

データバインドしているのであれば、
DataSource プロパティ(あるいはそのコピー)を
他方の DataSource に割り当てれば OK です。

DataSource に何も割り当てていないのだとしたら、
 ComboBox2.Items.Clear()
 ComboBox2.Items.AddRange(ComboBox1.Items.Cast(Of Object)().ToArray())
などでしょうか。
引用返信 編集キー/
■80826 / inTopicNo.3)  Re[2]: コンボボックスの値をコピーするには
□投稿者/ あ (11回)-(2016/08/13(Sat) 10:04:25)
ありがとうございます。
以下のコードでうまくいきました。
 ComboBox2.Items.AddRange(ComboBox1.Items.Cast(Of Object)().ToArray())

ところで、>>データバインドしているのであれば・・・
というのはどういう意味でしょうか?

下記のようなコードを使っているのですが
これはデータバインドしているのでしょうか?

With ComboBox3
.AddItem "aaa"
.AddItem "bbb"
.AddItem "ccc"
.AddItem "ddd"
End With

ComboBox2.list = ComboBox3.list
引用返信 編集キー/
■80827 / inTopicNo.4)  Re[3]: コンボボックスの値をコピーするには
□投稿者/ WebSurfer (998回)-(2016/08/13(Sat) 11:24:44)
No80826 (あ さん) に返信

> 下記のようなコードを使っているのですが
> これはデータバインドしているのでしょうか?
>
> With ComboBox3
> .AddItem "aaa"
> .AddItem "bbb"
> .AddItem "ccc"
> .AddItem "ddd"
> End With
>
> ComboBox2.list = ComboBox3.list

それは「データバインドしている」ということではなさそうですね。

以前この掲示板の別スレッド(消えてしまったようで出てこない)で検証用に作った
サンプルですが、例えば以下の comboBox1 ようにデータバインドできます(この例
では SQL Server データベースより取得したデータで DataTable を作ってそれをデ
ータバインドしています)。

comboBox2 は CreateDictionary メソッドで Dictionary オブジェクトを作って、
Combobox のアイテムとして設定しています。データーバインドしているわけではな
いですがこういうことも出来るということでご参考まで。

private void Form11_Load(object sender, EventArgs e)
{
this.tableAdaptor.Fill(this.dataset.Customers);

// DataSource の設定は最後にすること。最初に持ってくると、DisplayMember、
// ValueMember の設定時に余計なデータバインドが起こる。
this.comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
this.comboBox1.DisplayMember = "CustomerID";
this.comboBox1.ValueMember = "CompanyName";
this.comboBox1.DataSource = this.dataset.Customers;

this.dictionary = CreateDictionary();
this.comboBox2.DropDownStyle = ComboBoxStyle.DropDownList;
this.comboBox2.Items.AddRange(this.dictionary.Keys.ToArray());
this.comboBox2.SelectedIndex = 0;
}

private Dictionary<string, string> CreateDictionary()
{
Dictionary<string, string> dictionary = new Dictionary<string, string>();
dictionary.Add("あ", "AAA");
dictionary.Add("い", "BBB");
dictionary.Add("う", "CCC");
dictionary.Add("え", "DDD");
return dictionary;
}

例えば comboBox3, comboBox4 等を追加して、comboBox1, comboBox2 と同じアイテム
を表示するのであれば、DataTable オブジェクトや Dictionary オブジェクトのインス
タンスを保持してそれを使い回すことができます。

> 以下のコードでうまくいきました。
> ComboBox2.Items.AddRange(ComboBox1.Items.Cast(Of Object)().ToArray())

それとどちらが良いかはケースバイケースだと思います。
引用返信 編集キー/
■80828 / inTopicNo.5)  Re[3]: コンボボックスの値をコピーするには
□投稿者/ 魔界の仮面弁士 (818回)-(2016/08/13(Sat) 11:43:36)
No80826 (あ さん) に返信
> ところで、>>データバインドしているのであれば・・・
> というのはどういう意味でしょうか?

VBA の ComboBox で言えば、RowSource プロパティに相当する機能のことです。
https://msdn.microsoft.com/ja-jp/library/office/ff845390.aspx
https://msdn.microsoft.com/ja-jp/library/office/ff845773.aspx

Excel ならシート範囲や Name オブジェクト、
Access ならテーブルや選択クエリーといった
いわゆる『データソース』に存在するデータを
表示させる機能のことです。



> 下記のようなコードを使っているのですが
> これはデータバインドしているのでしょうか?
.AddItem は バインドしていない場合(アンバウンド)ですね。
VBA の .AddItem は、.NET では .Items.Add や .Items.AddRange に相当します。

.AddItem あるいは .Items.Add した場合、それらのデータは
コントロール上に保持されます。

一方データバインドした場合、データを保持しているのは
「データソース」であり、コントロール側は
それを参照しているだけの状態になります。



> ComboBox2.list = ComboBox3.list
.List に相当する機能はありません。近いのは .Items や .DataSource ですね。

---------------------
'【VBA】配列を表示する
ComboBox1.List = Array("aaa", "bbb", "ccc")

'【.NET】配列を表示する
ComboBox1.DataSource = New String() {"aaa", "bbb", "ccc"}
---------------------
'【VBA】2番目のアイテムの内容を差し替える
ComboBox2.AddItem "aaa"
ComboBox2.AddItem "bbb"
ComboBox2.AddItem "ccc"
ComboBox2.AddItem "ddd"
ComboBox2.List(1) = "新しい2番目のアイテム"

'【.NET】2番目のアイテムの内容を差し替える
ComboBox2.Items.Add("aaa")
ComboBox2.Items.Add("bbb")
ComboBox2.Items.Add("ccc")
ComboBox2.Items.Add("ddd")
ComboBox2.Items(1) = "新しい2番目のアイテム"
---------------------

なお、VBA の ComboBox1.Items(1, 2) のような「列」指定の機能は用意されていません。
ただし、オーナードローという機能を使って、列相当の機能を作りこむことが可能です。
引用返信 編集キー/
■80829 / inTopicNo.6)  Re[4]: コンボボックスの値をコピーするには
□投稿者/ あ (12回)-(2016/08/13(Sat) 12:08:14)
お二方、どうもありがとうございました。
非常に勉強になりました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -