C# 从不同类修改winform控件属性

C# 从不同类修改winform控件属性,c#,winforms,C#,Winforms,我有一个Windows窗体项目,其中1个窗体(FormMain)和3个用户控件(TitleScreen、MainScreen和InGameMenu)作为不同的屏幕。MainScreen中包含一个标签lblDate,该标签的文本属性需要在项目的其他地方修改(TitleScreen和InGameMenu),但由于我无法将其设置为静态,因此无法设置静态公共属性来访问它。我听说活动可能会完成这项工作,但我不知道怎么做。请帮助我了解如何修改其他类的lblDate.Text。我不在乎现在怎么做。这让我快发疯

我有一个Windows窗体项目,其中1个窗体(FormMain)和3个用户控件(TitleScreen、MainScreen和InGameMenu)作为不同的屏幕。MainScreen中包含一个标签lblDate,该标签的文本属性需要在项目的其他地方修改(TitleScreen和InGameMenu),但由于我无法将其设置为静态,因此无法设置静态公共属性来访问它。我听说活动可能会完成这项工作,但我不知道怎么做。请帮助我了解如何修改其他类的lblDate.Text。我不在乎现在怎么做。这让我快发疯了

在ScreenReferenceHolder.cs中

class ScreenReferenceHolder
{
    #region Field Region

    private static FormMain formMain;

    private static UserControls.TitleScreen titleScreen;
    private static UserControls.MainScreen mainScreen;
    private static UserControls.InGameMenu inGameMenu;

    #endregion

    #region Property Region

    public static FormMain FormMain
    {
        get
        {
            if (formMain == null)
                formMain = new FormMain();
            return formMain;
        }
    }

    public static UserControls.TitleScreen TitleScreen
    {
        get
        {
            if (titleScreen == null)
                titleScreen = new UserControls.TitleScreen();
            return titleScreen;
        }
    }

    public static UserControls.MainScreen MainScreen
    {
        get
        {
            if (mainScreen == null)
                mainScreen = new UserControls.MainScreen();
            return mainScreen;
        }
    }

    public static UserControls.InGameMenu InGameMenu
    {
        get
        {
            if (inGameMenu == null)
                inGameMenu = new UserControls.InGameMenu();
            return inGameMenu;
        }
    }
在Program.cs中

        Application.Run(ScreenReferenceHolder.FormMain);
在FormMain.cs中

    public FormMain()
    {
        InitializeComponent();

        this.Controls.Add(ScreenReferenceHolder.TitleScreen);
        this.Controls.Add(ScreenReferenceHolder.MainScreen);
        this.Controls.Add(ScreenReferenceHolder.InGameMenu);

        ScreenReferenceHolder.MainScreen.Visible = false;
        ScreenReferenceHolder.InGameMenu.Visible = false;
    }

    #endregion
我试着把它放在MainScreen.cs中,但是没有任何东西可以访问它

    public string LabelDate
    {
        get { return lblDate.Text; }
        set { lblDate.Text = value; }
    }
最后,在MainScreen.Designer.cs中是标签

    private void InitializeComponent()
    {
        this.lblDate = new System.Windows.Forms.Label();
    }
    private System.Windows.Forms.Label lblDate;

根据您发布的代码,您应该能够使用以下工具从任何位置访问主屏幕中的LabelDate:

ScreenReferenceHolder.MainScreen.LabelDate

你是如何读取该属性的?您可以显示无法读取属性的控件中的代码吗?将所有内容设置为公共静态是不好的做法。你不应该养成这样的习惯。我问的另一个问题向我建议了这种方法。我应该如何在仍然能够获得所需访问权限的情况下进行此操作?是的,这就是问题所在。。。。这些愚蠢的错误。