Lettura dati da form2 a form1

di il
11 risposte

Lettura dati da form2 a form1

Salve mi sono approcciato a c# da meno di un mese ed ho un problema con la lettura dei dati contenuti in una form 2, dati che devono essere letti da tutte le form in particolare dalla form 1. la cosa funziona se la condizione è presente sulla from1 (la principale, per le altre form non ci sono problemi, ma se la condizione è presente sulle altre form dalla 1 non riesco a leggerla. Vi spiego meglio il problema, ho una serie di form e nella form principale ho inserito un programma che mi apre un form in cui devo scegliere il tipo di separatore decimale del sistema con RadioButton, che mi permette di scegliere "," o ".", nel caso in cui scelgo virgola ho due variabili sepDec1 = '.' e sepDec2 = ',', nel caso scelgo punto sepDec1 = ',' e sepDec2='.'(nella form2 ho creato una public form con la possibilità di effettuare la scelta). Queste due variabili sono usate poi per cambiare il valore del punto o virgola nella testo di una textBox con l'istruzione, es. textBox1.Text.Replace(sepDec1,sepDec2) .
in form 2
public void scelta_dec()
{
if (virgola_rb.Checked)
{
sepDec1 = '.';
sepDec2 = ',';
}

else
{
sepDec1 = ',';
sepDec2 = '.';
}
}

Ho inserito sepDec_f sDf = new sepDec_f(); all'esteno nella public partial class Form1 : Form in modo da essere vista in tutti i private void ed ho ho inserito il richiamo alla funzione scelta_dec() della from 2 (sceDec_f è il nome della from2) in tutti void necessari;
((sepDec_f)sDf).scelta_dec();

ho creato un pulsante che mi apre la form2 con le istruzioni seguenti
private void toolStripLabel1_Click(object sender, EventArgs e)
{
sepDec_f sDf = new sepDec_f(); //ho ripetuto queste istruzioni perchè altrimenti mi da errore System.ObjectDisposedException: 'Impossibile accedere a un oggetto eliminato. dopo il secondo click
sDf.def_tr = this;
sDf.Show();
}

Per scegliere il punto o la virgola.
Ma non funziona.

Ho provato allora ad creare nella from1 la funzione di scelta presente prima nella from2) lasciando sempre sepDec_f sDf = new sepDec_f();
e poi richiamo all'interno delle varie funzioni di form1 la funzione scelta_dec()
private void scelta_dec()
{
if (((sepDec_f)sDf).virgola_rb.Checked)
{
sepDec1 = '.';
sepDec2 = ',';
}

else
{
sepDec1 = ',';
sepDec2 = '.';
}
}

Così funziona ma per una sola scelta posso farla una sola volta alla seconda volta mi da errore errore System.ObjectDisposedException: 'Impossibile accedere a un oggetto eliminato. sul pulsate associato all'apertura della from

private void toolStripLabel1_Click(object sender, EventArgs e)
{
sDf.def_tr = this;
sDf.Show();
}

se qui inserisco il richiamo alla form2 sepDec_f sDf = new sepDec_f(); non i da più errore ma non funziona

chiedo cortesemente aiuto su come risolvere il problema ed in particolare se c'è un modo per far riconoscere le funzioni inserite nella from2 anche nelle altre form (come fatto nel primo caso dell'esempio che non funziona).
Grazie anticipate

