0

1 つのフォーム (FormMain) と 3 つのユーザー コントロール (TitleScreen、MainScreen、および InGameMenu) が異なる画面として機能する Windows フォーム プロジェクトがあります。MainScreen に含まれているのは Label、lblDate であり、その Text プロパティはプロジェクトの他の場所 (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;
4

1 に答える 1

1

投稿されたコードに基づいて、次を使用してどこからでも MainScreen の LabelDate にアクセスできるはずです。

ScreenReferenceHolder.MainScreen.LabelDate
于 2013-05-10T19:01:58.003 に答える