0

我正在做一些具有很多表单的应用程序,并且某些组件必须从另一种表单访问一些组件....当我公开我的richtextbox并尝试从其他地方访问它时,它说线程安全错误bla bla ...所以我将该文本框设为静态,以便只有属于该类的对象,我可以像这样访问它。

Form1.richTextBox.Text    

这工作正常,但问题是每次我向winform添加一个新组件时,我的静态对象都变成非静态的,我对对象的所有直接访问都会出错。我的问题是如何让 Visual Studio 停止修改我的代码(设计代码)?还是从其他形式安全地访问对象而没有循环依赖?

4

2 回答 2

0

尝试创建一些静态元素,如 String myStatic 并从其他表单访问该元素。在您需要更新此元素的地方使用一些方法,例如

void UpdateMyStatic() {
myStatic = richTextBox.Text;
}
于 2013-02-21T15:39:00.167 回答
0

从您的评论“尝试从其他地方访问它说线程安全错误”我相信问题是跨线程操作。那是在后台/工作线程上执行的“其他地方”吗?IE。不是您的richtextbox 实例化的线程。如果是这样,您必须测试 InvokeRequired 属性。来自 MSDN:“获取一个值,该值指示调用者在对控件进行方法调用时是否必须调用调用方法,因为调用者位于与创建控件的线程不同的线程上。”

顺便说一句:即使您看到一个 C# 对象(richtextbox),它也只是 Windows 句柄的一个外观。因此,Visual Studio 的行为是正确的。一个控件只能有一个父级(即窗口) 如果您“认为”您需要一个静态富文本框,那么您应该重新考虑您的设计。

于 2013-02-27T07:37:18.627 回答