Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [VB.NET VS2010] Ottimizzare utilizzzo Form

    Salve a tutti, avevo una perplessità da chiarire, nella creazione di progetti Windows Form finora mi sono limitato a creare una form ogni volta secondo le diverse necessità, ed a visualizzarla separatamente.
    Ma questo metodo mi sembra pressocchè dispersivo, mi chiedevo dunque come si potesse riciclare sempre la stessa form, modificandone solamente i contenuti, realizzando qualcosa di simile ad un template...in pratica vorrei evitare i vari form.show, e finestre che si aprono e chiudono.

    Cosa suggerite?

  2. #2
    La tua domanda credevo di averla capita, ma con l'ultima frase mi hai fatto ricredere ("in pratica vorrei evitare i vari form.show..." ???).

    Se ti riferisci alla possibilità di avere dei form "preconfigurati", come quelli già in dotazione in VS (per esempio "About Box" o "Login Form"), puoi salvare un tuo form come "template" e riutilizzarlo in altri progetti, senza dover ogni volta reinventare la ruota. Il menu interessato per fare ciò è "File\Export Template". Puoi esportare il template dell'intero progetto, oppure di un singolo item (un form, una classe, eccetera).

    Se invece la tua domanda riguarda la modalità di progettazione di applicazioni senza finestre popup, direi che la scelta più interessante sia quella di avvalersi di "User control", da visualizzare a seconda della selezione nel sistema di navigazione da te scelto (tabcontrol, treeview, pulsantoni, ecc.).
    Chi non cerca trova.

  3. #3
    Purtroppo non ci si rende conto che una domanda è poco chiara, fino a quando qualcuno non ce lo fa notare.

    Sarò più chiaro, quando avvio un progetto windows form, creo la prima form, le do un'icona, coloro lo sfondo, assegno delle proprietà, ecc ecc...

    In primis, vorrei evitare che questa form sia solo fine a se stessa, se devo aprire una nuova form, vorrei conservi le stesse caratteristiche, la stessa icona, gli stessi colori (parlo solo di form, non di eventuali controlli interni).

    Questa è la prima strada che non riesco a percorrere.

    In secondo luogo, vorrei "ridurre" il numero di form nei miei progetti, ovvero vorrei che si aprano nuove form, solo quando strettamentente necessario, per il resto vorrei avere un'unica form, che a seconda delle necessità, modifica i suoi contenuti.

    Ad esempio sono su un modulo di ricerca...trovo un cliente, faccio click sul pulsante "visualizza dati cliente", e voglio che non si apra una nuova form con i dati, ma che la stessa form con cui ho fatto la ricerca, modifichi i suoi contenuti...come avessi un contenitore di form, che fa sì che io non sia costretto ogni volta ad aprirne di nuove, ma mi permetta di caricarle al suo interno senza nuove finestre.


    Spero di essermi espresso meglio :-)

  4. #4
    Ok, ora va meglio

    Diciamo che non esiste un metodo progettato allo scopo, ma ti devi arrangiare con una soluzione estemporanea. Questo probabilmente perché MS, per motivi di usabilità, omogeneità ed integrazione con Windows, scoraggia l'adozione di interfacce "caserecce" che non utilizzino font e colori non standard. Esistono, a tal proposito, linee guida per lo sviluppo "conforme" delle interfacce in Windows Form (le trovi su MSDN).

    La strada più "terra terra" è quella di creare un form "template", personalizzarlo quanto basta, infine copiarlo tutte le volte che devi creare un nuovo form. Gli stili e le impostazioni applicate al form template devono essere definitivi prima di creare gli altri form; se decidi di cambiare qualcosa a metà dell'opera devi cambiare a mano ciascun form già creato.

    Una strada migliore potrebbe essere quella che ti dicevo nella risposta precedente: crei il form template e poi lo esporti mediante il menu "File\Export Template". Anche in questo caso, la modifica del template non si riversa automaticamente sui form già creati a partire da esso.

    Una soluzione ancora più elegante sfrutta l'ereditarietà della programmazione ad oggetti: crei il form "template", lo personalizzi. Crei un altro form nella maniera consueta (per esempio Form2), vai nel codice nascosto del file Form2.Designer.vb e cambi la classe dalla quale eredita il form:
    codice:
    <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
    Partial Class Form2
        Inherits FormTemplate
    Il pregio di questa soluzione è che le modifiche effettuate in un secondo tempo sul form template si estendono automaticamente sui form che ereditano da esso. Il problema più evidente è che per vedere le modifiche apportate al template devi avviare e terminare l'applicazione.
    Chi non cerca trova.

  5. #5
    Originariamente inviato da tas
    Ok, ora va meglio

    Diciamo che non esiste un metodo progettato allo scopo, ma ti devi arrangiare con una soluzione estemporanea. Questo probabilmente perché MS, per motivi di usabilità, omogeneità ed integrazione con Windows, scoraggia l'adozione di interfacce "caserecce" che non utilizzino font e colori non standard. Esistono, a tal proposito, linee guida per lo sviluppo "conforme" delle interfacce in Windows Form (le trovi su MSDN).

    La strada più "terra terra" è quella di creare un form "template", personalizzarlo quanto basta, infine copiarlo tutte le volte che devi creare un nuovo form. Gli stili e le impostazioni applicate al form template devono essere definitivi prima di creare gli altri form; se decidi di cambiare qualcosa a metà dell'opera devi cambiare a mano ciascun form già creato.

    Una strada migliore potrebbe essere quella che ti dicevo nella risposta precedente: crei il form template e poi lo esporti mediante il menu "File\Export Template". Anche in questo caso, la modifica del template non si riversa automaticamente sui form già creati a partire da esso.

    Una soluzione ancora più elegante sfrutta l'ereditarietà della programmazione ad oggetti: crei il form "template", lo personalizzi. Crei un altro form nella maniera consueta (per esempio Form2), vai nel codice nascosto del file Form2.Designer.vb e cambi la classe dalla quale eredita il form:
    codice:
    <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
    Partial Class Form2
        Inherits FormTemplate
    Il pregio di questa soluzione è che le modifiche effettuate in un secondo tempo sul form template si estendono automaticamente sui form che ereditano da esso. Il problema più evidente è che per vedere le modifiche apportate al template devi avviare e terminare l'applicazione.

    Avevo provato questa soluzione, ma ho ricevuto un bell'errore in risposta, anche perché mi pare di capire che il metodo non è proprio immediato, non si può utilizzare qualsiasi form come template, ti restituirebbe un errore, ma credo che aggiungendo un progetto alla soluzione di tipo windows form control librari, si dovrebbe ottenere il template.
    Se hai qualche guida a portata di mano, ti sarei grato per il link :-)
    Intanto proverò, e nel caso trovo qualcosa di interessante condividerò volentieri.


    Un'altra cosa, riguardo la possibilità di avere una form "contenitore", cosa mi puoi suggerire?
    Mettiamo che io voglia gestire tutte le form da una sola form madre che ne carica i suoi contenuti all'interno, come potrei fare?
    Non mi sembra possibile che per caricare i contenuti di una form, devi sempre aprire una nuova finestra...ci deve essere un modo per fare tutto nella stessa form.

  6. #6
    Utilizzando l'ultimo metodo puoi ereditare da qualsiasi form. La prima volta che apri il form in design ti apparirà un errore. Per farlo scomparire basta avviare l'applicazione e chiuderla, le cose si sistemano da sole.

    Per i form "contenitore" forse ti riferisci alla tecnologia MDI (Multi Document Interface). Esiste l'apposito template "MDI Parent Form".
    Chi non cerca trova.

  7. #7
    Originariamente inviato da tas
    Utilizzando l'ultimo metodo puoi ereditare da qualsiasi form. La prima volta che apri il form in design ti apparirà un errore. Per farlo scomparire basta avviare l'applicazione e chiuderla, le cose si sistemano da sole.

    Per i form "contenitore" forse ti riferisci alla tecnologia MDI (Multi Document Interface). Esiste l'apposito template "MDI Parent Form".
    Se lancio la form funziona, ma mi viene restituito questo Warning che mi impedisce di vedere la form in fase di progettazione:

    codice:
    Warning	1	The designer could not be shown for this file because none of the classes within it can be designed.  The designer inspected the following classes in the file: 
    
    	FormAvvio --- The base class 'Project1.FormTemplate' could not be loaded.  Ensure the assembly has been referenced and that all projects have been built.		0	0

  8. #8
    Ho riprovato, l'errore esce identico al tuo. Chiudo tutti i form aperti; faccio partire l'applicazione poi la chiudo. Se riapro il form ereditato lo vedo in design mode correttamente, senza più errori.
    Chi non cerca trova.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.