Form C#

di il
17 risposte

Form C#

Salve a tutti,forse il problema che vi illustrerò sarà banale(anche per me lo era),però poi quando c'è l'ho avuto di fronte non è stato così,almeno per me eh,ovvio.
Il problema è il seguente:

io ho due form, la prima in cui c'è una text box , poi c'è un button in cui al click conduce al secondo form. In quest'ultimo dalla tavolozza di windows si può scegliere il colore del testo della text box del primo form, il problema è: come faccio a collegare il colore scelto dalla tavolozza(nella 2 form) con il testo della text box(nel 1 form)?

vi ringrazio per la disponibilità
il linguaggio è C#.NET

Se avete bisogno di un pò di codice, chiedete , non l'ho inserito perché mi sembra inutile, penso sia più un problema logico che di codice

17 Risposte

  • Re: Form C#

    Basta fare riferimento a nomeForm.nomeOggetto.Proprietà.

    Es. per cambiare dal secondo form la proprietà foreColor del textbox nel primo form, nel caso tu stia usando un colordialog:
    
    Form1.TextBox1.ForeColor = ColorDialog1.Color
    
  • Re: Form C#

    Ciao dna_programmer,
    La risposta di luciusinfabula è corretta, però volevo fare una nota.

    Se il form2 agisce sul form1 (ad esempio scrivendo form1.qualcosa=valore) il form2 diventa specifico per modificare il form1, e non puoi ad esempio richiamarlo da un altro form.

    Un disegno migliore è fare che sia il form chiamante a prelevare il valore:
    
    // qui siamo nel form1
    Form2 f2 = new Form2();
    DialogResult result = f2.ShowDialog();
    if (result = DialogResult.OK)
    {
        mioCampo = f2.MioValore;
    }
    f2.Dispose();
    
    In questo modo il form2 può essere utilizzato da qualsiasi form.
  • Re: Form C#

    Ineccepibilmente ineccepibile.
  • Re: Form C#

    Ciao,scusate se ho risposto tardi ma in questo periodo ho problemi ad internet.
    Allora ho capito il passaggio, ma ho, come al solito , domande da farvi:

    1)questa sintassi, "Form1.TextBox1.ForeColor = ColorDialog1.Color", non va contro il principio della OOP, cioè l'information hiding, poichè TextBox1 è private?

    2)Come faccio ad accedere a una"variabile" (textbox1) se non creo l'oggetto(form1 finestra=new form1(); finestra.textbox1 ) ?
  • Re: Form C#

    Ciao dna_programmer

    1) Assolutamente si, se adotti questa soluzione dovresti prevedere in Form1 un metodo SetColor da richiamare da Form2, comunque come ti dicevo questa soluzione è poco elegante perchè crea un legame inutile tra Form2 e Form1, è meglio che sia Form1 a prelevare il valore.

    2) Quando richiami il Form2 ti trovi all' interno di una istanza di Form1, per cui è gia stato istanziato. Quindi al Form2 due potresti passare il this di Form1, oppure potresti usare le variabili globali, ma so già che non faresti mai una cosa cosi brutta.
  • Re: Form C#

    Salve gentili,

    Barba che ne pensi di questa soluzione (l'ho buttata giù in vb.net):

    1) nel form1 lancio il form2 passandogli come owner se stesso:
    
            Form2.ShowDialog(Me)
            Form2.Dispose()
    
    2) nel form2 ponendo che ci sia un oggetto ColorDialog:
    
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim c As DialogResult = ColorDialog1.ShowDialog()
            If c = DialogResult.OK Then
                ' Cambio la proprietà backColor dell'owner di form2
                Me.Owner.BackColor = ColorDialog1.Color
            End If
    End Sub
    
    ciao a tutti.
  • Re: Form C#

    Per quanto riguarda la sintassi "Form1.TextBox1.ForeColor = ColorDialog1.Color" il compilatore non mi dovrebbe dare errore poichè textbox1 è privata?
    Inoltre questo tipo di sintassi è un esclusiva .NET , oppure è una caratteristica OOP?
  • Re: Form C#

    Ciao luciusinfabula,
    La soluzione è corretta e l' idea di usare l' Owner è una buona idea.

    Ciao dna_programmer,
    si per defalt TextBox1 è privato, però se vuoi puoi renderlo pubblico (anche se è una brutta cosa).

    La sintassi A.b.c = K.h; è la normale sintassi di un linguaggio OOP in cui i vari termini sono o Menbri o Property (non tutti i linguaggi supportano le property, ad esempio in C++ non ci sono).
  • Re: Form C#

    Ciao a tutti, scusate se sono ottuso(ormai barba lo sa da tempo ), sempre per quanto riguarda la sintassi "Form1.TextBox1.ForeColor = ColorDialog1.Color" non riesco a capire una cosa:

    Perchè io accedo a TextBox1 di form1 come se TextBox1 fosse una variabile statica, e non dichiarando un oggetto di tipo form1 e poi accedendo a textbox1?
  • Re: Form C#

    Altola! Nella foga della discussione è stato trascurato questo dettaglio che genera confusione. Negli esempi precedenti Form1.Qualcosa è da intendersi come variabile di tipo Form1 e nome Form1 (lo sò che è una cosa orribile, ma ci è scappata), il linguaggio non lo vieta, tu puoi scrivere:
    
    Form1 Form1 = new Form1();
    
    Non è bello ma si può. Prometto che non lo farò mai piu!
  • Re: Form C#

    A ecco, ora ritorna tutto, "Form1.TextBox1.ForeColor = ColorDialog1.Color", in questo caso Form1 non è la classe ma il nome dell'oggetto form1 di tipo form1.
    Mi viene spontanea un'altra domanda:
    dove viene dichiarato?
  • Re: Form C#

    Da nessuna parte, negli esempi ci è scappata dentro senza pensarci. Però mi pare che una volta nelle versioni precedenti del VisualStudio venisse istanziata in automatico, forse è per questo che la abbiamo usata, però non ne sono sicuro dovrei controllare.
  • Re: Form C#

    Cioè scusa non ho capito, se noi usiamo un oggetto Form1 come fa a non essere dichiarato da nessuna parte?
  • Re: Form C#

    Negli esempi si suppone che da qualche parte sia stato assegnato, anche se nell' esempio non lo abbiamo mai scritto esplicitamente. E mi pare che una volta ci fosse la creazione in automatico di una variabile col nome del form (ma forse mi confondo con altri linguaggi) è per questo che quando l' ho vista non me ne sono preoccupato.
Devi accedere o registrarti per scrivere nel forum
17 risposte