重点是在TCP客户端接收/发送数据包时使用备忘录通知用户。 旧的代码是额外的愚蠢,我使用了一个用于在备忘录中添加文本的Timer,因为Timer可以访问表单成员,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";
备忘录修饰符私有,但这不是问题。
问题是当我调用代码时,备忘录上没有显示文字。
答案 0 :(得分:7)
输入以下内容:
Form1 myForm = new Form1();
你创建了一个新的表单实例(Form1),但我想你应该使用最有可能已经初始化的现有实例。
其中一种方法:
var form = Form.ActiveForm as Form1;
if (form != null)
{
form.TextValue = "test asdasd";
}
虽然这不是很好的设计。请尝试使用自定义events
。
答案 1 :(得分:1)
也许您应该考虑在tcpclient中发布一个事件。然后,您的表单将能够收听此事件并显示正确的信息。
答案 2 :(得分:0)
假设Memo继承自Control并假设您使用适当的修饰符设置它,您可能遇到的问题是您可能尝试从工作线程(用于运行TCP客户端的线程)设置文本)。如果是这种情况,那么您需要检查控件的InvokeRequired字段,如果为true,则调用将为您设置文本的委托。 下面是一个简短易用的C#片段。
private void SetTextOnMemo(string txt){
if(Memo.InvokeRequired){
Memo.Invoke(SetTextOnMemo, txt);
}
else{
Memo.Text = txt;
}
}