2010-04-14 4 views
0

J'ai joué avec des délégués essayant d'apprendre et j'ai rencontré un petit problème en espérant que vous puissiez m'aider.Utilisation d'un délégué pour remplir une liste de sélection

class myClass 
{ 
    OtherClass otherClass = new OtherClass(); // Needs Parameter 
    otherClass.SendSomeText(myString); 
} 

class OtherClass 
{ 
    public delegate void TextToBox(string s); 

    TextToBox textToBox; 

    public OtherClass(TextToBox ttb) // ***Problem*** 
    { 
     textToBox = ttb; 
    } 

    public void SendSomeText(string foo) 
    { 
     textToBox(foo); 
    } 
} 

la forme:

public partial class MainForm : Form 
    { 
    OtherClass otherClass; 

    public MainForm() 
    { 
     InitializeComponent(); 
     otherClass = new OtherClass(this.TextToBox); 
    } 

    public void TextToBox(string aString) 
    { 
     listBox1.Items.Add(aString); 
    } 

} 

Évidemment, cela ne marche pas parce que le constructeur compilez AutreClasse recherche TextToBox comme paramètre. Comment recommanderiez-vous de contourner le problème afin que je puisse obtenir un objet de myClass dans la zone de texte dans le formulaire?

Répondre

2

Vous pouvez modifier les AutreClasse à quelque chose comme

class OtherClass 
{ 
    public delegate void TextToBox(string s); 

    TextToBox textToBox; 

    public OtherClass() 
    { 
    } 
    public OtherClass(TextToBox ttb) // ***Problem*** 
    { 
     textToBox = ttb; 
    } 

    public void SendSomeText(string foo) 
    { 
     if (textToBox != null) 
      textToBox(foo); 
    } 
} 

Mais je ne suis pas tout à fait sûr de ce que vous souhaitez achive avec

class myClass 
{ 
    OtherClass otherClass = new OtherClass(); // Needs Parameter 
    otherClass.SendSomeText(myString); 
} 
+1

je vraiment avoir beaucoup de contrôle sur myClass. C'est un flux Im recevant via API. Je ne sais pas pourquoi je n'ai pas pensé à ajouter un autre constructeur. –

Questions connexes