11 Risposte

  • Re: Lettura dati da form2 a form1

    Usa i tag CODE per postare il codice. Purtroppo la tua spiegazione è piuttosto fumosa; ad ogni modo se vuoi mostrare una finestra per l'inserimento di un dato ti conviene scegliere una finestra modale, con ShowDialog(), dopodichè con il puntatore alla form vai a leggere le proprietà public che ti interessano.
  • Re: Lettura dati da form2 a form1

    Cerco di spiegarmi meglio e schematizzare ho una funzione personalizzata (che si chiama scelta_dec()) nella from2 (form 2 si chiama sepDec_f) , questa funzione personalizzata che mi permette di scegliere se ho scelto punto o virgola si apre dalla form1 (form1 si chiama def_semp_trave_f)

    In form 2 inserisco il riferimento a form1
     public def_semp_trave_f def_tr;
    in form2 ho la funzione scelta_dec()
     public void scelta_dec()
            {
                if (virgola_rb.Checked)
                {
                    sepDec1 = '.';
                    sepDec2 = ',';
                }
    
                else
                {
                    sepDec1 = ',';
                    sepDec2 = '.';
                }
            }
    apro dalla form 1 la form 2
    private void toolStripLabel1_Click(object sender, EventArgs e)
            {
                sDf.def_tr = this;
                sDf.ShowDialog();
                
            }
    scelgo tramite radioButton se prendere punto o virgola.
    ho comunque richiamato la funzione scelta_dec di form 2 nelle funzioni di form1
    ((sepDec_f)sDf).schelta_dec();
    il riferimento alla form2
    sepDec_f sDf = new sepDec_f();
    l'ho messo all'inizio per farlo leggere a tutti i void di form1

    faccio partire il programma e non funziona. Non ho capito cosa mi hai detto di puntare, visto che è quello che faccio
    e non funziona
  • Re: Lettura dati da form2 a form1

    Metti sepDec1 e sepDec2 come proprietà public di Form2; all'uscita di Form2 aggiorni queste due proprietà sulla base dello stato della checkbox.
    Da Form1 rientrato dalla chiamata a ShowDialog puoi accedere ai valori di sepDec1 e sepDec2.
  • Re: Lettura dati da form2 a form1

    Ho provato a rendere pubbliche le due variabili come detto ed inserire
      ((sepDec_f)sDf).scelta_dec();
    in form 1 ma continua a non funzionare
  • Re: Lettura dati da form2 a form1

    Ma perché devi richiamare scelta_dec()?
  • Re: Lettura dati da form2 a form1

    Perché li ho la funzione che mi assegna il valore alla variabili sepDec1 e sepDec2 che hanno valori `.` o ',' a seconda che siano selezionate o il radibutton virgolo o radiobutton punto (nella funzione scelta_dec c'è l'IF per la verica del radiobuton con l'assegnazione della variabile).
    Inoltre questa funzione vorrei richiamarla anche in altre due form, settandola falla form1, senza doverla richiamare direttamente con showdialog da un form3. Comunque se c'é un metodo migliore per settarla da una parte sola e semplicemente richiamandolo nelle altre form come fatto negli esempi precedenti.
  • Re: Lettura dati da form2 a form1

    Forse non ho capito bene (mi capita spesso non ti preoccupare) ma non puoi valorizzare dal Form1 una proprietà pubblica dei form secondari che andrai ad aprire passandogli lo stato del radiobutton?
    Quando apri la form2, che avrà una proprietà pubblica booleana "Punto" gli passi lo stato del radiobutton.
    Se è true setterari le tue variabili a "." e "," altrimenti "," e "." e nelle textbox della form 2 formatti come credi
  • Re: Lettura dati da form2 a form1

    Quindi non c'è possibilità dalle form secondarie di prendere dati che vengono settatiti da una form1 nella 2.

    Cerco di spiegarmi meglio ho tre form 1 e 2 e 3
    Nella form1 apro e setto i dati che poi rileggo nella 1
    Nella form3 prendi i dati che sono stati settati dall'apertura della form2 dalla form1
    e mi sembra di capire che questa cosa non è possibile

    quindi con c# non posso farmi una finestre (nello specifico la form2) per il settaggio delle opzioni del programma, che poi mi ritroverò in tutte le altre schede (form3, form4, ecc.), settaggio che faccio tramite finestra che apro dalla form principale (form1), cosa che avviene in molti software?

    che poi è essenzialmente quello che vorrei fare, settare il punto o la virgola richiamando una finestra e usare quel settaggio per tutte le altre.
  • Re: Lettura dati da form2 a form1

    Si può fare tutto. Ripeto, nella tua situazione non c'è alcun motivo per richiamare una funzione che va a leggere lo stato della checkbox: ti basta salvare tali valori all'uscita dalla form (Form2 se ho capito bene). Se vuoi rendere visibile queste info anche ad altre form create da Form1 salvati tali valori come proprietà di Form1 e passale alle Form sottostanti.
  • Re: Lettura dati da form2 a form1

    minis ha scritto:


    Quindi non c'è possibilità dalle form secondarie di prendere dati che vengono settatiti da una form1 nella 2.

    Cerco di spiegarmi meglio ho tre form 1 e 2 e 3
    Nella form1 apro e setto i dati che poi rileggo nella 1
    Nella form3 prendi i dati che sono stati settati dall'apertura della form2 dalla form1
    e mi sembra di capire che questa cosa non è possibile
    In che senso non è possibile? crei una proprietà public boolean in Form1 che esponga il valore del tuo radiobutton e te lo rileggi in tutti i form che aprirai ricordandoti di inviare come riferimento l'istanza del form chiamante o Form1 o form nel quale c'è il tuo radiobutton.
  • Re: Lettura dati da form2 a form1

    Grazie alle indicazioni di candaluar sono finalmente riuscito nell'intento.
Devi accedere o registrarti per scrivere nel forum
11 risposte