2009-04-04 7 views
0

Le but est d'informer l'utilisateur à l'aide du mémo lorsqu'un paquet est reçu/envoyé dans un client TCP. L'ancien code était extra muet, j'ai utilisé un minuteur qui avait l'habitude d'ajouter du texte dans le mémo puisque le minuteur a accès aux membres du formulaire, lol.Accéder à des membres de formulaire d'une autre classe

L'ancien code:

//Memo.Text += txt + "\n"; 

Je jouais avec aujourd'hui, ce que je l'ai fait

Dans la classe de Form1

public string TextValue 
{ 
    get 
    { 
     return Memo.Text; 
    } 

    set 
    { 
     this.Memo.Text += value + "\n"; 
    } 
}  

J'appelle le code comme ça:

Form1 myForm = new Form1(); 
myForm.TextValue = "test asdasd"; 

Le mémo mo Difiers sont privé, mais ce n'est pas le problème.

Le problème est qu'aucun texte n'est affiché sur le mémo lorsque j'appelle le code.

Répondre

7

En tapant ceci:

Form1 myForm = new Form1(); 

vous créez une nouvelle instance de votre formulaire (Form1), mais je suppose que vous devez utiliser instance existante qui le plus probable a été initialisé déjà.

L'une des façons de le faire:

var form = Form.ActiveForm as Form1; 

if (form != null) 
{ 
    form.TextValue = "test asdasd"; 
} 

Bien que ce n'est pas très bonne conception. Essayez plutôt d'utiliser le code events personnalisé.

+0

Bonne question - J'ai trouvé de nouvelles sources aujourd'hui. –

0

En supposant que Memo hérite de Control et en supposant que vous le définissiez avec le modificateur approprié, le problème que vous pouvez rencontrer est que vous essayez probablement de définir le texte à partir d'un thread de travail (celui utilisé pour exécuter le TCP client). Si c'est le cas, alors vous devez vérifier le champ InvokeRequired de votre contrôle et si vrai appelez un délégué qui va définir le texte pour vous. Voici un court et facile extrait de code C#:

private void SetTextOnMemo(string txt){ 
    if(Memo.InvokeRequired){ 
     Memo.Invoke(SetTextOnMemo, txt); 
    } 
    else{ 
     Memo.Text = txt; 
    } 
} 
1

Vous devriez peut-être envisager de publier un événement dans votre tcpclient. Votre formulaire pourra alors écouter cet événement et afficher les informations appropriées.

Questions connexes