【发布时间】:2015-10-08 00:55:50
【问题描述】:
我有一个使用很多控件的表单。这些控件背后的一些逻辑在其他类中。
逻辑的其他元素与表单上的对象(列表框、标签、按钮等)直接相关,因此将其保存在表单的 Designer.cs 文件中是有意义的。代码量太大,我无法在 Designer.cs 文件中管理,因此我想将该代码分解为部分类。我还希望该部分类能够不受限制地访问表单中的任何对象。
很遗憾,我似乎无法访问表单的控件。首先,这是我为测试准备的(使用在 Visual Studio 2015 中开箱即用的新项目创建):
Form1.cs
namespace Project1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
}
}
Form1.Designer.cs
partial class Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// lots of other code generated by Visual Studio...
...稍后在 Form1.Designer.cs 中
private System.Windows.Forms.Label label1;
问题出现在我的名为 Form1.MoreCode.cs 的自定义部分类文件中
namespace Project1
{
partial class Form1
{
label1. //nope!
}
}
如您所见,我尝试访问 Designer.cs 文件中名为“label1”的表单对象,但无法访问。我尝试公开标签本身,然后尝试公开所有类,如下所示:
public partial class form1
... 像这样:
private System.Windows.Forms.Label label1;
我在没有什么帮助的情况下做了很多研究。 Stack Overflow 上的其他人建议我的方法应该有效,但除非我错过了重要的事情,否则它不会。
在我的研究中,有些人建议您可以为对象创建属性。我真的不想这样做,因为我只想定期、正常地访问对象,而不必执行所有这些额外步骤(可能会破坏首先拆分代码的目的)。
你能告诉我我想做的事是否可行吗?如果是这样,我应该采取什么方法才能使其正常工作?
谢谢。
【问题讨论】:
-
在设计器中..从
private to public更改标签的访问级别 -
或者甚至只是
protected应该这样做 -
你想直接在课堂上写代码吗?不在函数中?
-
@MethodMan 不需要;这是一个部分类 - 即同一个类。
-
你在班级级别使用标签 - nono