2017-04-21 11 views
1

私はこのようなフォームを作成しています。winformsのスクロールバーを処理するスクロールバー

  • ボトムパネル自身は、2枚のパネルによって構成されている(黄色)
  • トップパネル:
    • 左パネル(赤)
    • Form1は二つのパネルを有しています右パネル(緑色)

enter image description here

画像が示すように、トップパネルがフォーム1の高さを超えているため、スクロールバーを使用したいと思います。私はいくつかの問題があります:

a)トップパネルでオートスクロールをtrueに設定しても機能しません。私はその場所トップパネル上のボタンを配置した場合

b)は、Form1の高さを超えて、それはスクロールが、私はそのサブパネル(赤または緑)

C)のいずれかにそれを置く代わりに設定されていない場合上のパネルでauto-scrollをtrueに設定すると、自分自身のスクロールバーを作成することができましたが、パネルを移動するスクロールイベントを処理して、ビューポートが必要に応じて変更されるという単純な例は見つかりませんでした。

スクロールバーに目的の動作を正しく追加するにはどうすればよいですか?

+0

スクロールバー、フォームまたは黄色のパネルはどこにありますか? – vendettamit

+0

@vendettamit「トップ」パネルの赤と緑のパネルで構成される垂直スクロールバーがあります。 – de3

+1

これらの3つのパネルはすべてドッキングされているように見えます - 下、左、および塗りつぶされています。スクロールバーが表示されるパネルのAutoScrollMinSizeを設定します。 – LarsTech

答えて

0

LarsTechとHans Passantが示唆したように、AutoScrollMinSizeが機能したので、aとbの質問が解決されました。

質問Cについては、スクロールバーを作成する方法があると思って、スクロールバーの99%が(希望のパネルを移動するだけで)動作するはずです。最後に、私はその論理を自分でコード化しました。

基本フォームのコントロールとしてScrollbar1を追加しました。 initialPanelYはコンストラクタでキャッチされます。

これは、スクロールイベントに応答するコードです。スクロールバーの値に応じて、パネルpanelRest2のY位置を移動するだけです。

using System; 
. 
. 
using System.Windows.Forms; 

namespace WindowsFormMyTests 
{ 
    public partial class Form1 : Form 
    { 
    int initialPanelY; 
    public Form1() 
    { 
     InitializeComponent(); 
     initialPanelY = this.panelRest2.Location.Y; 
    } 

    private void vScrollBar1_Scroll(object sender, ScrollEventArgs e) 
    { 
     int v = (sender as VScrollBar).Value; //between 1 and 100 
     int hiddenPanelHeight = this.panelRest2.Size.Height - this.Size.Height; 
     float moveY = (float)hiddenPanelHeight * ((float)v/100); 
     int newY = initialPanelY - (int)moveY; 
     this.panelRest2.Location = new Point(this.panelRest2.Location.X, newY); 
    } 
    } 
} 
関連する問題