2013-05-10 4 views
0

У меня есть проект Windows Form с 1 формой (FormMain) и 3 пользовательскими элементами управления (TitleScreen, MainScreen и InGameMenu), действующими как разные экраны. Содержимой в MainScreen является Label, lblDate, свойство Text которого необходимо изменить в другом месте проекта (TitleScreen и InGameMenu), но поскольку я не могу сделать его статическим, я не могу сделать статическое публичное свойство для доступа к нему. Я слышал, что события могут быть выполнены, но я не знаю, как это сделать. Помогите мне выяснить, как изменить lblDate.Text из другого класса. Мне все равно, как это делается в этот момент. Это сводит меня с ума.Изменить свойство управления winform из другого класса

В 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; 
+0

Как вы пытаетесь прочитать эту собственность? Не могли бы вы показать код внутри одного из ваших элементов управления, который не смог прочитать свойство? – Steve

+0

Сделать все 'public static', как это плохая практика. Вы не должны привыкать к этому. – JosephHirn

+0

Этот метод был предложен мне в другом вопросе, который я задал. Как мне это сделать, хотя я могу получить доступ, который мне нужен? –

ответ

1

На основании вашего публикуемую кода, вы должны быть в состоянии получить доступ к LabelDate в начало В из любой точки с помощью:

ScreenReferenceHolder.MainScreen.LabelDate 
+0

Да, это была проблема .... такие глупые ошибки. –

Смежные вопросы