2012-05-10 76 views
3

私がしようとしているのは、私のwinformの中間を拡大して崩壊させることです。私はここに同様の質問があることを知っていますが、彼らの誰も本当に私が必要とするものはしません。私はFlowLayoutPanelを使用して読んだが、私はそれを動作させることはできません。拡大/縮小winform

私が達成したいものの例は次のとおりです。

私はWinフォーム(例)

example

私はそれが途中でテキストボックスを非表示にするbutton1をクリックして、フォームを縮小してい

スペースを非表示にするには、button2をクリックします。どちらの方法でも、button3は、テキストボックスが表示されている場所または表示されていない場所の下に留まる必要があります。

これまでの試みでは、テキストボックスを非表示にして、フォームで何もしないでください。私は現在、AutoSizetrueに、AutoSizeModeGrowAndShrinkに設定しています。

これを行うか同様の操作を行うことができますが、矢印またはフォームを展開する小さなボタンが表示されています。これを行うにはボタンが必要です。

これを行う簡単な方法はありますか?

助けてください。

更新

示唆したように、私は0に高さを設定し、テキストボックスを非表示にしようとしたが、それはだけではなく、真ん中のフォームの右側を縮小します。

Screenshot

+0

heightプロパティを0に設定して非表示にしますか? 3番目のボタンが配置されている位置のy座標から差し引き、フォームyサイズからテキストボックスの高さを取り除いてそれに応じて縮小することを知っている高さを使用します。 – RhysW

+0

私は最近これに類似したものを書きましたが、すでにネット上でいくつかの例が見つかりました。たとえば、http://www.codeproject.com/Articles/53318/C-CustomControl-Featuring-a-Collapsible-Panelまたはhttp://collapsiblepanel.codeplex.com/releases/view/25409を参照してください。これを行うサードパーティのコントロールもたくさんあります。 DevExpressには折りたたみ可能なパネルコントロールがあります。ボタンからパネルヘッダーのクリックイベントをエミュレートすることができます(パネルヘッダーは表示されません) – dash

答えて

1

フォームの元の高さを変数に格納しておくと、後で再び展開するときに元の高さに戻すことができます。また、あなたが一番下にボタン3を固定すれば、あなたはサイズ変更中にそれを処理する必要はない:あなた自身のサイズを変更処理しているので、

public partial class Form1 : Form { 
    private int originalHeight; 

    public Form1() { 
    InitializeComponent(); 
    button3.Anchor = AnchorStyles.Left | AnchorStyles.Bottom; 
    } 

    protected override void OnLoad(EventArgs e) { 
    originalHeight = this.Height; 
    base.OnLoad(e); 
    } 

    private void button1_Click(object sender, EventArgs e) { 
    textBox1.Visible = false; 
    this.Height = originalHeight - textBox1.Height; 
    } 

    private void button2_Click(object sender, EventArgs e) { 
    this.Height = originalHeight; 
    textBox1.Visible = true; 
    } 
} 

は、フォームにAutoSize=false;を残します。

フォームが展開されているときにButton2がむしろ役に立たず、フォームが折りたたまれているときにButton1がむしろ役に立たないので、フォームの切り替えを処理するボタンを1つ使用することを検討します。私が知っている

+0

Thats BRILLIANT! :)まさに私が探していたもの。あなたが提案したように1つのボタンでトグルを行いますが、これはずっと優れています。 –

+1

この方法は機能しますが、これはあなたが望むものを達成するためのひどい方法だと思います。レイアウト上の変更には、多くのコード変更が必要であり、そうでなければ無駄な変数を導入する必要があります。 (それはあなたの質問に対する答えではないことを言っているわけではありません:それはそれを行うことの非常に悪い方法です) – Jcl

0

コントロールを非表示にし、それに応じて高さのプロパティを設定します。

1

これは、パネルとドッキングを使用して行う必要があります。 AutoSizeを使用するのは間違った方法です。

1

は、私はゲームに遅れていますが、私はちょうど同じ問題を解決するため、私は自分のソリューションをご提供したい:あなたはすでに述べたように

は、あなたが仕事をするFlowLayoutPanelを使用することができます。それをあなたのフォームに入れてください。 FlowDirectionをTopDownに設定し、ボタンとテキストボックスを正しい順序で追加します。 完了したら、フォームのAutoSizeとFlowLayoutPanelをtrueに設定し、AutoSizeModeGrowAndShrinkに設定します。

防止

の自動サイズ調整があなたの問題はあなたがtrueにAutoSizeプロパティを設定し、テキストボックスを非表示/無効にした場合、幅を小さくしようとしていることを、あるときに崩壊する幅。これは、テキストボックスがフォーム上で最も広いコントロールであり、非表示の場合、幅が残りのコントロールで必要な幅に縮小されるためです。これを防ぐには、ボタンをテキストボックスと同じ幅のパネルコントロールに配置します。 テキストボックスを非表示にすると、幅は必要なだけ広がります。

代わりに二つのボタンを使用する/崩壊に

を展開するチェックボックスを使用して、私は/崩壊を展開するチェックボックスを使用して好きです。

textbox1.DataBindings.Add(「チェック」「可視」、CheckBox1を)

:サイズ変更のための全体の符号化は、テキストボックスの Visibilityプロパティに checkbox1.Checked性の一つの結合ラインを追加することに還元されます
関連する問題