none
PropertyGridのグリッド幅を調整する方法 RRS feed

  • 質問

  • Visual Studio Visual C++ フォーラムでは、回答を頂けなかったのでこちらで投稿し直しさせて頂きます。


    VS2005 .Net2.0、C++/CLIで PropertyGridを使っています。
     
    PropertyGridの Gridの幅をプログラム内から変更したいのですが、
    どのようにすれば良いのでしょうか?

    プロパティ名と値のグリッドの間にある線をドラッグした時と同じ
    処理をしたいのです。
     
    ListViewのカラムヘッダだと、
    this->listView1->Columns[ 0 ]->Width = 100;
    とすれば、幅の調整ができますが、
     
    PropertyGridのグリッド幅を調整する方法を知りたいです。


    宜しくお願いいたします

    2009年3月12日 15:04

回答

  • Privateなフィールドとメソッドにアクセスする必要があります。
    非公開になってるのに無理やり実行するので動作が保障されるわけではありません。


    1private: System::Void SetLabelWidth(int width , PropertyGrid^ pg) 
    2
    3    System::Type^ typ = pg->GetType(); 
    4 
    5    System::Reflection::FieldInfo^ fi = typ->GetField("gridView", System::Reflection::BindingFlags::NonPublic | BindingFlags::Instance); 
    6    if(fi != nullptr) 
    7    { 
    8        System::Object^ gridview; 
    9        gridview = fi->GetValue(pg); 
    10        if(gridview != nullptr) 
    11        { 
    12            System::Type^ typGrid; 
    13            MethodInfo^ mi; 
    14            typGrid = gridview->GetType(); 
    15            mi = typGrid->GetMethod("MoveSplitterTo" , BindingFlags::NonPublic | BindingFlags::Instance); 
    16            if(mi != nullptr) 
    17            { 
    18                array<System::Object^>^ values = {width}; 
    19                mi->Invoke(gridview,values); 
    20            } 
    21        } 
    22    } 
    23

    #C++/CLIはほとんど使ってないので文法の自信なし
    • 回答としてマーク TDM850 4TX 2009年3月19日 0:37
    2009年3月13日 3:58

すべての返信

  • Privateなフィールドとメソッドにアクセスする必要があります。
    非公開になってるのに無理やり実行するので動作が保障されるわけではありません。


    1private: System::Void SetLabelWidth(int width , PropertyGrid^ pg) 
    2
    3    System::Type^ typ = pg->GetType(); 
    4 
    5    System::Reflection::FieldInfo^ fi = typ->GetField("gridView", System::Reflection::BindingFlags::NonPublic | BindingFlags::Instance); 
    6    if(fi != nullptr) 
    7    { 
    8        System::Object^ gridview; 
    9        gridview = fi->GetValue(pg); 
    10        if(gridview != nullptr) 
    11        { 
    12            System::Type^ typGrid; 
    13            MethodInfo^ mi; 
    14            typGrid = gridview->GetType(); 
    15            mi = typGrid->GetMethod("MoveSplitterTo" , BindingFlags::NonPublic | BindingFlags::Instance); 
    16            if(mi != nullptr) 
    17            { 
    18                array<System::Object^>^ values = {width}; 
    19                mi->Invoke(gridview,values); 
    20            } 
    21        } 
    22    } 
    23

    #C++/CLIはほとんど使ってないので文法の自信なし
    • 回答としてマーク TDM850 4TX 2009年3月19日 0:37
    2009年3月13日 3:58
  • gekka様
    早速のご回答、ありがとうございます。
    返信が大変遅くなり、申し訳ありません。


    ご教示いただいたコードにて、無事に実装する事ができました。

    上記コード以外に、確認に際して追加したコードは、
     using namespace System::Reflection;
    の宣言だけでした。

    ありがとうございました。
    2009年3月19日 0:45