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

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

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

Re[1]: ComboBoxのDisplayMember入れ替え処理


(過去ログ 125 を表示中)

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

■74348 / inTopicNo.1)  ComboBoxのDisplayMember入れ替え処理
  
□投稿者/ モモ (11回)-(2014/12/19(Fri) 11:32:05)

分類:[.NET 全般] 

言語切替の処理を作成しており、日本語名列と英語名列の両方を保持したDataTableをバインドしています。
ComboBoxのDisplayMemberを入れ替えることにより実現しているのですが、
DisplayMemberを設定し直した直後にTextプロパティを参照してみると前の言語列のままになっています。
Textプロパティに変更後の言語列の内容(対象コンボボックスの選択SelectedIndexはそのままで)を反映する方法はありますか?
引用返信 編集キー/
■74349 / inTopicNo.2)  Re[1]: ComboBoxのDisplayMember入れ替え処理
□投稿者/ shu (646回)-(2014/12/19(Fri) 12:43:55)
No74348 (モモ さん) に返信

以下のコードでどうでしょう?

Public Class Form1

    Private tbl As DataTable

    Public Sub New()
        ' この呼び出しはデザイナーで必要です。
        InitializeComponent()

        ' InitializeComponent() 呼び出しの後で初期化を追加します。
        tbl = New DataTable
        With tbl.Columns
            .Add("val")
            .Add("col1")
            .Add("col2")
        End With
        tbl.Rows.Add("01", "abc", "あいう")
        tbl.Rows.Add("02", "cde", "かきく")
        tbl.Rows.Add("03", "fgh", "さしす")
        ComboBox1.ValueMember = "val"
        ComboBox1.DisplayMember = "col1"
        ComboBox1.DataSource = tbl
    End Sub

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        ComboBox1.DisplayMember = "col1"
        Label1.Text = ComboBox1.Text
    End Sub

    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        ComboBox1.DisplayMember = "col2"
        Label1.Text = ComboBox1.Text
    End Sub
End Class

引用返信 編集キー/
■74350 / inTopicNo.3)  Re[2]: ComboBoxのDisplayMember入れ替え処理
□投稿者/ モモ (12回)-(2014/12/19(Fri) 13:11:42)
お返事ありがとうございます。
私の質問の仕方が悪かったようで申し訳ありません。

ComboBox1.DisplayMember = "col1"
Label1.Text = ComboBox1.Text
のように別のコントロールのテキストを更新するのではなく、
ComboBox1.Text自体のことです。

ComboBox1.DisplayMember = "col1"(日本語モード)としているのに
なぜかComboBox1.Textは英語モードのままなんです。

ComboBox1.DisplayMemberを入れ替えた後にRefreshメソッド等を発行してもダメでした。

何かよい方法はありますでしょうか?
引用返信 編集キー/
■74351 / inTopicNo.4)  Re[3]: ComboBoxのDisplayMember入れ替え処理
□投稿者/ ニーチェ (1回)-(2014/12/19(Fri) 13:32:44)
確認ですが、
ComboBox1.Textの中身ではなくって
コンボボックスの表示のことですか?
引用返信 編集キー/
■74352 / inTopicNo.5)  Re[3]: ComboBoxのDisplayMember入れ替え処理
□投稿者/ shu (647回)-(2014/12/19(Fri) 13:45:09)
No74350 (モモ さん) に返信

> ComboBox1.DisplayMember = "col1"
> Label1.Text = ComboBox1.Text
> のように別のコントロールのテキストを更新するのではなく、
> ComboBox1.Text自体のことです。
>
代入しているのがComboBox1.Textなので意図にはあっているかと思います。

再現ソース提示願います。
引用返信 編集キー/
■74353 / inTopicNo.6)  Re[4]: ComboBoxのDisplayMember入れ替え処理
□投稿者/ モモ (14回)-(2014/12/19(Fri) 13:55:55)
ComboBox1.Textの中身です。

再現ソースというほどのものではありませんが、

日本語の場合
 cmbName.DisplayMember = "NameJ"; // 日本語名列 例「山田 太郎」
英語の場合
 cmbName.DisplayMember = "NameE"; // 英語名列 例「Taro Yamada」

例えば日本語モードでDisplayMemberを英語名列に切り替えると
cmbName.DisplayMemberは"NameE"に変更されるが、
cmbName.Textは「山田 太郎」のまま残っています。
DisplayMemberを入れ替えるとTextも自動的に切り替わると思っていました。
何かよい方法がありましたら教えてください。
引用返信 編集キー/
■74354 / inTopicNo.7)  Re[5]: ComboBoxのDisplayMember入れ替え処理
□投稿者/ shu (648回)-(2014/12/19(Fri) 14:45:52)
No74353 (モモ さん) に返信
> ComboBox1.Textの中身です。
>
> 再現ソースというほどのものではありませんが、
> 「
> 日本語の場合
>  cmbName.DisplayMember = "NameJ"; // 日本語名列 例「山田 太郎」
> 英語の場合
>  cmbName.DisplayMember = "NameE"; // 英語名列 例「Taro Yamada」
> 」
これだと私の提示したコードと変わらないので再現性がないですね。
私の提示したコードではモモさんの言われている現象は確認出来ないので
違いをさがしてみて下さい。
引用返信 編集キー/
■74355 / inTopicNo.8)  Re[6]: ComboBoxのDisplayMember入れ替え処理
□投稿者/ ニーチェ (2回)-(2014/12/19(Fri) 14:55:59)
・言語とバージョンは?
 (No74353を見るとC#のように思いますが、それがなければVBだと思っていました。)
・DropDownStyleは何を使っていますか?
・コンボボックスのTextプロパティの中身を具体的にどのように確認しましたか?
 (No74349のshuさんのサンプルはまさにTextプロパティの内容を参照しているので、
 同じことをすれば貴方の環境でも再現するはずですが?)
引用返信 編集キー/
■74356 / inTopicNo.9)  Re[7]: ComboBoxのDisplayMember入れ替え処理
□投稿者/ モモ (15回)-(2014/12/19(Fri) 16:02:45)
いろいろとすみません。
2012 c#です。
DropDownStyleはDropDownListです。
コンボボックスのTextプロパティの中身は処理不正で判明しましたし、デバッグして確認もしました。
引用返信 編集キー/
■74364 / inTopicNo.10)  Re[8]: ComboBoxのDisplayMember入れ替え処理
□投稿者/ ニーチェ (3回)-(2014/12/19(Fri) 17:49:05)
> コンボボックスのTextプロパティの中身は処理不正で判明しましたし、デバッグして確認もしました。

VS2012が手元にないのでお役に立てないかもしれませんが、もう一つ確認です。

「処理不正」とありますが、具体的にはどういったことですか?
・Textプロパティを参照して処理を行ったら変な動きをして、よく見たらこれが日本語のままだったということなのか、
 (この場合、具体的にはTextプロパティの値をどのように利用していますか?(Stringの変数に入れるとか))
・それとも例外が発生したということなのか。
(例外発生でDisplayMember自体が書き変わっていない、ということも考えられるので、念のための確認です)

引用返信 編集キー/
■74365 / inTopicNo.11)  Re[1]: ComboBoxのDisplayMember入れ替え処理
□投稿者/ ヴァン (11回)-(2014/12/19(Fri) 18:28:04)
No74348 (モモ さん) に返信

こんにちは。

1.SelectedIndex を別変数に保存。
2.DataSource をクリア。
3.DisplayMember を書き換え
4.DataSource を設定。
5.SelectedIndex を別変数から復帰。

という具合ではどうでしょうか?

引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -