Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [C#] Problema proprietà e scelta su lista

    Buongiorno vi pongo un problema che non riesco a venirne fuori sicuramente per una mia carenza di programmazione.

    Io ho un Form1 di menù, dove ho un bottone di SelezionePersonaggio, questo bottone mi riporta a un'altro Form dove io seleziono il PG da una lista e poi confermo, ricevo un messaggio di avvenuta selezione e poi devo chiudere il form. Quando ritorno al form di menù la proprietà : SceltaPersonaggio, mi risulta "null"!!! come posso fare???
    Vi posto un pò di codice :

    Codice PHP:
    //questa è una classe dove sistemo tutte le proprietà dei Personaggi ed eventuali proprietà
    class DataManagerPG
        
    {
            private 
    string _personaggioSelezionato;
            public 
    string PersonaggioSelezionato
            
    {
                
    get { return _personaggioSelezionato; }
                
    set _personaggioSelezionato value; }
            }

            public 
    string Guerriero "Guerriero";
        }

    public 
    partial class SceltaPersonaggio Form //questo è il form della scelta del personaggio
        
    {
            
    DataManagerPG pg = new DataManagerPG();

            List<
    stringListaPg = new List<string>(); //creato la lista dei possibili personaggi

            
    public SceltaPersonaggio()
            {
                
    InitializeComponent();
                
    ListaPg.Add(pg.Guerriero);
                foreach (
    string nomi in ListaPg)
                {
                    
    lstSceltaPersonaggio.Items.Add(nomi);
                }
            }
            private 
    void btnConfermaSceltaPG_Click(object senderEventArgs e)
            {
                
    pg.PersonaggioSelezionato = (string)lstSceltaPersonaggio.SelectedItem;
                if (
    pg.PersonaggioSelezionato == null)
                    
    MessageBox.Show("Non è stato selezionato nessun personaggio");
                else
                    
    MessageBox.Show("Hai selezionato il: " pg.PersonaggioSelezionato.ToString());

            } 
    Poi chiudo il form, ma una volta che ripasso al form iniziale PersonaggioSelezionato mi diventa "null"

    Codice PHP:
    //form del menù iniziale!
            
    DataManagerPG pg = new DataManagerPG();

            public 
    frmMenuIniziale()
            {
                
    InitializeComponent();
            }

            private 
    void btnNuovaPartita_Click(object senderEventArgs e)
            {
                if (
    pg.PersonaggioSelezionato  == null//pg.PersonaggioSelezionato mi diventa null
                    
    MessageBox.Show("Non hai selezionato nessun personaggio per iniziare l'avventura!");
                else
                {
                    
    FrmContinua = new Battle();
                    
    this.Close();
                }
            } 
    Non riesco a venirne fuori, spero vivamente che non sia una cavolata perchè mi sono scervellato un paio di ore.. Grazie

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ma quante volte hai scritto questa linea

    DataManagerPG pg = new DataManagerPG();

    ?

    Qual è il form di tipo DataManagerPG che effettivamente usi?

    Dove apri il form ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Il DataManagerPG è solamente una classe che contiene tutti i parametri e i metodi che mi serviranno successivamente.

    DataManagerPG pg = new DataManagerPG();

    l'ho istanziata nel form del menù iniziale, e nel form scelta personaggio
    (come da esempio)

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Dato che utilizzi

    pg.PersonaggioScelto

    non capisco a quale dei due pg fai riferimento dopo la scelta.

    Perché è istanziata due volte?

    P.S. Tu forse hai chiaro tutto il codice ma noi no e dal poco che mostri c'è un po' di confusione ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Da quello che sto iniziando a capire l'errore deriva dal fatto che ho istanziato 2 volte l'oggetto DataManagerPg sia nel Form di Menù che in quello SceltaPersonaggio

    Ma non posso utilizzare il PersonaggioScelto nel form Menù e nel form SceltaPersonaggio se non lo istanzio!

    Posso in qualche modo avere un singolo oggetto, che viene condiviso da entrambe le Form?

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Per risponderti bisognerebbe avere chiara la gerarchia e il contenuto delle classi che hai scelto per il tuo programma.

    Probabilmente puoi fare diversamente, in ogni caso ogni classe può contenere un membro che faccia riferimento ad un oggetto di un'altra e puoi settare questo riferimento per permettere alla seconda classe di usare un oggetto della prima.

    Ma tutto dipende, come ti dicevo, dalla struttura del tuo codice ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Ma la struttura è la seguente:

    questa è una classe dove sistemo tutte le proprietà dei Personaggi ed eventuali variabili.
    Codice PHP:
    class DataManagerPG 
        

            private 
    string _personaggioSelezionato
            public 
    string PersonaggioSelezionato 
            

                
    get { return _personaggioSelezionato; } 
                
    set _personaggioSelezionato value; } 
            } 

            public 
    string Guerriero "Guerriero"
        } 
    Il programma parte con un menù in wfrm, dove abbiamo 2 bottoni : Nuova Partita e Selezione Personaggio. Premendo su SelezionePersonaggio si aprirà un secondo Form di selezione:

    Codice PHP:
     //questo è il form iniziale con i 2 tasti
            
    private void btnNuovaPartita_Click(object senderEventArgs e)
            {
                
    DataManagerPG pg = new DataManagerPG();
                if (
    pg.PersonaggioSelezionato  == null)
                    
    MessageBox.Show("Non hai selezionato nessun personaggio per iniziare l'avventura!");
                else
                {
                    
    FrmContinua = new Battle(); //qui mi parte il gioco con la battaglia!
                    
    this.Close();
                }
            }

            public 
    Form FrmContinua
            
    getset; }

            private 
    void btnSelezionePersonaggio_Click(object senderEventArgs e)
            {
                
    SceltaPersonaggio frmSceltaPersonaggio = new SceltaPersonaggio();
                
    frmSceltaPersonaggio.ShowDialog();
            } 
    Codice PHP:
    //e questo è il codice del form di SelezionePersonaggio
            
    DataManagerPG pg = new DataManagerPG();

            List<
    stringListaPg = new List<string>(); //creato la lista dei possibili personaggi

            
    public SceltaPersonaggio()
            {
                
    InitializeComponent();
                
    ListaPg.Add(pg.Guerriero);
                foreach (
    string nomi in ListaPg)
                {
                    
    lstSceltaPersonaggio.Items.Add(nomi);
                }
            }

            private 
    void btnConfermaSceltaPG_Click(object senderEventArgs e)
            {
                
    pg.PersonaggioSelezionato = (string)lstSceltaPersonaggio.SelectedItem;
                if (
    pg.PersonaggioSelezionato == null)
                    
    MessageBox.Show("Non è stato selezionato nessun personaggio");
                else
                    
    MessageBox.Show("Hai selezionato il: " pg.PersonaggioSelezionato.ToString());

            } 
    Nel menù iniziale ovviamente se uno clicca NUOVA PARTITA gli comparirà un messaggio di errore se non avrà scelto nessun personaggio con cui iniziare.
    ps: Nel form di selezione personaggio momentaneamente c'è solo una possibilità di scelta, solo il Guerriero.

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Prima di tutto non capisco perché non hai una classe

    Personaggio

    e perché chiami la classe DataManagerPG in questo modo.

    A parte questo, l'oggetto pg che istanzi nel form di selezione non è "visibile" in alcun modo al form chiamante e quando lo controlli, non fai altro che testare un'altra istanza creata nel menu, che nulla ha a che vedere con quello usato nella selezione.

    Insomma, utilizzi diversi oggetti credendo che sia lo stesso e questo è classico di chi non ha chiari i concetti della OOP e programma come se si fosse ancora con un linguaggio classico ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Originariamente inviato da oregon
    Prima di tutto non capisco perché non hai una classe

    Personaggio

    e perché chiami la classe DataManagerPG in questo modo.

    A parte questo, l'oggetto pg che istanzi nel form di selezione non è "visibile" in alcun modo al form chiamante e quando lo controlli, non fai altro che testare un'altra istanza creata nel menu, che nulla ha a che vedere con quello usato nella selezione.

    Insomma, utilizzi diversi oggetti credendo che sia lo stesso e questo è classico di chi non ha chiari i concetti della OOP e programma come se si fosse ancora con un linguaggio classico ...
    Beh l'errore l'ho capito.. come detto all'inizio ho alcune carenze nel linguaggio ad oggetti.
    Come posso istanziare un solo oggetto DataManagerPG e condividere tale istanza tra i form??

    ps: senza rendere l'oggetto DataManagerPG statico.

  10. #10
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    bhè si, ci sono dei non-sense nel codice e anche secondo me non hai "modellato" bene il problema... però per rispondere alla domanda:
    nella classe SceltaPersonaggio devi metterci un costruttore che accetti in input un istanza della classe DataManagerPG. Questo è uno dei modi classici con cui in oop le classi si scambiano i dati.

    Finstra principale
    codice:
    DataManagerPG pg = new DatamanagerPG();
    
    SceltaPersonaggio frmSceltaPersonaggio = new SceltaPersonaggio(pg); 
    frmSceltaPersonaggio.ShowDialog();
    classe SceltaPersonaggio
    codice:
    private DataManagerPG pg;
    
    public SceltaPersonaggio(DataManagerPG pg)
    {
      this.pg = pg; //ora la variabile private pg punta all'oggetto pg del form principale: sono la stessa "cosa"
    }

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.