所以...有人知道怎么做吗?...
在面板中很容易,因为我们可以将“AutoScroll”属性设置为true ...但是groupbox没有它。
无论如何......在某种程度上存在吗?,提前感谢; - )。
答案 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中放置您需要的任何控件,必要时将滚动它。
如果您不喜欢上面所述的外观,那么您有两种可能的选择:
通过调用本机Win32 API来添加滚动条,可能有办法破解(在这种情况下更像是“滥用”)GroupBox控件。我很少在托管控件上使用本机调用,但我已经在例如我需要禁用ListView上的滚动条的情况下完成此操作,因为ListView不会公开此属性。下面我公开了在C#中使用的本机Win32函数,只需调用SetScrollBarVisible来根据代码启用或禁用滚动条(我没有在GroupBox上测试过):
如果美学对您来说很重要(并非坏事,用户体验在应用程序开发世界的许多方面都被大大低估)并且向GroupBox添加滚动条对您来说不起作用/看起来不错,您需要找到另一种解决方案。我认为最好的解决方案是从头开始自己控制以满足您的期望(或修改滚动条本身,不知道如何做到这一点),尽管这可能比它可能值得多做多少工作
以下是我从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;