• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C#のプロパティグリッドの内容を手動で。)

C#のプロパティグリッドを手動で設定する方法

このQ&Aのポイント
  • C#でプロパティグリッドを使ったプログラムを書く際、全てのプロパティを表示させるのではなく、必要なものだけを表示させたい場合には、手動で設定する必要があります。
  • プロパティグリッドの表示対象となるオブジェクトのアクセサを用意し、`propertyGrid.SelectedObject = obj;` とすることで、オブジェクトのプロパティが自動的に表示されます。
  • しかし、全てのプロパティを表示させるのではなく、特定のプロパティのみを表示させたい場合には、手動でプロパティをセットする必要があります。具体的な手順や参考サイトなどについて、詳細を教えていただければと思います。

質問者が選んだベストアンサー

  • ベストアンサー
noname#212058
noname#212058
回答No.1

特定のプロパティを非表示にするには、BrowsableAttribute 属性を使用します。使用方法は以下のページを参考にしてください。 http://dobon.net/vb/dotnet/control/propertygrid.html http://msdn.microsoft.com/ja-jp/library/aa302326.aspx http://www.atmarkit.co.jp/fdotnet/dotnettips/316pgridattrib/pgridattrib.html

TeijigoTeatime
質問者

お礼

早々のレスありがとうございます。 属性で非表示にできるのは分かったのですが、目的としては動的に非表示したいと思っています。

TeijigoTeatime
質問者

