Как добавить полосу прокрутки в групповой ящик?C # 4.0 - PullRequest
15 голосов
/ 18 апреля 2011

Итак ... кто-то знал, как это сделать? ...

В панели это просто, потому что мы можем установить для свойства "AutoScroll" значение true ... но в групповом окне его нет.

В любом случае ... существует какой-то способ для этого ?, заранее спасибо; -).

Ответы [ 7 ]

46 голосов
/ 18 апреля 2011

Довольно просто ... Добавить панель внутри групповой рамки.

3 голосов
/ 13 ноября 2013

Объявление объекта группового блока и объекта панели, который будет содержать полосу прокрутки по умолчанию и некоторые из моих объектов флажков; я где-то читал, что в блоке групп нет полосы прокрутки по эстетическим соображениям (надеюсь, это не так, почему бы и нет пусть пользователь сделает этот вызов). Решение простое, как только вы узнаете, что создадите панель, которая будет лежать поверх вашей группы, просто чтобы получить полосу прокрутки.

    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;
}
1 голос
/ 20 июня 2012

GroupBox не может отображать полосу прокрутки.Если вам нужен элемент управления, похожий на GroupBox, который может содержать полосу прокрутки, см. Panel элемент управления

Читать эту статью - Найти (GroupBox не может отобразить полосу прокрутки) Текст

0 голосов
/ 13 июня 2016

Если вам не нужны полосы прокрутки, но вы хотите, чтобы ваш GroupBox рос, вы можете отредактировать эти свойства из раздела «Макет», как показано ниже.

0 голосов
/ 01 июля 2015

Подсказка горизонтальной полосы прокрутки

Если у вас есть панель, на которой все содержащиеся в ней элементы управления привязаны к вершине (так, чтобы они были отцентрированы), вы никогда не увидите горизонтальную полосу прокрутки. У вас должен быть хотя бы один элемент управления с привязкой слева и сверху, который исчезает, когда панель слишком мала, чтобы показать ее, чтобы появилась горизонтальная полоса прокрутки. Для этого я поместил ярлык со скрытым текстом на панель.

Этот маленький кусочек занял у меня много времени, чтобы обнаружить! Надеюсь, это полезно!

0 голосов
/ 05 сентября 2013

Для этого вам нужно будет добавить 1 панель в групповой блок и установить для свойства автопрокрутки значение true.

Затем вы добавите вторую панель, которая будет больше, чем первая панель.На этой второй панели (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 голосов
/ 28 июня 2013

Если вам нужно добавить панель внутри вашего GroupBox, закрепите панель внутри GroupBox и установите для свойства AutoScroll на закрепленной панели значение true.Затем вы можете поместить любые элементы управления, которые вам нужны, внутри GroupBox на Panel, которая будет прокручиваться при необходимости.

Если вам не нравится способ, который выглядит так, как вы заявили выше, у вас есть два возможных варианта:

  1. Может быть способ взломать (в этом случае больше похоже на «злоупотребление») элемент управления GroupBox, сделав вызовы в собственном Win32 API для добавления полосы прокрутки.Я редко использую собственные вызовы на управляемых элементах управления, но я делал это в ситуациях, когда, например, мне нужно отключить полосу прокрутки в ListView, поскольку ListView не предоставляет это свойство.Ниже я раскрываю встроенную функцию Win32 для использования в C #, просто вызовите SetScrollBarVisible, чтобы включить или отключить полосу прокрутки по мере необходимости из вашего кода (я не проверял это на GroupBox):

  2. ЕслиЭстетика ЭТО очень важно для вас (неплохо, пользовательский опыт во многих областях мира разработки приложений сильно недооценивается), и добавление полосы прокрутки в GroupBox не работает / не выглядит хорошо для вас, вам нужно найти другуюрешение.Я полагаю, что лучшим решением было бы создать собственный контроль с нуля, который соответствует вашим ожиданиям (или изменить саму полосу прокрутки, не зная, как это сделать), хотя это может потребовать гораздо больше работы, чем может стоить.

Вот как я выставляю и вызываю Win32-функцию SetScrollBar из моего кода C # (извините, 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...