2009-04-04 28 views
0

TCPクライアントでパケットを送受信するときに、メモを使用してユーザーに通知することが重要です。 古いコードは特別なものではありませんでした。タイマーはフォームメンバーlolにアクセスできるので、メモにテキストを追加するために使用したタイマーを使用しました。別のクラスからのフォームメンバーへのアクセス

古いコード:今日はそれで遊ん

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

が、これは私がそのようなコードを呼び出すForm1のクラス

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

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

をやったものです。

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

メモdifiersはプライベートですが、それは問題ではありません。

問題は、コードを呼び出すときにメモにテキストが表示されないことです。これを入力して

答えて

7

Form1 myForm = new Form1(); 

はあなたのフォーム(Form1)の新しいインスタンスを作成しますが、代わりに私はあなたが最も可能性が高い、すでに初期化されている既存のインスタンスを使用する必要がありますね。それを行うための方法の

ワン:

var form = Form.ActiveForm as Form1; 

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

これは非常に良いデザインではないですけど。代わりにカスタムeventsを使用してみてください。

+0

良い質問 - 今日は新しい情報源がいくつか見つかりました。 –

0

メモがコントロールから継承し、適切な修飾子を使用して設定されていると仮定すると、問題が発生する可能性があります。TCPを実行するために使用されるワーカースレッドクライアント)。その場合、コントロールのInvokeRequiredフィールドをチェックし、trueの場合はテキストを設定するデリゲートを呼び出す必要があります。 以下は、簡単で簡単なC#のスニペットです。

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

おそらく、あなたのtcpclientにイベントを発行することを検討するべきです。あなたのフォームはこのイベントを聞いて適切な情報を表示することができます。

関連する問題