2011-10-17 9 views
0

私はクロスプラットフォームにするためにGTK#GUIフレームワークを使用してC#でアプリケーションを書いています。 多くのことがWPF/Windows.FormsのようなものではなくGTK#で行われていますが、そのほとんどは私自身で解決することができました。プログラムの起動時にGtkのウィンドウサイズを正しく復元する方法は?

私はそれを解決しようとすると "少し"問題になりました。 アプリケーションが閉じられているときに、設定ファイルにウィンドウの位置と最大化フラグを保存しています。 しかし、私はウィンドウのパラメータを復元しようとしているとき、正しく復元されていません。

SetSizeRequest():

this.SetSizeRequest((int)config["windowwidth"], (int)config["windowheight"]); 

SetDefaultSize():

this.SetDefaultSize((int)config["windowwidth"], (int)config["windowheight"]); 

リサイズ():

this.Resize((int)config["windowwidth"], (int)config["windowheight"]); 

問題があるが、私が使用しようとした

方法: これらのメソッドのいくつかはまったく機能しません(何も変更しない)。私が使用している場合

Gdk.Geometry geom = new Gdk.Geometry(); 
geom.MinWidth = 800; 
geom.MinHeight = 400; 
this.SetGeometryHints(BoxNotebook, geom, Gdk.WindowHints.MinSize); 

:私はまた、1つの特定のウィジェットのサイズに制約を追加してい

など、窓が連続して拡大させる、1が設定から読み込まれたしないように設定ウィンドウのサイズ:他の人は奇妙に振る舞いますこれらはすべて一緒に、それは完全な混乱になっています。 プログラムの起動時にウィンドウサイズを復元する正しい方法は何ですか?

答えて

1

Resizeは私のアプリケーションで動作します。正しい値が設定ファイルからロードされていますか?

<?xml version="1.0"?> 
<interface> 
    <object class="GtkWindow" id="window"> 
    <child> 
     <object class="GtkHPaned" id="hpaned"> 
     <child> 
      <object class="GtkNotebook" id="notebook"> 
      <property name="width_request">300</property> 
      <child> 
       <object class="GtkScrolledWindow" id="scrolledwindow"> 
       <child> 
        <object class="GtkTreeView" id="treeview"/> 
       </child> 
       </object> 
      </child> 
      <child type="tab"> 
       <object class="GtkLabel" id="label1"> 
       <property name="label">300 px wide</property> 
       </object> 
       <packing> 
       <property name="tab_fill">False</property> 
       </packing> 
      </child> 
      </object> 
      <packing> 
      <property name="resize">True</property> 
      <property name="shrink">False</property> 
      </packing> 
     </child> 
     <child> 
      <object class="GtkLabel" id="label2"> 
      <property name="width_request">400</property> 
      <property name="label">400 px wide</property> 
      </object> 
      <packing> 
      <property name="resize">False</property> 
      <property name="shrink">False</property> 
      </packing> 
     </child> 
     </object> 
    </child> 
    </object> 
</interface> 
+0

まあ、私はそのウィンドウのコンストラクタでは、ビルド後の()の呼び出しをやっている:ここで

EDIT

は、あなたがやりたいように思わグレイドファイルです。それは間違っているかもしれません。私はいくつかのウィンドウのシグナルハンドラでそれを行う必要がありますか?活性化されているか、他の何か? – mephisto123

+0

これは、私がMain()からwin.Show()を呼び出した後、私のために働いてくれました。 子供のウィジェットの要請が高ければ、ウインドウは水平に永遠に伸び始めることがあります。 最大ウィンドウ幅を制限する方法はありますか? ウィンドウの幅が画面の幅を超えるのは嫌です。 – mephisto123

+0

ウィンドウのコンストラクタでも 'Resize'を使います。おそらくあなたは窓にあまりにも多く詰め込もうとしていますか?子供の要請はいつも大きすぎますか? 'ScrolledWindow'sにいくつかのものを入れて解決できますか? – ptomato

関連する問題