TableLayoutStyle

lunedì 09 novembre 2009 - 10.56

Earthquake Profilo | Junior Member

Ciao a tutti
sperando di trovare un'anima pia espongo il mio problema.
Ho un Form vuoto e devo costruirlo tutto a runtime.
Niente di complicato fino a qui solo che ho trovato difficolta con questo controllo :TableLayoutPanel
Il problema e che la proprietà che si imposta sulla colonna per il ridimensionamento della stessa mi restitusci un errore.
Mostro il dettaglio:

1128x526 84Kb


Sperando che l'immagine sia chiara
Ringrazio in anticipo per l'aiuto.

alexmed Profilo | Guru

Ciao
Detta senza aver provato:
Prova a mettere Me.Controls.Add(a) prima del ciclo.

Ciao

alexmed

Earthquake Profilo | Junior Member

Ciao,
Grazie per il suggerimento ma non è cambiato nulla da sempre lo stesso errore.

alexmed Profilo | Guru

Puoi postare il codice?
alexmed

Earthquake Profilo | Junior Member

certo
Eccolo:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim a As New TableLayoutPanel
a.SuspendLayout()
a.ColumnCount = 10
a.RowCount = 10
a.Dock = DockStyle.Fill
Me.Controls.Add(a)
For j = 0 To a.RowCount - 1
For i As Integer = 0 To a.ColumnCount - 1
Dim txt As New TextBox
Dim grp As New GroupBox
a.ColumnStyles(i).SizeType = SizeType.AutoSize
grp.Name = "grpProva" & i.ToString
grp.Text = "Prova" & j.ToString & i.ToString
txt.Name = "txtProva" & j.ToString & i.ToString
grp.Controls.Add(txt)
txt.Dock = DockStyle.Fill
a.Controls.Add(grp, i, j)
grp.Dock = DockStyle.Fill
Next
Next
a.Dock = DockStyle.Fill
a.CellBorderStyle = TableLayoutPanelCellBorderStyle.OutsetPartial
a.AutoScroll = True
a.ResumeLayout()
End Sub

Grazie ancora

alexmed Profilo | Guru

Così:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

... và bene?

alexmed

Earthquake Profilo | Junior Member

Forse non hai provato il codice....
però l'ho fatto io e ci sono 2 cose che non vanno
la prima e che non entra nel ciclo for each
la seconda e che se pur entrasse non imposterebbe nessuna proprietà al controllo TableLayoutPanel

Grazie comunque

alexmed Profilo | Guru

>Forse non hai provato il codice....
Provato l'ho provato ... probabilmente non ho capito cosa vuoi ottenere.
>però l'ho fatto io e ci sono 2 cose che non vanno
>la prima e che non entra nel ciclo for each
Ho pensato più al risultato che vuoi ottenere
>la seconda e che se pur entrasse non imposterebbe nessuna proprietà
>al controllo TableLayoutPanel
Imposta l'AutoSizae delle colonne in base al contenuto delle celle.

>Grazie comunque
Se mi spieghi bene cosa vuoi ottenere e se posso, ti dò volentieri una mano.

alexmed

Earthquake Profilo | Junior Member

Hai ragione non ho spiegato cosa voglio ottenere.
Vorrei che sia impostato l'autosize sulle colonne in modo da renderlo dinamico con i controlli all'interno.
Grazie

alexmed Profilo | Guru

Per essere sicuri di andare nella direzione giusta: cosa intendi per dinamico?

alexmed

Earthquake Profilo | Junior Member

Ciao,
per dinamica intendo l'autosize delle colonne.
a.ColumnStyles(i).SizeType = SizeType.AutoSize
in questo modo il controllo si ridimensione in base alla grandezza del suo contenuto.
Spero si essere stato chiaro.
Grazie

alexmed Profilo | Guru

Ciao
Scusa se rispondo solo ora ma ero in giro.
Dunque
Per prima cosa il codice che ti ho postato prima (i ciclo for each ) può essere sostituito semplicemente da a.AutoSize = True
In questo modo la larghezza delle colonne si adatta al contenuto e qui forse risiede il problema:
quando crei i GroupBox non specifichi nessuna dimensione, quindi VB utilizza quelle di default (200;100) dopodichè il TextBox, per il quale non sono state definite le dimensioni, si adatta a quelle del groupBox perchè gli dici "txt.Dock = DockStyle.Fill"
Fai una prova dando delle dimensioni al GroupBox


Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

e fammi sapere

Ciao

alexmed

Earthquake Profilo | Junior Member

Ciao,
Si hai risolto il mio problema.
Grazie Ancora.

alexmed Profilo | Guru

Bene

Se invece vuoi che le colonne siano tutte uguali, togli

grp.Size = New Size(100, 50)

e metti

a.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20.0!))
a.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 20.0!))

Ma ti accorgerai che rallenta tantissimo

Ciao

alexmed

Earthquake Profilo | Junior Member

Ok è vero rallenta un po!!
Grazie ancora sei stato gentilissimo.
Spero di poter ricambiare un giorno.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5