У меня есть проект 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;
Как вы пытаетесь прочитать эту собственность? Не могли бы вы показать код внутри одного из ваших элементов управления, который не смог прочитать свойство? – Steve
Сделать все 'public static', как это плохая практика. Вы не должны привыкать к этому. – JosephHirn
Этот метод был предложен мне в другом вопросе, который я задал. Как мне это сделать, хотя я могу получить доступ, который мне нужен? –