補足

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VBでグリッドを表示させるには?

    WinXPパソコンを使用しています。 「Visual Basic 2005 Express Edition」をダウンロードしてきて、セットアップ完了したのですが、プログラムを新規作成しようとして、フォームを表示させたところ、コントロールを配置するときの位置、大きさの目安となるグリッドが表示されていないのです。 「VB2005」対応版の市販の解説書を見ると、[プロパティ]ウィンドウで「DrawGrid」の箇所を「表示(True)」にすればいいようですが、その肝心の「DrawGrid」の項目がありません。 グリッド非表示ままだとコントロールで「Label」などを貼り付けたときも、大きさが確認できず、やりずらいのですが。 「VB2005」ではグリッド表示する機能はないのでしょうか。 どなたか、アドバイスをよろしくお願い致します。

  • VB6のコードをC#にしたい

    C#はこちらでよかったでしょうか。。カテゴリ違いだったらすみません。 現在、VB6にて書かれているコードを、C#にて置き換える事になりました。 しかし私はまともなオブジェクト指向の言語で組むのも初めてなら、C系の言語で組むのも初めてで、そこでどうすればいいのか困っています。 VB6で sub aa(i as integer)      dim obj as object   call bb(obj,i)   call obj.run()    end sub    sub bb(byref pobj as object,i as integer)      select case i    case 1:     pobj = new obj1    case 2:     pobj = new obj2   end select    end sub    といったようなコードがあります。obj1とobj2はVBのクラスなのですが、メソッドはどちらも同じrunというものが用意されているとします。 ようは引数の値によって、メソッドやプロパティの形は同じだけれど、メソッドの中身が違うクラスをもらって、そのもらったクラスのメソッドを実行したいわけです。 しかしC#でまったく等価のソースをかくと、当然ながらobjはただのobject形なので、そんなメソッドはないとおこられてしまいます。VB6の場合、そのあたりが厳密でないので許されていたのですが。。。 こういった場合、どのようにソースをかけばいいのでしょうか? やはりobj1,obj2のクラスの方に工夫しないといけないでしょうか? 実はこのオブジェクトを用意しているのが別チームの為、その場合こうしてくれと提案しなくてはなりません。もしそれがなくても可能であればそれにこした事はないのですが。。。 いちおうもらったクラスのタイプをしらべて、それごとにコードをかくという方法は思いついたのですが、それだとobj1、obj2にあたるクラス数が実は種類がたくさんあり、そこだけならまだしも、他にも同じようなコードをたくさんかかなくてはいけなくなってしまいます。 もう少しスマートにするにはどのようにすればいいでしょうか? こういうクラス構成にすれば、とか教えていただければ助かります。

  • prototypeで前の値を潰さない方法は?

    function obj() { this.name = "名前です"; } var obj01 = new obj(); alert(obj.name); というコードの場合、obj.nameでobj関数に設定されたnameプロパティの値「名前です」をアラートすることができます。このobj関数を変更せず、あとからプロパティと値を追加したい場合、prototypeメソッド(って言って間違いありませんか?)を用いて以下のように実現することができます。 function obj() { this.name = "名前です"; } obj.prototype.age = "年齢です"; var obj01 = new obj(); alert(obj.name+" / "+obj.age); newする前に記述するのがポイントなんですよね。これにより、obj関数(オブジェクト)にageというプロパティと値「年齢です」が追加され、アラートできるようになりました。また最近、連想配列を使うことで複数のプロパティと値を一気にセットできる便利な方法を発見しました。 function obj() { this.name = "名前です"; } obj.prototype.age = "年齢です"; obj.prototype = { "country":"日本出身です", "city":"東京出身です", "hobby":"音楽鑑賞です" }; var obj01 = new obj(); alert(obj.country+" / "+obj.city+" / "+obj.hobby); //alert(obj.age); //alert(obj.name); と、このように複数のプロパティと値をセットし、後で利用することができます。 前置きが長くてすみません、ここからが質問です。 最後の例の場合、連想配列によってセットされたプロパティの値は存在しますが、それ以前にprototypeで設定したageプロパティは存在しなくなっています。alert(obj.age)の行をコメントアウトしていますが、実行するとundefinedと表示されます。そして2つ目のコメントアウト行alert(obj.name);は問題なくnameプロパティの値をアラートできています。 つまり、prototypeメソッドを使って先に追加したプロパティと値は、「obj.prototype=連想配列」で実行した時点で潰されてしまっているようでした。 この連想配列を使ったプロパティ追加を行う際、先に「obj.prototype.プロパティ名」で追加していたプロパティと値を残しておく方法はありませんでしょうか?

  • VB6-オブジェクトを配列にセット

    質問用に、本来作りたいものではなく、機能に絞った質問をします。 ちなみにNo.2567628とは違います。 テキストボックスが10個あり、Text1、Text2、…Text10というオブジェクト名となります(説明の便宜上以上の名前になっているが実際はtxt○○で、○○の規則は無い)。仕様の都合上、text(1)、text(2)…の配列は使用できません。(配列のタイプはNo.2567628) 上記の仕様で、全てのテキストボックスをvbnullstringに割り当てたいのですが、 Private Sub Form_Load() Dim i As Integer Dim obj(9) As Object Set obj(0) = Text1 Set obj(1) = Text2 Set obj(2) = Text3 Set obj(3) = Text4     … Set obj(9) = Text10 For i = 0 To 10 obj(i).text = vbnullstring Doevents Next i End Sub で、本来出来るのですが、 Set obj(0) = Text1 の右辺がStringで定義したい場合ができません。 つまり Set obj(0) = "Text1" という感じです。 (本来のシステムなら"Text1"にあたる所が"strData"とかになる) Private Sub Form_Load() Dim i As Integer Dim obj(9) As Object Set obj(0) = "Text1"  'ここでエラー Set obj(1) = "Text2" Set obj(2) = "Text3" Set obj(3) = "Text4" Set obj(4) = "Text5" Set obj(5) = "Text6" Set obj(6) = "Text7" Set obj(7) = "Text8" Set obj(8) = "Text9" Set obj(9) = "Text10" For i = 0 To 9 obj(i).Text = vbNullString DoEvents Next i End Sub ちなみにエラーは「型が一致しません」です。 どこを直したらいいか教えてください。

  • ファイルを開かずにカスタムドキュメントプロパティを操作したい

    初めて質問させていただきます。 エクセルファイルの「右クリックメニュー」-「プロパティ」-「カスタム」の情報をVBを使って操作する方法を探しております。 通常は、workbook.CustomDocumentPropertiesを利用するかと思うのますが、 Dim wb As Workbook Set wb = workbooks.Open Filename:="c:\aaa.xls") '(1) 'Set wb = Workbooks("c:\aaa.xls") '(2) 'Set wb = CreateObject("c:\aaa.xls") '(3) debug.print wb.CustomDocumentProperties("顧客") (1)~(3)の方法でオブジェクトを取得した場合、 一度ファイルを開く行為が行われているようです。 しかしながら、私が「カスタムドキュメントプロパティ」を参照しようとしてるファイルにはパスワードがかかっていることがあります。 複数のファイルを一括で処理しようとした際にファイルを開くとパスワードを求められ、プログラムが停止してしまうのが不都合となります。 ただ、エクスプローラなどで「カスタムドキュメントプロパティ」の内容を見るときはファイルを開く動作が不要と思われます。 (少なくともパスワードは求められません。) なんらかの方法があるかと思うのですが心当たりのある方、お助けいただければと思います。

  • MT4時間軸縦線の制御

    MT4のチャートでチャートメニューのグリッドを押せば、時間軸の縦線を消すことができ(下部の時間表示は消えない)、またMQ4プログラムのObjectCreate(OBJ_VLINE)により、任意の刻み位置に別の縦線を引くことができます。 ここでやりたいことは ・デフォルトのグリッドの縦線をプログラムで表示しないようにしたい。若しくは起動時設定。時刻も消したい。 ・ObjectCreate(OBJ_VLINE)で引いた線の下部に対応した時刻を表示したい。 というようなことはできるでしょうか。 参考図書はFXメタとレーダ入門、実践(豊島久道著)

  • VBAの関数で引数渡しでエラー

    関数呼び出しでObject型を渡したいのですが「引数の型が一致していません」との エラーになってしまいます。 以下のプログラムをどのように修正すればよいのでしょうか? Sub Test() Dim obj As Object Set obj = CreateObject("Scripting.Dictionary")     :   Sample(obj) End Sub Function Sample(obj As Object) End Function

  • オブジェクトの参照を返す関数の扱い

    オブジェクトの作成と関数との関係を勉強していますが参照の使い方に関して質問させていただきたいと思います。 以下のような簡単なプログラムを作りました。 myclass.cpp myclass.h で記述されたクラスmyclassは整数を一つ持ち、show_value関数でその整数を表示し、say_heyで"hey"という文字を出力するというものです。 このクラスを利用するプログラムとしてmain.cppをつくりました。このなかには2つの関数が使われます。 -オブジェクトをつくりそれをオブジェクトとして返す関数(return_obj)   -オブジェクトをつくりそれの参照を返す関数(return_ref_obj) これらの関数を用いてオブジェクトをつくり、そのオブジェクトを戻り値としてmainのなかでオブジェクトのshow_value関数で保持する整数を表示する、というものです。 myclass.h-------------------------------- class Myclass{ public: int my_int; Myclass(); ~Myclass(); void show_value(); void say_hey(); }; myclass.cpp---------------------------------- #include "myclass.h" #include <iostream> using namespace std; Myclass::Myclass(){}; Myclass::~Myclass(){}; void Myclass::show_value(){ printf("%d\n", my_int); } void Myclass::say_hey(){ printf("hey\n"); } main.cpp------------ #include <iostream> #include "myclass.h" using namespace std; //オブジェクトをつくりそれをオブジェクトとして返す関数(return_obj)   Myclass return_obj(int int_in){ Myclass myobject; myobject.my_int = int_in; //引数をオブジェクトのmy_intに渡す return myobject; } //オブジェクトをつくりそれの参照を返す関数(return_ref_obj) Myclass& return_ref_obj(int int_in2){ Myclass myobject; myobject.my_int = int_in2;   //引数をオブジェクトのmy_intに渡す Myclass& ref_of_myclass = myobject; return ref_of_myclass; } void main(){ Myclass returned_obj = return_obj(1); //関数に1を渡し、1を保持するオブジェクトを作成 returned_obj.show_value(); //整数(1)表示 returned_obj.say_hey(); Myclass& ref_obj = return_ref_obj(2); //関数に2を渡し、2を保持するオブジェクトを作成し参照として受け取る ref_obj.show_value(); //整数(2)表示 ref_obj.say_hey(); } プログラムを実行した出力------------------- 1 hey -858993460 hey このようにオブジェクト自体を返してコピーしたもの(return_obj使用)はshow_valueでただしくオブジェクトに保持された数が表示されますが 参照でオブジェクトを返したもの(return_ref_obj使用)はアドレスのような数列が表示されます。 質問A これはオブジェクトの参照を返す関数(return_ref_obj)でオブジェクトを作成しても、そのオブジェクトが関数の中でのみ実在しており、関数がおわるとその実体がなくなるためではないかと解釈しているのですがそれで正しいでしょうか? 質問B 関数でオブジェクトを作成してそれをプログラム本体に渡すときはreturn_objのようにオブジェクト自体をコピーしなければ参照などで渡すことはできないのでしょうか? クラスと参照自体勉強を始めたばかりで色々と初歩的な間違いもあるとは思いますが、よろしくお願いします

  • プロパティープロシージャーについて

    簡単な年齢計算プログラムです。 書籍のサンプルなのでうまく動いています。 クラスの変数がPrivate strnameだったりするので そこへアクセスするためにプロパティプロシージャーを使っているというところまでは 判ったような気がしますが、 getとsetの関係がわかりません。 まず、 1.何をGetしているのか 2.なぜGetが先に来るのか、 3.Setの前にGetのReturnで返してますが実態は何を返しているのでしょうか?普通に考えると逆のような気がします。 根本がわかっていないのだと思いますが、どなたかお教え願います。 呼ぶ方 Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim person As New Class1() person.Name = TextBox1.Text person.Birthday = DateTimePicker1.Value.Date MessageBox.Show(person.Name & "さんの年齢は" & person.GetAge()) End Sub クラスの方。 Public Class Class1 Private strname As String Private datBirthday As Date Public Property Name() As String Get Return strname End Get Set(ByVal pro_name As String) strname = pro_name End Set End Property Public Property Birthday() As Date Get Return datBirthday End Get Set(ByVal pro_birthday As Date) datBirthday = pro_birthday End Set End Property Public Function GetAge() As Integer Return Int(DateTime.Today.Subtract(Birthday).Days / 365.25) End Function End Class

  • Win10のUpdateの手動更新について

    Win10 64bit  Homeのノートパソコンです。 他の質問時にアドバイスされたのですが、更新は手動でやるとPCが使えなく なるようなトラブルが発生することがあるので、手動ではやらない方が良いと いうことでした。毎朝、PC起動後に安全のため、「すぐに」ウイルスバスタ ークラウドを手動でスタート後、すぐにWin10の更新を手動で開始させるので 同時進行がほとんどです。なお、WIn10には更新時間の設定があるのは知って います。以下はいつもの手動更新の手順です。 休止から液晶を開けてPC起動・・・すべての設定・・・Windows の設定・・・ 更新とセキュリティ・・・Win. Update 画面・・・自動で開始もあるがそうで ない時で、「最終チェック日時」が昨日以前なら「更新プログラムのチェック」 をクリック・・・「最新の状態です」の表示で終了。もし更新項目が表示され たらダウンロードやインストール実施で更新 という手順でやっています。 これがダメで不具合を引き起こす可能性があるということですか。 念のために確認です。