Entwickler-Ecke

WinForms - Scrollbalken breiter machen


Raorkon - Mi 12.01.11 10:32
Titel: Scrollbalken breiter machen
Hallo zusammen,

ich weiß das es scheinbar recht banal ist, aber leider komm ich nicht weiter.

Ich habe eine Anwendung, bei der bei einem Timeevent ein Panel erscheint. In diesem Panel wird eine Tabelle in einem Datagrid angezeigt, sollte die Anzeigegröße nicht ausreichen kann man mit einem Scrollbalken arbeiten. Nun wird das ganze über ein Touchscreen bedient, und daher soll der Scrollbalken breiter werden dazu habe ich folgendes gemacht:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
            // 
            // dataGrid1
            // 
            this.dataGrid1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
                        | System.Windows.Forms.AnchorStyles.Left)
                        | System.Windows.Forms.AnchorStyles.Right)));
            this.dataGrid1.BackgroundColor = System.Drawing.Color.LightSteelBlue;
            this.dataGrid1.Font = new System.Drawing.Font("Arial"12.5F, System.Drawing.FontStyle.Bold);
            this.dataGrid1.Location = new System.Drawing.Point(00);
            this.dataGrid1.Name = "dataGrid1";
            this.dataGrid1.Size = new System.Drawing.Size(13281);
            this.dataGrid1.TabIndex = 0;
            this.dataGrid1.DoubleClick += new System.EventHandler(this.dataGrid1_Click);
            this.dataGrid1.CurrentCellChanged += new System.EventHandler(this.dataGrid1_CurrentCellChanged);
            this.imageList1.Images.Clear();
            this.imageList1.Images.Add(((System.Drawing.Image)(resources.GetObject("resource"))));



C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
            this.pnlDeliveryOrder.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
                        | System.Windows.Forms.AnchorStyles.Left)
                        | System.Windows.Forms.AnchorStyles.Right)));
            this.pnlDeliveryOrder.AutoScroll = true;
            this.pnlDeliveryOrder.AutoScrollMargin = new System.Drawing.Size(030);
            this.pnlDeliveryOrder.Controls.Add(this.pictureBox1);
            this.pnlDeliveryOrder.Controls.Add(this.dataGrid1);
            this.pnlDeliveryOrder.Location = new System.Drawing.Point(5167);
            this.pnlDeliveryOrder.Name = "pnlDeliveryOrder";
            this.pnlDeliveryOrder.Size = new System.Drawing.Size(13281);
            this.pnlDeliveryOrder.Visible = false;


wenn ich nun zum panel

Autoscrollmargin wird aber nicht beachtet.

Wo habe ich meinen Denkfehler??


Th69 - Mi 12.01.11 11:49

AutoScrollMargin stellt nicht die Größe der ScrollBar dar, sondern den Abstand (Rand) von einem enthaltenen Control (damit etwas Platz zwischen Control und dem Rand des ScrollContainers ist).

Verwendest du noch das alte DataGrid oder das neuere DataGridView?
Bei letzterem kannst du durch Ableiten auf die geschützte Eigenschaft 'DataGridView.VerticalScrollBar' zugreifen und die Größe anpassen.

Bei DataGrid (das ich selber noch nie verwendet habe) scheint es die analoge geschützte Eigenschaft 'DataGrid.VertScrollBar' zu geben.


Raorkon - Mi 12.01.11 12:08

aber msdn sagt zu AutoscrollMargin:

Ruft die Größe des AutoBildlaufrandes ab oder legt diese fest.

daher dachte ich das dies die richtige Methode ist


ich arbeite noch mit dem "alten" Datagrid, laut msdn ist die VertScrollBar nur get

C#-Quelltext
1:
protected ScrollBar VertScrollBar { get; }                    


Th69 - Mi 12.01.11 12:32

Ja, VertScrollBar kannst du nur lesen, aber die untergeordneten Eigenschaften (z.B. Size) kannst du selbstverständlich auch setzen, d.h.

C#-Quelltext
1:
VertScrollBar.Size = new Size(100, VertScrollBar.Height);                    

Aber wie schon geschrieben, mußt du dafür von DataGrid ableiten:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
class MyDataGrid : DataGrid
{
   public MyDataGrid()
   {
     // hier kannst du nun die Größe der ScrollBar ändern (s.o.)
   }
}

Und dann MyDataGrid in deiner Form verwenden (bzw. einen besseren Namen ;-)