n° 219
Novembre 2017
Dicembre 12, 2017, 02:24:25 *
Benvenuto! Accedi o registrati.
Hai dimenticato l'e-mail di attivazione?

Accesso con nome utente, password e durata della sessione
Notizia:
 
   Indice   Linux Windows Techassistance Gameassistance videogame hardware Aiuto Ricerca Agenda Downloads Accedi Registrati  


* Messaggi recenti
Messaggi recenti
Pagine: [1]   Vai giù
  Stampa  
Autore Discussione: [RISOLTO] Andare a capo in una TextBox  (Letto 1230 volte)
0 utenti e 1 Utente non registrato stanno visualizzando questa discussione.
DavideV
Newbie
*

Karma: +0/-0
Scollegato Scollegato

Messaggi: 7


Mostra profilo E-mail
« inserita:: Maggio 23, 2017, 11:30:08 »

Buongiorno a tutti,

la situazione è questa: devo riempire una TextBox con del testo che deve andare a capo arbitrariamente, e non ci sarebbe nulla di strano se non che il testo lo si decide tramite un evento che si trova in una classe a parte.

Ho provato a inserire "\n" nella stringa risultante ma semplicemente lo ignora; le linee guida di MSDN a tal proposito consigliano di usare il metodo NewLine, solo che dal publisher dell'evento non ho giustamente accesso all'istanza della TextBox.

Come posso fare?

Propongo un estratto del mio codice:
Codice:
// codice della classe nell'assembly "Controller.cs"
public class Controller
{
    public class RapportoFinaleEventArgs : EventArgs
    {
        private string _rapporto;

        public RapportoFinaleEventArgs(string _valore)
        {
            _rapporto = _valore;
        }

        public string Rapporto
        {
            get { return _rapporto; }
        }
    }

    // pubblicazione evento rapporto finale
    public event EventHandler<RapportoFinaleEventArgs> RaiseRapportoFinale;

    protected virtual void OnRapportoFinale(string Rapporto)
    {
        EventHandler<RapportoFinaleEventArgs> handler = RaiseRapportoFinale;
        if (handler != null)
        {
            RaiseRapportoFinale(this, new RapportoFinaleEventArgs(Rapporto));
        }
    }

    public void Verifica()
    {
        List<string> Ricevute = new List<string>();
        List<string> Ritardatari = new List<string>();
        string elencoRitardatari;

        // codice per popolare le variabili

        if (Ritardatari.Count > 0)
        {
            rapportoFinale = "Rapporto finale:\nn. " + Ricevute.Count + " attestazioni ricevute.\nn. "
                + Ritardatari.Count + " reparti mancanti: \n " + elencoRitardatari;
        }
        else
        {
            rapportoFinale = "Rapporto finale: attestazioni complete.";
        }

        OnRapportoFinale(rapportoFinale);
    }    
}

// codice del form nell'assembly "frmMain.cs"
namespace Attestazioni
{
    public partial class frmMain : Form
    {
        // gestore dell'evento di rapporto finale
        void RapportoFinale(object sender, Controller.RapportoFinaleEventArgs Valore)
        {
            txtRapporto.Text = Valore.Rapporto;
        }

        private void btnAvvioControllo_Click(object sender, EventArgs e)
        {
            // sottoscrizione
            Controller controller = new Controller();
            controller.RaiseRapportoFinale += RapportoFinale;

            // codice per l'esecuzione del corpo principale del programma, tra cui la chiamata al metodo Verifica()
        }
    }
}

Potrei girarci intorno trasformando il metodo da void a string, così potrei assegnare il valore direttamente alla TextBox tramite callback - ed effettivamente se la cosa va troppo per le lunghe sono propenso a fare così - però a questo punto mi sono incaponito e vorrei cercare di capire come risolvere mantenendo l'evento, magari anche per un futuro.

Grazie dell'attenzione,
Davide.
Registrato
oregon
Jr. Member
**

Karma: +22/-6
Scollegato Scollegato

Messaggi: 239


Mostra profilo
« Risposta #1 inserita:: Maggio 23, 2017, 01:50:33 »

Non ho capito se hai usato il NewLine o no ...

string s = "xxx" + System.Environment.NewLine + "yyy";
Registrato
DavideV
Newbie
*

Karma: +0/-0
Scollegato Scollegato

Messaggi: 7


Mostra profilo E-mail
« Risposta #2 inserita:: Maggio 23, 2017, 02:27:00 »

Stavo per rispondere ma mi hai battuto sul tempo! Sorriso

In effetti stavo per dire proprio questo, che dapprima ho risolto creando una nuova classe che ho sostituito al posto del tipo string nella derivata di EventArgs, in questa classe c'erano i dati che mi servivano che ho poi mandato come dati all'evento. Insomma una complicazione inutile, dato che poi mi sono accorto che NewLine non ha bisogno di un'istanza della classe TextBox.

Mea culpa per non aver approfondito il metodo, insomma. Grazie della risposta, +1 comunque Sorriso

Davide.
Registrato
oregon
Jr. Member
**

Karma: +22/-6
Scollegato Scollegato

Messaggi: 239


Mostra profilo
« Risposta #3 inserita:: Maggio 23, 2017, 09:37:56 »

Di nulla ... comunque la costante per Windows è \r\n quindi sarebbe bastato

string s = "xxx\r\nyyy\r\nzzz";
Registrato
Pagine: [1]   Vai su
  Stampa  
 
Vai a:  

Copyright © 2017 Edizioni Master SpA. p.iva : 02105820787

Tutti i diritti di proprietà letteraria e artistica riservati. - Privacy



powered by Simple Machines