40 messaggi dal 10 aprile 2003
Ciao,
qualcuno conosce un modo per scrivere sulla ToolStripStatusLabel da una classe di in un altro progetto ?
Grazie
Modificato da Davide_Sangalli il 29 settembre 2017 16.04 -
10.289 messaggi dal 09 febbraio 2002
Contributi
Ciao Davide,

se la classe dell'altro progetto vuole scrivere direttamente sulla ToolStripStatusLabel, è necessario che gli passi il riferimento. Modifica il costruttore della classe affinché accetti un parametro di tipo ToolStripStatusLabel.

Comunque, sarebbe meglio tenere i due mondi della logica e della UI separati. Potresti fare in modo che la classe dell'altro progetto sollevi un evento per notificare che qualcosa è cambiato. Dal progetto della UI, gestisci tale evento con una funzione che aggiornerà la ToolStripStatusLabel.
In questo modo potrai riutilizzare l'altro progetto anche in diversi tipi di UI. Ad esempio potrai usarlo in un'applicazione Xamarin, che non possiede un controllo di tipo ToolStripStatusLabel.

Ecco la documentazione sugli eventi C#
https://docs.microsoft.com/en-us/dotnet/standard/events/

ciao,
Moreno

Enjoy learning and just keep making
40 messaggi dal 10 aprile 2003
Ciao BrightSoul,

Ti ringrazione di avermi risposto,
in realtà vorrei utilizzare una funzione di callback con passaggio di parametri per utilizzarla per svariati usi (ToolStripStatusLabel, logging ....).
Hai qualche esempio/link da passarmi ?

Grazie
10.289 messaggi dal 09 febbraio 2002
Contributi
Ciao Davide, non sono sicuro di aver capito ma provo a risponderti.


in realtà vorrei utilizzare una funzione di callback con passaggio di parametri

Quindi tu vuoi realizzare una classe che, quando è il momento di segnalare qualcosa, si affidi ad un delegato che le è stato passato come argomento del costruttore.

Esempio della suddetta classe:
public class MyClass {
  private readonly Action<string> textWriter;
  public MyClass(Action<string> textWriter) {
    this.textWriter = textWriter;
  }

  private MyMethod() {
    //Devo segnalare qualcosa, quindi invoco il delegato
    textWriter.Invoke("MyMethod was invoked");
  }
}


Ora, dall'altro progetto (quello della UI) usa la classe così:
Action<string> writeToToolStripStatusLabel = text => {
  //Ogni qualvolta MyClass deve segnalare qualcosa, invocherà questa action.
  //Nel corpo di questa action, uso il parametro text che mi viene passato
  //per copiarlo sulla proprietà Text della toolStripStatusLabel
  toolStripStatusLabel1.Text = text;
};
//Istanzio la classe
var myObject = new MyClass(writeToToolStripStatusLabel);


Ecco delle info e degli esempi sulle Action.
https://msdn.microsoft.com/it-it/library/018hxwa8(v=vs.110).aspx

ciao,
Moreno
Modificato da BrightSoul il 04 ottobre 2017 18.52 -

Enjoy learning and just keep making
40 messaggi dal 10 aprile 2003
Ciao BrightSoul

Mettendo nel MDIForm il seguente codice

Action<string> writeToToolStripStatusLabel = text => {
//Ogni qualvolta MyClass deve segnalare qualcosa, invocherà questa action.
//Nel corpo di questa action, uso il parametro text che mi viene passato
//per copiarlo sulla proprietà Text della toolStripStatusLabel
toolStripStatusLabel1.Text = text;
};

sulla linea toolStripStatusLabel1.Text = text; mi da il seguente errore "Un Inizializzatore di campo non può fare riferimento alla proprietà, al metodo o al campo non statico FormMDI.toolStripStatusLabel1
10.289 messaggi dal 09 febbraio 2002
Contributi
Ciao Davide,
valorizza il campo privato writeToTooltipStatusLabel dal costruttore del form.

Prima definisci il campo (ma non lo valorizzi):
private readonly Action<string> writeToToolStripStatusLabel;


Poi nel costruttore lo valorizzi
public TuoForm() {
  writeToToolStripStatusLabel = text => {
    toolStripStatusLabel1.Text = text;
  };
}


ciao,
Moreno

Enjoy learning and just keep making
40 messaggi dal 10 aprile 2003
Perfetto ! Funziona !
Grazie Moreno!!!

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.