- - PR -
拡張ComboBoxの拡張
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-01-16 11:56
とても久しぶりにお世話になります。
msdnにある拡張コンボボックスを拡張したいと考えております。 環境は、 visual studio 2005 C# windowsアプリケーション です。 拡張内容は、DataSourceプロパティを使用し、データ連結で表示させる方法です。 DataSourceプロパティに設定されるオブジェクトは、DataTable、List<T>など 自由に設定し、表示項目、値については、「DisplayMember」、「ValueMember」 で指定します。 そこで、 msdnから引用------------------------------------------------------- //各項目を反復処理して //DisplayMember 文字列の最大幅を測定します foreach(object item in this.Items) { maxWidth = Math.Max(maxWidth, ds.MeasureString(item.ToString(), this.Font).Width); } ------------------------------------------------------------------- この部分の変更が必要だと思うのですが。 -------------------------------------------------------------------- // 表示文字列の最大幅を取得 foreach (object item in this.Items) { Type t = item.GetType(); string str = (string)t.InvokeMember(this.DisplayMember, BindingFlags.GetProperty, null, item, null); if (string.IsNullOrEmpty(str)) { str = string.Empty; } maxWidth = Math.Max(maxWidth, ds.MeasureString(str, this.Font).Width); } -------------------------------------------------------------------- このように変更したところ、DataSourceプロパティがList<T>のような場合は うまくいくのですが、DataTableで連結させた場合、itemの型がDataRowViewと なるため、this.DisplayMemberで指定したプロパティが存在せず、エラーとな ってしまいます。 この処理は、DisplayMember、ValueMember、DataSource各プロパティに 値を設定後行っております。 DataSourceプロパティの型を意識せずに、コンボボックスの表示項目の値 を取得することは可能なのでしょうか。 よろしくお願い致します。 | ||||
|
投稿日時: 2008-01-16 12:25
URL を張っていただけると一手間減って助かります。 で質問ですが、GetItemText メソッドをどうぞ。 | ||||
|
投稿日時: 2008-01-16 12:42
Hongliang様 返信頂きましてありがとうございました。
コンボボックスの表示値を取得することができました。 本当に、ありがとうございました。
申し訳ありません。 次回から気をつけます・・・・・ |
1