Подтвердить что ты не робот

Как добавить полосу прокрутки в групповой ящик? С# 4.0

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

Ответ 4

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

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

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

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

Вот как я показываю и вызываю функцию SetScrollBar из Win32 из моего кода на С# (извините, DllImport по какой-то причине не форматируется как блок кода):

[DllImport ( "user32" )]   private static extern long ShowScrollBar (длинный 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);
}

Ответ 5

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

Затем вы добавите вторую панель, которая будет большой, чем первая панель. На этой второй панели (StringPanel в коде beleow) вы добавите элементы управления.

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

Ответ 6

Горизонтальная панель прокрутки

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

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

Ответ 7

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

AutoSize = true;

AutoSizeMode = GrowOnly;