从分部类访问表单对象

本文关键字:访问表 单对象 | 更新日期: 2023-09-27 18:16:44

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

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

在我的研究中,有些人建议你可以为对象创建属性。我真的不想这样做,因为我只想有规律的、正常的访问对象,而不必做所有这些额外的步骤(可能会破坏一开始拆分代码的目的)。

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

谢谢。

从分部类访问表单对象

不能直接在类中编写代码,无论是部分代码还是非部分代码。把你的代码放在一个方法中:

namespace Project1
{
    partial class Form1
    {
        label1. //nope!
        public void CodeGoesInHere()
        {
            label1.Text = "hello"; // yep!
        }
    }
}