it-swarm.com.ru

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

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

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

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

14
Daas Cook

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

46
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;
}
2
CESARVALLES

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

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

1
Hady Shaltout

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

AutoSize = true;

AutoSizeMode = GrowOnly;
0
Rakesh Burbure

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

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

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

0
TheJonz

Для этого вам нужно добавить 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
Nick

Если вам нужно добавить панель внутри вашего 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);
}
0
Bender the Greatest