Windows Forms, как мне достучаться до элементов формы с другого класса? Допустим у меня есть вот такой Методpublic async void Updated() { if (!string.IsNullOrEmpty(UpdateMagazinTB.Text) && !string.IsNullOrWhiteSpace(UpdateMagazinTB.Text) && !string.IsNullOrEmpty(StoreNameTB.Text) && !string.IsNullOrWhiteSpace(StoreNameTB.Text)) { SqlCommand sqlCommand = new SqlCommand("UPDATE [Stores] SET [StoreName]=@Name WHERE [StoresId]=@Id", sqlConnection); sqlCommand.Parameters.AddWithValue("Id", UpdateMagazinTB.Text); sqlCommand.Parameters.AddWithValue("Name", StoreNameTB.Text); await sqlCommand.ExecuteNonQueryAsync(); } } Он обновляет в базе данных информацию о Магазине по его ID. Информация собственно берется из элемента Формы (TextBox). Так вот, в чем суть вопроса, как я могу этот метод сделать через Интерфейс реализовав его в другом классе, после чего этот метод передать в основной класс обработчика формы? Я как уже не пробовал делать, что только не придумывал, но все стопорится на том, что из другого класса я ни как не могу достучаться до Элементов Формы (Windows Forms). Есть ли какой то способ работать с элементами формы из других классов?
Да, вы можете передать ссылку на элементы формы в другой класс через конструктор или свойства. Например, вы можете создать интерфейс с методом Updated() и передать ссылку на TextBox в конструкторе другого класса, который реализует этот интерфейс. Вот пример:
public interface IFormUpdater { void Updated(); } public class FormUpdater : IFormUpdater { private TextBox UpdateMagazinTB; private TextBox StoreNameTB; public FormUpdater(TextBox updateMagazinTB, TextBox storeNameTB) { UpdateMagazinTB = updateMagazinTB; StoreNameTB = storeNameTB; } public async void Updated() { if (!string.IsNullOrEmpty(UpdateMagazinTB.Text) && !string.IsNullOrWhiteSpace(UpdateMagazinTB.Text) && !string.IsNullOrEmpty(StoreNameTB.Text) && !string.IsNullOrWhiteSpace(StoreNameTB.Text)) { // your database update logic here } } }
Затем в основном классе обработчика формы вы можете создать экземпляр класса FormUpdater и передать ссылки на TextBox:
public partial class MainForm : Form { private FormUpdater _formUpdater; public MainForm() { InitializeComponent(); _formUpdater = new FormUpdater(UpdateMagazinTB, StoreNameTB); } private void UpdateButton_Click(object sender, EventArgs e) { _formUpdater.Updated(); } }
Таким образом, у вас будет доступ к элементам формы из другого класса через передачу ссылок на эти элементы.
Да, вы можете передать ссылку на элементы формы в другой класс через конструктор или свойства. Например, вы можете создать интерфейс с методом Updated() и передать ссылку на TextBox в конструкторе другого класса, который реализует этот интерфейс. Вот пример:
public interface IFormUpdater{
void Updated();
}
public class FormUpdater : IFormUpdater
{
private TextBox UpdateMagazinTB;
private TextBox StoreNameTB;
public FormUpdater(TextBox updateMagazinTB, TextBox storeNameTB)
{
UpdateMagazinTB = updateMagazinTB;
StoreNameTB = storeNameTB;
}
public async void Updated()
{
if (!string.IsNullOrEmpty(UpdateMagazinTB.Text) && !string.IsNullOrWhiteSpace(UpdateMagazinTB.Text) &&
!string.IsNullOrEmpty(StoreNameTB.Text) && !string.IsNullOrWhiteSpace(StoreNameTB.Text))
{
// your database update logic here
}
}
}
Затем в основном классе обработчика формы вы можете создать экземпляр класса FormUpdater и передать ссылки на TextBox:
public partial class MainForm : Form{
private FormUpdater _formUpdater;
public MainForm()
{
InitializeComponent();
_formUpdater = new FormUpdater(UpdateMagazinTB, StoreNameTB);
}
private void UpdateButton_Click(object sender, EventArgs e)
{
_formUpdater.Updated();
}
}
Таким образом, у вас будет доступ к элементам формы из другого класса через передачу ссылок на эти элементы.