Страницы

Поиск по вопросам

понедельник, 8 апреля 2019 г.

Доступ к элементам MainWindow из статического класса

Подскажите, пожалуйста, как обратиться к 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!"; // меняем его значение } }
В этом подходе никаких статических переменных, просто добавлен параметр в метод.

Комментариев нет:

Отправить комментарий