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

わんくま同盟

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

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


(過去ログ 139 を表示中)
■81965 / )  Re[1]: c# classのメンバの値をテーブル表示したい
□投稿者/ 魔界の仮面弁士 (989回)-(2016/11/25(Fri) 12:58:35)
No81963 (MAC さん) に返信
> 例えば、以下のクラスの情報を

全部のメンバーが private になっていますが、本当に良いのですか?

もしもこれらのメンバーが public なプロパティだったのなら、
PropertyGrid で表示させることもできるのですが。


test objTest;
public Form1()
{
  InitializeComponent();

  PropertyGrid propertyGrid1 = new PropertyGrid();
  propertyGrid1.Name = "propertyGrid1";
  propertyGrid1.Dock = DockStyle.Fill;
  Controls.Add(propertyGrid1);

  objTest = new test() { a = 12, b = 34, s2 = "TEST" };
  propertyGrid1.SelectedObject = objTest;
}



本当に、private なフィールドのみで構成されているのだとしたら、
外部からは Reflection でしか取り出せなくなってしまいます。


var fs = objTest.GetType().GetFields(BindingFlags.Instance | BindingFlags.NonPublic);
listBox1.DataSource = fs.Select(f => $"{f.Name}\t{f.GetValue(objTest)}").ToArray();


> 以下のように表示する画面を作りたいです。
ListView を使うのは如何でしょうか。
エクスプローラーで、右側の詳細表示に使われているコントロールです。


> datagrid コントロールくらいしか思いつかないのですが、
> 要素は列方向(横方向)にしか追加ができないため適当でないと考えています。
任意の行数・列数にできますよ。

public Form1()
{
  InitializeComponent();
  DataGridView dgv = new DataGridView();
  dgv.Dock = DockStyle.Fill;
  dgv.AllowUserToAddRows = false;
  dgv.RowCount = 2000;
  dgv.ColumnCount = 40;
  Controls.Add(dgv);
}


> 初歩的な質問で申し訳ありませんが

質問内容が、本当に初歩的かどうかを判断できるのであれば、
その人はもはや初心者ではないと思います。(^^;
返信 編集キー/


管理者用

- Child Tree -