Подскажите, пожалуйста, как обратиться к TextBox'у с именем textBox1, размещенному в MainWindow, из метода статического класса SomeStaticClass?
namespace Programm1
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
public static class SomeStaticClass
{
public static void Test()
{
MainWindow.textBox1.Text = "Done!"; // Ошибка
}
}
}
Ошибка:
Для нестатического поля, метода или свойства требуется ссылка на
экземпляр.
Ответ
Сделать статическую переменную Instance в которой будет форма и обращаться к ней.
public partial class MainWindow : Window
{
public static MainWindow Instance { get; private set; } // тут будет форма
public MainWindow()
{
InitializeComponent();
Instance = this; // инициализируем статическую переменную
}
}
public static class SomeStaticClass
{
public static void Test()
{
if (MainWindow.Instance != null) // обращаемся к ней из статического класса/метода
MainWindow.Instance.textBox1.Text = "Done!";
}
}
Возможно, подход не самый правильный, но достаточно простой и понятный.
Предложу еще более простой вариант. Переписать статический метод, чтобы он принимал компонент TextBox и менял его свойство, вот так:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
SomeStaticClass.Test(this.TextBox); // передаем наш TextBox в метод
}
}
public static class SomeStaticClass
{
public static void Test(TextBox textBox) // принимаем наш компонент
{
if (textBox != null)
textBox.Text = "Done!"; // меняем его значение
}
}
В этом подходе никаких статических переменных, просто добавлен параметр в метод.
Комментариев нет:
Отправить комментарий