Najprościej przekazać tego buttona jako argument metody: public void Method(Button button)
. Przekazujesz klasę, która jest typem referencyjnym. To trochę tak jakbyś przekazywał w C przez wskaźnik. Zmiany zostaną zapisane w oryginale.
Co do samej idei: przekazywanie kontrolek to zły pomysł. Zmiana contentu kontrolki powinna został wyzwolona jakimś zdarzeniem i dokonana wewnątrz "własnej formy".
Najlepiej skorzystać z event aggragator'a
ale to wymaga od Ciebie zaznajomienia się z czymś takim jak framework Prism (polecam).
Bez tego możesz przekazać do okna nadrzędnego np. akcję, którą wykonasz w tymże oknie, a ona zmieni Ci content w rodzicu: public void Method(Action action)
.
Kolejna kwestią, a w zasadzie podstawową jest potrzeba posiadania statycznego buttona, co uważam za bezsensowne. O_o. Uwierz mi: nie chcesz tego tak robić.
pseudokod
public class Child
{
private Action action;
public Child(Action action)
{
this.action = action;
}
public void DoSomething()
{
// Tutaj odświeżasz content przycisku w oknie rodzica.
action?.Invoke();
}
}
public class Parent
{
private void ChangeButtonText()
{
//...
}
public void ShowChildWindow()
{
var child = new Child(ChangeButtonText);
// lub:
var child = new Child(()=>ChangeButtonText());
child.ShowDialog();
}
}
Dostęp public
, private
wedle życzenia: już nie chce mi się zmieniać :)