Domanda

Sto cercando di posizionare programmaticamente determinati controlli all'interno di un modulo, in base alla differenza tra la dimensione minima dei moduli e la dimensione del client - questo purtroppo produce risultati diversi a seconda del tema che l'utente ha caricato (principalmente il problema sembra essere dovuto al fatto che la barra del titolo e il bordo del modulo hanno altezze / larghezze diverse in temi diversi). Ho provato a utilizzare l'altezza dell'intera finestra (compresa la barra del titolo, ecc.) Ma questo non sembra funzionare come previsto :(

questo purtroppo causa disallineamenti nei controlli contenuti. in questo particolare scenario di utilizzo, l'uso di controlli di layout automatici (come il pannello di layout del flusso) non è una soluzione praticabile.

Mi manca qualcosa di veramente ovvio: esiste un modo migliore per farlo?

Mi scuso se questa domanda sembra stupida

Molte grazie Dave

È stato utile?

Soluzione

L'unico modo in cui ho scoperto di risolverlo accuratamente è fare qualcosa del tipo:

int delta = this.Height - this.ClientRectangle.Height;

e poi usa che quando mai ho bisogno di basare qualcosa sul client sono nella forma (L'ho usato quando volevo un modulo per ridimensionare automaticamente alcuni pulsanti e avere un bordo uguale attorno a loro).

Quindi per te:

int delta = this.Height - this.ClientRectangle.Height;
int actualMinHeight = this.MinimumSize.Height - delta;

HTH

Modifica: ho provato a usare le proprietà SystemInformation.Border3DSize e SystemInformation.BorderSize ma non mi hanno dato la larghezza corretta per me.

Altri suggerimenti

Non sono sicuro al 100% se stai chiedendo un modo per poter ridimensionare i controlli dinamicamente in fase di esecuzione in base alla forma, allo spessore del bordo, alla spaziatura delle icone ecc. Tuttavia, se questo viene declassato, devo incolpare me stesso per fraintendere la tua domanda, l'articolo qui su CodeProject . Dato che hai menzionato dimensioni dei bordi diverse ecc., Potresti voler esaminare le metriche di sistema che controllano le dimensioni dei bordi utilizzando i pinvoke GetSystemMetrics, dai un'occhiata a qui per una cosa del genere, e qui . Guarda qui anche il pinvoke.net sito web per GetSystemMetrics.

Spero che questo aiuti, I migliori saluti, Tom.

Anche per tutti coloro che si imbattono in questo problema, la soluzione migliore che le brave persone qui sono riuscite a trovare è stata usare qualcosa del tipo:

Dim clientRectDelta As Integer = Me.Height - Me.ClientRectangle.Height - (SystemInformation.Border3DSize.Height * 2)
Dim actualMinimumHeight As Integer = Me.MinimumSize.Height - clientRectDelta
Dim deltaHeight As Integer = Me.ClientRectangle.Height - actualMinimumHeight

Tuttavia, questo ignora qualsiasi altezza dipendente dal tema specifico del controllo (ovvero l'altezza delle intestazioni di colonna nelle liste di visualizzazione cambia, il che sembra alterare l'altezza complessiva della lista di vista, che può causare sovrapposizioni ecc.) - ma sembra funzionare principalmente.

Un grande grazie a Pondidum, tommieb75 e nobugz che hanno aiutato con questo problema! (scusatemi tutti ma al momento non ho abbastanza reputazione per contrassegnare tutte le vostre risposte su +1).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top