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

    [C#] Aprire Il Form Soltanto Una Volta

    Ciao,

    Ho un form principale con la proprietà IsMDIContainer true, e dentro tramite menù ed altre form, si aprono altre form...

    Vorrei fare in modo di tenere che se il form chiamato è già aperto non si apra nuovamente, ma si sposti il focus su di lui....


    Qualche consiglio si come fare?


    Io avevo pensato di aprire tutte le form e renderle invisibili, e di richiamare la proprietà Visible su true... però in questo modo mi smebra di sprecare memoria, e poi le form non si aggiornerreberò mai, perchè restsrebbero sempre aperte, e quindi non verranno ami richiamati i costruttori, eventi loadd, ecc....


    Grazie

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Quando apri un qualsiasi Form, devi prima crearne un'istanza, se non esiste già, e successivamente invocare il metodo Show.

    Quando crei un'istanza del Form, memorizzi il riferimento all'oggetto creato all'interno di una variabile.

    Supponendo che tu apra la finestra in questione da una voce di menu o un pulsante situato nella finestra principale del programma, in cui probabilmente risiede anche il codice necessario all'apertura, ti basta inserire nella classe del suddetto form principale un campo che contenga il riferimento alla finestra secondaria.

    Il riferimento alla finestra secondaria è, inizialmente, impostato a null.

    Quando crei l'istanza della finestra secondaria con new, memorizza il riferimento nel campo appena descritto; quando tale campo è diverso da null, quindi, significa che il Form è stato creato e quindi puoi provvedere a visualizzarlo senza crearne uno nuovo.

    Ovviamente, dovrai fare in modo che dalla finestra secondaria sia possibile invocare un metodo o accedere al campo del form principale affinché tale riferimento venga posto nuovamente a null quando la finestra secondaria viene chiusa, affinché il form principale provveda a crearne una nuova istanza, trovando il riferimento a null, quando è necessario visualizzare nuovamente il Form.

    Comprendo che il discorso è espresso in termini teorici, ma non ho il tempo di stendere codice.

    Tuttavia, se ci sono termini non chiari o passaggi oscuri, basta chiedere e risponderò il prima possibile.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Ho adottato questa soluzione:


    in ogni form che dovrà essere inserità nel MdiContainer ho inserito una variabile statica privata, che sarà inizialiazzata ad 1 nel costruttore, e grazie ad una proprietà pubblica sarò in grado di ricevere il valore, che in questo caso: 1 = form aperta


    Naturalmente ho inserito un codice che riporta la variabile a 0 ogni qualvolta la form sarà chiusa...



    Poi in ogni menù e form secondarie farò riferimento a questa variabile statica per sapere se esiste una form aperta oppure no. Se è aperta la richiamo con Active(), altrimenti procedo a instanziarla nuovamente...
    Questo richiesto a farlo però nella form principale (quella MDIContainer) sono dichiarate tutte le form secondarie, e grazie a quello riesco a richiamare i loro metodi...

    Per adesso queste variabili sono Public, e non è bene, infatti adesso vedo di portarle private e di fornire un'interfaccia public per gestire quei comandi di cui ho bisogno...


    Che cosa ne pensate di questa soluzione?


    PS: Tuttosommato, mi sembra molto simile alla soluzione presentata sopra no?

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da SkOrPiOn`87
    Che cosa ne pensate di questa soluzione?
    PS: Tuttosommato, mi sembra molto simile alla soluzione presentata sopra no?
    No, è del tutto diversa. Io non ho parlato di variabili statiche da inserire in ciascun Form, anche perché non si faceva riferimento ad altri Form secondari tranne uno, né ho specificato la necessità da parte del Form principale di ispezionare proprietà statiche di altri Form.

    Ad ogni modo, se la tua soluzione si comporta come si deve, procedi pure.

    Secondo me, però, il problema di questi quesiti è sempre e solo uno: si usano classi, oggetti, membri senza conoscere a fondo la programmazione ad oggetti e la creazione di architetture basate questo paradigma.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Si, funziona come deve...


    Vero anche, che il mio problema sta tutto nella programmazione ad oggetti... (qualche consiglio come libro o qualcosa del genere per approfondire meglio la programmazione ad oggetti?)



    Grazie

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.