【问题标题】:Access form objects from a partial class [closed]从部分类访问表单对象[关闭]
【发布时间】: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

标签: c# .net forms winforms


【解决方案1】:

您不能直接在类中编写代码,无论是否部分。将代码放入方法中:

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

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

【讨论】:

  • 非常感谢。这正是我所缺少的!
猜你喜欢
  • 1970-01-01
  • 2021-06-09
  • 1970-01-01
  • 1970-01-01
  • 2019-09-05
  • 2015-11-23
  • 2021-08-14
  • 2021-08-18
  • 1970-01-01
相关资源
最近更新 更多