C# 如何在VisualStudio中将控件的修改器更改为静态
当我通过拖放创建控件时,VS会自动生成如下代码:C# 如何在VisualStudio中将控件的修改器更改为静态,c#,modifier,C#,Modifier,当我通过拖放创建控件时,VS会自动生成如下代码: public System.Windows.Forms.Label label1; 当我想将该控件的修改器更改为Static时,我转到Form1.Designer.cs并编辑为: public static System.Windows.Forms.Label label1; 没关系。但当我修改每个控件时,VS会自动将其更改为原点:(。 那么,如何将控件的修改更改为静态 对不起,我英语不好:( 注释中的代码: public static v
public System.Windows.Forms.Label label1;
当我想将该控件的修改器更改为Static时,我转到Form1.Designer.cs并编辑为:
public static System.Windows.Forms.Label label1;
没关系。但当我修改每个控件时,VS会自动将其更改为原点:(。
那么,如何将控件的修改更改为静态
对不起,我英语不好:(
注释中的代码:
public static void setLabelInfoVisible(bool visible)
{
if (Form1.labelInfo.InvokeRequired)
{
setLabelInfoVisibleDelegate del =
new setLabelInfoVisibleDelegate(setLabelInfoVisible);
Form1.labelInfo.Invoke(del, new object[] { visible });
}
else
{
Form1.labelInfo.Visible = visible;
}
}
设计器代码不应该由用户修改,因为每当您在设计器中更改表单时(如您所发现的),VisualStudio都会重新编写它 一种方法是将控件声明和初始化移动到非设计器代码文件。但是,这意味着您的控件将不再出现在设计器中 编辑:
这不是使控件可供其他线程访问的方法!我想不出使控件处于静态状态的有效原因。您必须将定义从自动生成的设计器代码中从文件中移出
Form.Designer.cs
到您的代码Form.cs
void Form1\u Load(..){otherObject.Form=this;}
您的实际问题似乎是另一个:从另一个线程更新控件。这应该而不是通过静态控件来完成 这些相关问题应该可以解决您的问题:
也许您可以创建一个继承相关控件的新类,然后对其应用singleton模式
这样,您就有了一个全局(线程安全)访问点。下面是一个如何使用它的示例:
Label label1 = Application.OpenForms["Form1"].Controls["label1"] as Label;
我发现最好的方法是做上述相反的事情。虽然他们没有解释不这样做的原因,例如使控件静态是一件坏事;这意味着我需要发布这篇文章来解决你的问题,因为这是一个你想要回答的问题,而不是一个仅仅被告知的问题…为什么…或者不…在这样一个问题背后没有任何理由d没有回答您的问题。请参见下文 创建控件时,您可以在该窗体的designer.cs按钮上找到新的私有创建的控件代码。它应该在末尾,但如果您创建了一个按钮,则会像这样 “#结束区域
Private Button button1;"
public static Button button1; "
如果您只是将其更改为以下内容
“#结束区域
Private Button button1;"
public static Button button1; "
您会注意到,设计器中所有引用此按钮的控制代码都会出现红色错误。您可以删除每个按钮上的“this.”,这样就可以继续了
若要在另一个类中引用,请确保使用上述命名空间
使用mainform
然后在下面的类代码中,您可以将按钮引用为
mainform.button1.text=“布拉赫”你为什么需要静态控件?嗨,我需要静态控件,因为我想在其他线程中访问它!你可以使用.Invoce控制方法。你能给我举个例子吗?谢谢!@Wayne:请看我答案中的链接以获取示例。嗨,Henk,我希望控件是静态的,因为我想在其他线程中访问它(这个线程在另一个类中)。如果不将控件的修饰符更改为static,我怎么做?谢谢!这解决了直接编辑设计器文件的问题(因此这很好),但它不能解决实际问题(从其他线程访问控件)。我已经使用了委托。这是我的代码:public static void setLabelInfoVisible(bool-visible){if(Form1.labelInfo.invokererequired){setLabelInfoVisibleDelegate=new setLabelInfoVisibleDelegate(setLabelInfoVisible);Form1.labelInfo.Invoke(del,new object[]{visible});}else{Form1.labelInfo.Visible=Visible;}}但是这个标签在另一个类中,所以我认为它一定是一个静态标签?