我在C#.NET中有一个应用程序,它有一个MainForm和几个类.
其中一个类接收来自网络的传入数据消息.我需要将这些消息的文本附加到多行文本框中MainForm.
我可以MainForm通过使方法静态将消息发送到方法,但静态方法无法访问MainForm控件.
TheIncomingDataClass.cs
namespace TheApplicationName
{
class TheIncomingDataClass
{
public void IncomingMessage(IncomingMessageType message)
{
TheApplicationName.MainForm.ReceiveMSG(message);
}
Run Code Online (Sandbox Code Playgroud)
MainForm.cs
public static void ReceiveMSG(string message)
{
txtDisplayMessages.AppendText(message); //This line causes compile error
}
Run Code Online (Sandbox Code Playgroud)
编译错误:
非静态字段,方法或属性'TheApplicationName.MainForm.txtDisplayMessages'需要对象引用
静态方法无法访问像txtDisplayMessages这样的成员,因为它不是该实例的一部分.我建议你做一些关于静态方法和诸如此类的概念的阅读,因为这是一个相当语言不可知的概念.最好通过删除静态修饰符来实现该方法,因为它不需要是静态的 - 它似乎需要由该对象的特定实例调用.
为了继续你一直在做的方式,你的" TheIncomingDataClass"应该引用MainForm它应该与之对接的对象.当您创建此类的实例(可能来自实例方法MainForm)时,您将需要传入对此MainForm对象的引用.
class TheIncomingDataClass{
MainForm form;
public TheIncomingDataClass(MainForm form){
this.form = form;
}
}
class MainForm : Form{
MainForm(){
new TheIncomingDataClass(this);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,正如Bugs所建议的那样,你可能会更好地将这个事件作为事件TheIncomingDataClass并订阅它MainForm.
class IncomingMessageEventArgs : EventArgs{
IncomingMessageType message;
public IncomingMessageType Message{get{return message;}}
public IncomingMessageEventArgs(IncomingMessageType message){
this.message = message;
}
}
class TheIncomingDataClass{
public event EventHandler<IncomingMessageEventArgs> MessageReceived;
protected virtual void OnMessageReceived(IncomingMessageEventArgs e){
if(MessageReceived != null)
MessageReceived(this, e);
}
public void IncomingMessage(IncomingMessageType message){
OnMessageReceived(new IncomingMessageEventArgs(message));
}
}
class MainForm : Form{
MainForm(){
new TheIncomingDataClass().MessageReceived +=
(s, e)=>txtDisplayMessages.AppendText(e.Message.ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
34556 次 |
| 最近记录: |