如何将滚动条添加到组框? C#4.0

时间:2011-04-18 19:26:03

标签: c# scrollbar

所以...有人知道怎么做吗?...

在面板中很容易,因为我们可以将“AutoScroll”属性设置为true ...但是groupbox没有它。

无论如何......在某种程度上存在吗?,提前感谢; - )。

7 个答案:

答案 0 :(得分:46)

非常简单......在组合框中添加一个面板。

答案 1 :(得分:3)

声明组框对象和Panel对象,它默认包含滚动条和我的一些复选框对象;我在某处读到了Group框没有滚动条的美学原因(我希望不是这样,为什么不让用户拨打电话)。解决方案很简单,一旦您知道您将创建一个面板,该面板将放置在您的组框之上,只是为了获得滚动条。

    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;
}

答案 2 :(得分:1)

GroupBox无法显示滚动条。如果您需要类似于可以包含滚动条的GroupBox的控件,请参阅Panel控件

Read This Article - Find (The GroupBox cannot display a scroll bar) Text

答案 3 :(得分:0)

如果需要在GroupBox中添加面板,请在PanelBox内部停靠Panel,并将停靠面板上的AutoScroll属性设置为true。然后,您可以在Panel上的GroupBox中放置您需要的任何控件,必要时将滚动它。

如果您不喜欢上面所述的外观,那么您有两种可能的选择:

  1. 通过调用本机Win32 API来添加滚动条,可能有办法破解(在这种情况下更像是“滥用”)GroupBox控件。我很少在托管控件上使用本机调用,但我已经在例如我需要禁用ListView上的滚动条的情况下完成此操作,因为ListView不会公开此属性。下面我公开了在C#中使用的本机Win32函数,只需调用SetScrollBarVisible来根据代码启用或禁用滚动条(我没有在GroupBox上测试过):

  2. 如果美学对您来说很重要(并非坏事,用户体验在应用程序开发世界的许多方面都被大大低估)并且向GroupBox添加滚动条对您来说不起作用/看起来不错,您需要找到另一种解决方案。我认为最好的解决方案是从头开始自己控制以满足您的期望(或修改滚动条本身,不知道如何做到这一点),尽管这可能比它可能值得多做多少工作

  3. 以下是我从C#代码中公开并调用Win32函数SetScrollBar的方法(对不起,DllImport由于某种原因不会格式化为代码块):

    [DllImport(“user32”)]     private static 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);
    }
    

答案 4 :(得分:0)

要执行此操作,您必须将1个面板添加到组框并将autoscroll属性设置为true。

然后你会添加第二个面板,它比第一个面板大。 在第二个面板(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);

答案 5 :(得分:0)

水平滚动条提示

如果你有一个面板,其中包含的所有控件都锚定在顶部(这样它们居中),你将永远不会看到水平滚动条。你需要至少有一个锚定左和右的控件。当面板太小而无法显示时,顶部消失,以便显示水平滚动条。我在面板上放了一个带有隐藏文字的标签来完成这个任务。

这个小小的花絮让我花了很长时间才发现!希望它有用!

答案 6 :(得分:0)

如果您不想要滚动条,但希望GroupBox增长,可以从Layout部分编辑以下属性,如下所示。

AutoSize = true;

AutoSizeMode = GrowOnly;