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

わんくま同盟

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

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


(過去ログ 139 を表示中)
■81966 / )  Re[2]: c# classのメンバの値をテーブル表示したい
□投稿者/ MAC (3回)-(2016/11/25(Fri) 13:37:58)
No81965 (魔界の仮面弁士 さん) に返信
> ■No81963 (MAC さん) に返信
>>例えば、以下のクラスの情報を
>
> 全部のメンバーが private になっていますが、本当に良いのですか?
>
> もしもこれらのメンバーが public なプロパティだったのなら、
> PropertyGrid で表示させることもできるのですが。
>
すみません。public です!!
説明用にさらっと書いたため、抜けてしまいました。

>
> 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;
> }
>
説明ありがとうございました。
PropertyGridを試してみました。なかなかよさそうですが、

1.ユーザーに編集させたくない
2.property属性をもたせるために、元にあるclassのコードの記述変更が必要(以下のように)
 なため、手間がかかる。

ので、今回は見送りしたいと思いました。


class test
{
public int a;

public int my_a
{
get { return a; }
set { a = value; }
}

public int b;
public int c;
public int d;
public int e;
public string s1;
public string s2;
}

>
>
> 本当に、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 -