私はメインフォームといくつかのクラスを持つC#.netのアプリケーションを持っています。
これらのクラスの1つは、ネットワークから着信データメッセージを受信します。
これらのメッセージのテキストを、MainFormの複数行のテキストボックスに追加する必要があります。
メソッドを静的にすることによってMainFormのメソッドにメッセージを送信できますが、静的メソッドはMainFormのコントロールにアクセスできません。C#.NETでは、静的メソッドからコントロールにアクセスするにはどうすればよいですか?
TheIncomingDataClass.cs
namespace TheApplicationName
{
class TheIncomingDataClass
{
public void IncomingMessage(IncomingMessageType message)
{
TheApplicationName.MainForm.ReceiveMSG(message);
}
MainForm.cs
public static void ReceiveMSG(string message)
{
txtDisplayMessages.AppendText(message); //This line causes compile error
}
コンパイルエラー:
オブジェクト参照が非静的フィールド、メソッド、またはプロパティ「のために必要とされるTheApplicationName.MainForm.txtDisplayMessages '
何か助けていただければ幸いです。
私はまだかなりのC#初心者ですので、説明してください。
メソッドからstaticキーワードを削除すると、もはやIncomingDataクラスから呼び出すことができなくなります。私はあなたが「そのオブジェクトのその特定のインスタンスによって呼び出される」ということを理解していません。さらに説明できますか?私はこれらのメッセージを受け取ったら直ちにテキストボックスに送信する必要があることを覚えておいてください。イベントはメッセージの受信になります。ありがとう。 – timmyg
MainFormで呼び出すのは静的なので、私は推測します。 ReceiveMSG()[または単にReceiveMSG()]。 Instanceを作成するには、MainFormの特定のインスタンス(MainForm mf = new MainForm()など)から呼び出す必要があります。その後、それをmfと呼ぶことができます。 ReceiveMSG()、mfをMainFormのインスタンスに名前を付けたものに置き換えます。違反はありませんが、オブジェクト指向に関するいくつかの言語に依存しない文献を読んでから、これが何を意味しているのかを学び、C#の構文がどのように関係しているかを見ておく必要があります。 – Annath
真剣に、あなたはC#経由でCLRをつかむべきです。それは簡単に読むことができます(第1章をスキップしてください)。 – Will