2017-01-05 11 views
0

私はMetroFrameworkを使ってwinformsアプリケーションを開発しています。フォームをプログラムでサイズ変更して、大きなオブジェクトを収めることができます。このために私はtabControlオブジェクトのフレームワークからトグルを使用しています。フォームを大きくするとうまくいきますが、トグルを無効にするとフォームを縮小したくありません。あなたは私が知っているいくつかのテクニックを実験してきた見ることができるようにC#winformsのサイズ変更が正しく動作しない

private void tSynced_CheckedChanged(object sender, EventArgs e) 
{ 
    if (tSynced.Checked) 
    { 
     //Sync enabled 
     Console.WriteLine("Sync enabled"); 
     this.Size = new Size(this.Width + 300, this.Height); 
     this.MinimumSize = new Size(this.Width, this.Height); 
     this.MaximumSize = new Size(this.Width + 200, this.Height); 
    } else 
    { 
     //Sync disabled 
     Console.WriteLine("Sync disabled"); 
     this.Size = new Size(this.Width - 300, this.Height); 
     this.Width = 534; 
     Console.WriteLine(this.Size); 
     this.MinimumSize = new Size(this.Width, this.Height); 
     this.MaximumSize = new Size(this.Width, this.Height); 
    } 
} 

は、ちょうどそれを試してみることにし、そこに戻ってから、私のように動作し、動作するようには思えません。最初の方法(this.Size行)がフォームを大きくするときに機能するので、これは私にとっては奇妙に思えます。 thisというキーワードは、Visual StudioによるとFormを指しています。 tabControlのサイズを変更しようとしているようではありません。なぜなら、私はそれを右辺にバインドしていて、右の境界線に沿って適切に移動するからです。

this.Sizeのログは大きな値を返しますが、私のケースでは{Width=834, Height=354}です。

Size変数に初期値を保存してそこから復元しようとしましたが(ユーザーのサイズ変更を考慮しているため)、正しく動作していないようです。

Size oldSize; //Global variable 
private void initialize() 
{ 
    oldSize = new Size(this.Width, this.Height); 
    Console.WriteLine(oldSize); 
} 

this.Size = oldSize; //In the eventhandler 

ログには正しい値が返されますが、私の場合は{Width=534, Height=354}です。しかし、再度this.Sizeプロパティを設定するときに値を使用することを拒否します...

私は何を見落としていますか?

答えて

3

フォームを拡大すると、MinimumSizeを現在のサイズに設定しますが、サイズを小さくすると、MinimumSizeが設定されたままサイズをリセットして、フォームのサイズが変更されません。

あなたがする必要があるのは、サイズを変更する前にMinimumSizeをリセットすることだけです。

+0

Eeewh、herpiederp!私はそれが何か単純でなければならないことを知っていた:p魅力のように動作!ありがとうございました :) – MagicLegend

関連する問題