web-dev-qa-db-ja.com

グループボックスにスクロールバーを追加する方法は? C#4.0

だから...誰かがそれを作る方法を知っていましたか?...

パネルでは「AutoScroll」プロパティをtrueに設定できるため簡単ですが、groupboxにはありません。

とにかく...それのための何らかの方法が存在しますか?、事前に感謝します;-)。

16
Daas Cook

かなりシンプル...グループボックス内にパネルを追加します。

47
Paulo Santos

デフォルトでスクロールバーを含むグループボックスオブジェクトとパネルオブジェクト、および一部のチェックボックスオブジェクトを宣言します。美的理由から、グループボックスにはスクロールバーがないことをどこかで読みました(それが正しくないことを願っています。その呼び出しを行います)。ソリューションは簡単です。スクロールバーを表示するためだけにグループボックスの上に配置するパネルを作成するとわかったら、簡単です。

    private System.Windows.Forms.GroupBox grpDR;//GROUPBOX IN WHICH PANEL WILL OVERLAY
private System.Windows.Forms.Panel grpScrlDR;//PANEL WHICH WILL HAVE SCROLL BAR AND CONTAIN CHECK BOXES

private System.Windows.Forms.CheckBox chkDr2;
private System.Windows.Forms.CheckBox chkDr1;

 private void InitializeComponent()
{
  this.grpScrlDR = new System.Windows.Forms.Panel();
  this.chkDr2 = new System.Windows.Forms.CheckBox();
  this.chkDr1 = new System.Windows.Forms.CheckBox();
  this.grpDR = new System.Windows.Forms.GroupBox();

  this.grpScrlDR.SuspendLayout();
  this.grpDR.SuspendLayout();


// 
// grpScrlDR
// PANEL DETAILS ADDING CHECKBOX CONTROLS AND ENABLING AUTO SCROLL
  this.grpScrlDR.AutoScroll = true;
  this.grpScrlDR.Controls.Add(this.chkDr2);
  this.grpScrlDR.Controls.Add(this.chkDr1);
  this.grpScrlDR.Dock = System.Windows.Forms.DockStyle.Fill;
  this.grpScrlDR.Location = new System.Drawing.Point(5, 336);
  this.grpScrlDR.Name = "grpScrlDR";
  this.grpScrlDR.Size = new System.Drawing.Size(175, 230);
  this.grpScrlDR.TabIndex = 0;

// 
// chkDr2
// 
  this.chkDr2.AutoSize = true;`
  this.chkDr2.Location = new System.Drawing.Point(13, 45);
  this.chkDr2.Name = "chkDr2";
  this.chkDr2.Size = new System.Drawing.Size(54, 20);
  this.chkDr2.TabIndex = 1;
  this.chkDr2.Text = "Permit#";
  this.chkDr2.UseVisualStyleBackColor = true;
  this.chkDr2.CheckedChanged += new System.EventHandler(this.chkDr_CheckedChanged);

// 
// chkDr1
// 
  this.chkDr1.AutoSize = true;
  this.chkDr1.Checked = true;
  this.chkDr1.CheckState = System.Windows.Forms.CheckState.Checked;
  this.chkDr1.Location = new System.Drawing.Point(13, 22);
  this.chkDr1.Name = "chkDr1";
  this.chkDr1.Size = new System.Drawing.Size(54, 20);
  this.chkDr1.TabIndex = 0;
  this.chkDr1.Text = "Account";
  this.chkDr1.UseVisualStyleBackColor = true;
  this.chkDr1.CheckedChanged += new System.EventHandler(this.chkDr_CheckedChanged);

// 
// grpDR
// GROUP BOX DETAILS - GROUP BOX IS ADDING PANEL CONTROLS
  this.grpDR.Controls.Add(this.grpScrlDR);
  this.grpDR.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));

  this.grpDR.Location = new System.Drawing.Point(5, 336);
  this.grpDR.Name = "grpDR";
  this.grpDR.Size = new System.Drawing.Size(175, 230);
  this.grpDR.TabIndex = 46;
  this.grpDR.TabStop = false;
  this.grpDR.Text = "Report by";
  this.grpDR.Visible = false;
}
3
CESARVALLES

GroupBoxはスクロールバーを表示できません。スクロールバーを含めることができるGroupBoxのようなコントロールが必要な場合は、Panelコントロールを参照してください。

この記事を読む-検索(GroupBoxはスクロールバーを表示できません)テキスト

1
Hady Shaltout

スクロールバーは必要ないが、GroupBoxを拡大したい場合は、以下に示すように、レイアウトセクションから以下のプロパティを編集できます。

AutoSize = true;

AutoSizeMode = GrowOnly;
0
Rakesh Burbure

水平スクロールバーのヒント

パネル内に含まれるすべてのコントロールが上部にアンカーされている(中央に配置されている)パネルがある場合、水平スクロールバーは表示されません。水平スクロールバーを表示するには、パネルが小さすぎて表示できない場合に非表示になる、左と上にアンカーされた少なくとも1つのコントロールが必要です。これを実現するために、パネルに隠しテキストのラベルを付けました。

この小さな一口で、発見するのにかなり時間がかかりました!お役に立てば幸いです。

0
TheJonz

これを行うには、1つのパネルをグループボックスに追加し、autoscrollプロパティをtrueに設定する必要があります。

次に、最初のパネルよりも大きい2番目のパネルを追加します。この2番目のパネル(beleowコードのStringPanel)で、コントロールを追加します。

System.Windows.Forms.GroupBox StringsGroup;
System.Windows.Forms.Panel StingPanel;
System.Windows.Forms.Panel StringPanel2;

StringsGroup = new System.Windows.Forms.GroupBox();
StingPanel = new System.Windows.Forms.Panel();
StringPanel2 = new System.Windows.Forms.Panel();

//Add your controls to StringPanel
StingPanel.Size = new System.Drawing.Size(300, 800);

StringPanel2.Size = new System.Drawing.Size(325, 345);
StringPanel2.AutoScroll = true;

this.StringPanel2.Controls.Add(StingPanel);
this.StringsGroup.Controls.Add(this.StringPanel2);
0
Nick

GroupBox内にパネルを追加する必要がある場合は、GroupBox内にPanelをドッキングし、ドッキングされたPanelのAutoScrollプロパティをtrueに設定します。次に、必要なときにスクロールするPanelのGroupBox内に必要なコントロールを配置できます。

上記の方法が気に入らない場合は、次の2つのオプションがあります。

  1. ネイティブのWin32 APIを呼び出してスクロールバーを追加することにより、GroupBoxコントロールをハッキングする方法(この場合は「乱用」のようなもの)があるかもしれません。マネージコントロールでネイティブコールを使用することはめったにありませんが、たとえば、ListViewはこのプロパティを公開しないため、ListViewのスクロールバーを無効にする必要がある状況でこれを実行しました。以下では、C#で使用するネイティブWin32関数を公開します。SetScrollBarVisibleを呼び出して、必要に応じてコードからスクロールバーを有効または無効にします(GroupBoxではこれをテストしていません)。

  2. 美学があなたにとってそれほど重要である場合(悪いことではなく、アプリケーション開発の世界の多くの領域でユーザーエクスペリエンスが大きく評価されていない)、GroupBoxにスクロールバーを追加しても機能しない/見栄えが悪い場合は、見つける必要があります。別のソリューション。私は最良の解決策はあなたの期待に応えるようにゼロからあなた自身のコントロールを作ることだと思います(またはこれを行う方法がわからない、スクロールバー自体を変更します)、これは価値があるかもしれないよりもはるかに多くの作業になる可能性があります。

C#コードからWin32関数SetScrollBarを公開して呼び出す方法を次に示します(申し訳ありませんが、DllImportは何らかの理由でコードブロックとしてフォーマットされません)。

[DllImport( "user32")]プライベート静的extern long ShowScrollBar(long hwnd、long wBar、long bShow);

long SB_HORZ = 0;
long SB_VERT = 1;
long SB_BOTH = 3;

private static void SetScrollBarVisible (Control control, long sb, bool enable)
{
    if (control != null) return;
    if (enable)
        ShowScrollBar(control.Handle.ToInt64(), sb, 1);
    else
        ShowScrollBar(control.Handle.ToInt64(), sb, 0);
}
0