È una buona idea posizionare e ridimensionare dinamicamente i controlli su un modulo o impostarli staticamente?

5

Ho lavorato principalmente con strumenti di creazione di interfacce come l'Interface Builder di xCode e l'ambiente di Visual Studio per posizionare i moduli e posizionarli sugli schermi. Ma lo sto riscontrando con il mio ultimo progetto, il posizionamento dei controlli sul modulo attraverso un'interfaccia grafica non funzionerà. Questo ha più a che fare con il numero di controlli personalizzati che devo creare che non riesco a vedere visivamente prima mano.

Quando l'ho affrontato per la prima volta, ho iniziato a posizionare tutti i miei controlli rispetto agli ultimi che ho creato. Questo ha avuto i suoi pro e contro. Da un lato, questo mi ha dato l'opportunità di impostare un numero (ad esempio un margine) e quando ho cambiato il margine, i controlli erano tutti correttamente dimensionati l'uno con l'altro (come ad esempio accorciare i controlli al centro mantenendo i controlli vicino al margine lo stesso). Ma questo ha iniziato a diventare una rete di codice di ragni che sapevo non sarebbe andata molto lontano prima di diventare pericolosa. Cambia un numero e tutte le dimensioni, ma rimuovi un controllo e hai creato molti più errori e problemi di dimensioni per tutti gli altri controlli. È diventato più un intervento chirurgico, quindi piccole modifiche ai controlli e al layout.

C'è un modo buono o forse un modo preferito per determinare quando dovrei usare il posizionamento relativo o assoluto nelle forme?

    
posta CrystalBlue 28.02.2011 - 23:05
fonte

4 risposte

2

Tutto dipende da quale sia il tuo obiettivo finale.

  • Vuoi consentire agli utenti di ridimensionare la finestra?
  • Vale la pena?

A seconda del progetto, l'impostazione di una dimensione fissa di Windows è molto più conveniente, soprattutto se si tratta di uno strumento interno non destinato al pubblico.

La soluzione migliore è consentire al programma di riposizionare gli elementi in base alle dimensioni della finestra. Un buon approccio sarebbe quello di posizionare in modo assoluto gli elementi all'interno di e lasciare che i contenitori effettivi si espandano, ridimensionino qualsiasi cosa. Quindi i singoli controlli all'interno di questi contenitori si allungheranno per riempire il suo genitore.

Alcuni framework lo rendono più facile di altri. Per Windows Form può essere fatto, ma richiede molto tempo e sembra che non si integri bene con il framework.

Windows Presentation Foundation ha incorporato questo e se hai esperienza nella creazione di siti web con HTML e CSS vedrai che XAML è praticamente lo stesso principio. Alcune differenze ci sono, ma per la maggior parte ti sentirai come a casa.

Dato che non hai menzionato un particolare framework, ho risposto in base ai due framework che uso di più.

    
risposta data 28.02.2011 - 23:34
fonte
0

Non sono sicuro di come IB lo fa, ma se ho bisogno di creare controlli che verranno spostati o ridimensionati se il modulo sono attivi in Delphi, posso farlo con i controlli ' Align e Anchors proprietà.

Align consente di impostare un controllo per occupare l'intero spazio disponibile o tutto lo spazio disponibile lungo un lato dell'area client del suo genitore. (Ad esempio, impostando Align su alTop e assegnando al controllo un Height di 20 significa che indipendentemente da come ridimensionhi le cose, questo occuperà sempre una striscia di 20 pixel nella parte superiore del suo genitore.)

Anchors , d'altra parte, è usato per mantenere la posizione e gli attributi di un controllo rispetto ai bordi del modulo. È definito come un set di bit che rappresenta i quattro bordi della forma. Ad esempio, la maggior parte dei controlli è ancorata in alto e a sinistra, ma se creo una finestra di dialogo ridimensionabile, potrei ancorare i pulsanti OK e Annulla in basso e a destra, in modo che appaiano sempre nella stessa posizione rispetto a l'angolo in basso a destra del modulo. L'ancoraggio di un controllo ai bordi opposti (sinistra + destra o superiore + inferiore) significa che il controllo si estenderà o si restringerà insieme al modulo se viene ridimensionato lungo quella dimensione.

Questo è il modo in cui è fatto a Delphi, almeno. Verifica se i designer di moduli che utilizzi supportano proprietà simili. Se è così, renderà il tuo lavoro molto più semplice e semplificherà gran parte del lavoro "spider-web".

    
risposta data 28.02.2011 - 23:24
fonte
0

Beh, non è per i deboli di cuore, ma secoli fa, quando ero creativo, mi è venuto in mente un modo bastardo di fare ciò chiamato Dynamic Dialogs, basato su una struttura di controllo chiamata Esecuzione differenziale .

L'idea di base non è troppo strana. Hai una singola funzione chiamata Contents () e una variabile di modalità "global" con 3 possibili valori, SHOW, UPDATE ed ERASE. Quando Contents () viene eseguito in modalità SHOW, crea i controlli e li rende visibili, calcolando le loro posizioni nel modo desiderato. La modalità ERASE si libera di loro. La modalità UPDATE presuppone che i controlli siano già presenti, ma ricalcola le loro posizioni (e altre proprietà) e li sposta o li modifica solo se necessario. Il processo è veloce poiché i controlli sono già lì. Avendo una funzione che fa 3 cose diverse, più l'associazione dei dati, obbedisce al principio DRY. Per aggiungere o rimuovere un controllo può essere una modifica del codice a una riga.

Lo stesso concetto può anche essere utilizzato per gestire gli eventi sui controlli, come i clic sui pulsanti o gli eventi di modifica delle modifiche. Ciò evita di dover creare funzioni di gestore di eventi e consente un numero elevato di controlli senza confusione.

L'inganno viene fornito nella registrazione delle maniglie di controllo e cosa fare se la procedura Contents () contiene istruzioni condizionali come "if" e "for".

    
risposta data 28.02.2011 - 23:45
fonte
0

Potresti voler consultare il documento morfologico . Il sistema Morphic svolge molto questo tipo di lavoro: ad esempio, assicura che i diversi componenti siano disposti correttamente sullo schermo in base alle linee guida del progettista (ad esempio, in base alle regole di allineamento), al contrario delle definizioni rigorose definizioni di layout.

    
risposta data 01.03.2011 - 03:16
fonte

Leggi altre domande sui tag