首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从另一个类访问表单成员

从另一个类访问表单成员
EN

Stack Overflow用户
提问于 2009-04-04 15:29:02
回答 2查看 6.4K关注 0票数 0

重点是在TCP客户端中接收/发送数据包时使用备忘录通知用户。旧代码非常愚蠢,我使用计时器在备忘录中添加文本,因为计时器可以访问表单成员lol。

旧代码:

代码语言:javascript
复制
//Memo.Text += txt + "\n";

我今天玩过,这就是我所做的

在表格1的课堂上

代码语言:javascript
复制
public string TextValue
{
    get
    {
        return Memo.Text;
    }

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

我这样称呼密码:

代码语言:javascript
复制
Form1 myForm = new Form1();
myForm.TextValue = "test asdasd";

备忘录修饰符是私有,但这不是问题所在。

问题是,当我调用代码时,备忘录上没有显示文本。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-04-04 15:47:18

通过键入以下内容:

代码语言:javascript
复制
Form1 myForm = new Form1();

您可以创建表单的新实例(Form1),但我想您应该使用最有可能已经初始化的现有实例。

这样做的方法之一是:

代码语言:javascript
复制
var form = Form.ActiveForm as Form1;

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

虽然这不是很好的设计。尝试使用自定义代替。

票数 7
EN

Stack Overflow用户

发布于 2009-04-04 15:48:09

假设备忘录继承自Control,并假设您使用适当的修饰符设置它,您可能会遇到的问题是,您可能试图从工作线程(用于运行TCP客户端的线程)设置文本。如果是这样的话,那么您需要检查控件的InvokeRequired字段,如果是真调用将为您设置文本的委托。下面是一个简短而简单的C#片段。

代码语言:javascript
复制
private void SetTextOnMemo(string txt){
    if(Memo.InvokeRequired){
        Memo.Invoke(SetTextOnMemo, txt);
    }
    else{
        Memo.Text = txt;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/717264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档