从部分类访问表单对象

时间:2015-10-08 00:55:51

标签: c# .net forms winforms

我有一个使用大量控件的表单。这些控件背后的一些逻辑在其他类中。

逻辑的其他元素直接绑定到表单上的对象(列表框,标签,按钮等),将它保存在表单的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上的其他人建议我的方法应该有效,但除非我错过了一些重要的东西,否则它不会。

同样在我的研究中,有些人建议你可以为对象创建属性。我真的不想这样做,因为我只是想要定期,正常地访问对象,而不必执行所有这些额外的步骤(可能会破坏首先拆分代码的目的)。

你能告诉我,我想做什么是可能的吗?如果是这样,为了使这项工作正常,我应该采取什么方法?

感谢。

1 个答案:

答案 0 :(得分:1)

你不能直接在一个类中编写代码,部分或不编写代码。将代码放在方法中:

namespace Project1
{
    partial class Form1
    {
        label1. //nope!

        public void CodeGoesInHere()
        {
            label1.Text = "hello"; // yep!
        }
    }
}