重点是在TCP客户端中接收/发送数据包时使用备忘录通知用户。旧代码非常愚蠢,我使用计时器在备忘录中添加文本,因为计时器可以访问表单成员lol。
旧代码:
//Memo.Text += txt + "\n";我今天玩过,这就是我所做的
在表格1的课堂上
public string TextValue
{
get
{
return Memo.Text;
}
set
{
this.Memo.Text += value + "\n";
}
} 我这样称呼密码:
Form1 myForm = new Form1();
myForm.TextValue = "test asdasd";备忘录修饰符是私有,但这不是问题所在。
问题是,当我调用代码时,备忘录上没有显示文本。
发布于 2009-04-04 15:47:18
通过键入以下内容:
Form1 myForm = new Form1();您可以创建表单的新实例(Form1),但我想您应该使用最有可能已经初始化的现有实例。
这样做的方法之一是:
var form = Form.ActiveForm as Form1;
if (form != null)
{
form.TextValue = "test asdasd";
}虽然这不是很好的设计。尝试使用自定义代替。
发布于 2009-04-04 15:48:09
假设备忘录继承自Control,并假设您使用适当的修饰符设置它,您可能会遇到的问题是,您可能试图从工作线程(用于运行TCP客户端的线程)设置文本。如果是这样的话,那么您需要检查控件的InvokeRequired字段,如果是真调用将为您设置文本的委托。下面是一个简短而简单的C#片段。
private void SetTextOnMemo(string txt){
if(Memo.InvokeRequired){
Memo.Invoke(SetTextOnMemo, txt);
}
else{
Memo.Text = txt;
}
}https://stackoverflow.com/questions/717264
复制相似问题