[C# WinForms] Control automatisch resizen a.d.h.v. contents

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Tanuki
  • Registratie: Januari 2005
  • Niet online
Hoe kan ik een control automatisch resizen aan de hand van de contents èn er dan voor zorgen dat anchor / dock / etc. nog steeds werkt?

Ik wil bijvoorbeeld het volgende:

code:
1
2
3
4
Label (titel)
Label label (eigenschappen)
Label (beschrijving)
ListView (data)

En nu kan die beschrijving label 1 regel zijn, of 20 regels zijn, hangt er maar net vanaf hoeveel tekst erin staat, hoe breed het form op dat moment is, etc.

Nu wil ik dus dat de ListView altijd direct onder die label komt. Ongeacht hoe hoog die beschrijving label is.

Ik kan echter nergens vinden hoe ik dit zou kunnen doen (ik weet ook niet waar ik op moet googlen).

PV: Growatt MOD5000TL3-XH + 5720wp, WPB: Atlantic Explorer v4 270LC, L/L: MHI SCM 125ZM-S + SRK 50ZS-W + 2x SRK 25ZS-W + SRK 20ZS-W Modbus kWh meter nodig?


Acties:
  • 0 Henk 'm!

  • NickThissen
  • Registratie: November 2007
  • Laatst online: 09-09 10:50
Als de ListView onder de Label gedocked is, dan zal de ListView omlaag schuiven (en kleiner worden) zodra de Label langer wordt.

Verder kan ik je niet echt helpen omdat het vaak afhangt van hoe je UI er precies uitziet. Je kunt ook vaak een TableLayoutPanel of FlowLayoutPanel oid gebruiken om nog meer controle te krijgen.

Mijn iRacing profiel


Acties:
  • 0 Henk 'm!

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 16-09 15:42

Sebazzz

3dp

Ik denk voordat iemand je kan helpen we eerst een overzicht van je UI en eventueel document tree nodig hebben.

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


Acties:
  • 0 Henk 'm!

  • Tanuki
  • Registratie: Januari 2005
  • Niet online
Sebazzz schreef op maandag 17 mei 2010 @ 17:55:
Ik denk voordat iemand je kan helpen we eerst een overzicht van je UI en eventueel document tree nodig hebben.
Overzicht van de GUI:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
            // 
            // lblName
            // 
            this.lblName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
                        | System.Windows.Forms.AnchorStyles.Right)));
            this.lblName.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
            this.lblName.Location = new System.Drawing.Point(3, 0);
            this.lblName.Name = "lblName";
            this.lblName.Size = new System.Drawing.Size(346, 26);
            this.lblName.TabIndex = 0;
            this.lblName.TextAlign = System.Drawing.ContentAlignment.TopCenter;
            // 
            // lblArticleName
            // 
            this.lblArticleName.AutoSize = true;
            this.lblArticleName.Location = new System.Drawing.Point(3, 26);
            this.lblArticleName.Name = "lblArticleName";
            this.lblArticleName.Size = new System.Drawing.Size(39, 13);
            this.lblArticleName.TabIndex = 1;
            this.lblArticleName.Text = "Article:";
            // 
            // lblBarcodeName
            // 
            this.lblBarcodeName.AutoSize = true;
            this.lblBarcodeName.Location = new System.Drawing.Point(3, 39);
            this.lblBarcodeName.Name = "lblBarcodeName";
            this.lblBarcodeName.Size = new System.Drawing.Size(50, 13);
            this.lblBarcodeName.TabIndex = 2;
            this.lblBarcodeName.Text = "Barcode:";
            // 
            // lblBarcode
            // 
            this.lblBarcode.AutoSize = true;
            this.lblBarcode.Location = new System.Drawing.Point(59, 26);
            this.lblBarcode.Name = "lblBarcode";
            this.lblBarcode.Size = new System.Drawing.Size(10, 13);
            this.lblBarcode.TabIndex = 3;
            this.lblBarcode.Text = ".";
            // 
            // lblArticle
            // 
            this.lblArticle.AutoSize = true;
            this.lblArticle.Location = new System.Drawing.Point(59, 39);
            this.lblArticle.Name = "lblArticle";
            this.lblArticle.Size = new System.Drawing.Size(10, 13);
            this.lblArticle.TabIndex = 4;
            this.lblArticle.Text = ".";
            // 
            // lblDescription
            // 
            this.lblDescription.AutoSize = true;
            this.lblDescription.Location = new System.Drawing.Point(3, 52);
            this.lblDescription.Name = "lblDescription";
            this.lblDescription.Size = new System.Drawing.Size(316, 13);
            this.lblDescription.TabIndex = 7;
            this.lblDescription.Text = "1 2 3 4 5 6 7 8 9 10 11 12 13 14 1 2 3 4 5 6 7 8 9 10 11 12 13 14";
            // 
            // listView1
            // 
            this.listView1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
                        | System.Windows.Forms.AnchorStyles.Right)));
            this.listView1.Location = new System.Drawing.Point(3, 68);
            this.listView1.Name = "listView1";
            this.listView1.Size = new System.Drawing.Size(346, 130);
            this.listView1.TabIndex = 8;
            this.listView1.UseCompatibleStateImageBehavior = false;
            // 
            // ViewProduct
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.Controls.Add(this.lblDescription);
            this.Controls.Add(this.listView1);
            this.Controls.Add(this.lblArticle);
            this.Controls.Add(this.lblBarcodeName);
            this.Controls.Add(this.lblBarcode);
            this.Controls.Add(this.lblName);
            this.Controls.Add(this.lblArticleName);
            this.Name = "ViewProduct";
            this.Size = new System.Drawing.Size(352, 201);


Het idee is: Titel, daaronder artikelnummer + barcode, daaronder de beschrijving van het product en daaronder een listview met andere gekoppelde zaken (die vul ik later nog met data, maar dat maakt voor nu niks uit).

Ik wil dus dat de listview naar boven / naar beneden kan verspringen aan de hand van de grootte van de omschrijving label. De listview wordt nu sowieso rechts en links groter als het form ook groter wordt.

Uiteindelijk wil ik er nog de eigenschappen van een product bij hebben per categorie. Dat zou bijvoorbeeld een flowlayoutpanel worden waar de hoogte van onbekend is (breedte is sowieso 100% d.m.v. anchoring).

De hamvraag van dit topic is dus eigenlijk: Hoe kan ik binnen een form dingen zo opbouwen dat de grootte niet vooraf vastligt en dat de items die eronder staan naar beneden schuiven zodat de items erboven ook passend blijven?

En daarnaast: Stel ik zou de overgebleven zaken (in dit geval de listview, de eigenschappen van een product hebben uiteindelijk ook een vaste hoogte) alles willen laten opvullen, hoe kan ik dit dan doen? Dus de listview blijft de oorspronkelijke hoogte, tenzij het form zo groot is dat er een 'gat' ontstaat, de listview zou dan het form moeten opvullen.

PV: Growatt MOD5000TL3-XH + 5720wp, WPB: Atlantic Explorer v4 270LC, L/L: MHI SCM 125ZM-S + SRK 50ZS-W + 2x SRK 25ZS-W + SRK 20ZS-W Modbus kWh meter nodig?