Witam,
od razu zaznaczam, że stawiam pierwsze kroki w C#, przerabiam Michelsona i Liberty.
W ramach ćwiczeń C# 2008 popełniłem coś takiego, zadeklarowałem klasę 'NowaF':
namespace WFA_001
{
public class NowaF : Form
{
public Form F0;
public NowaF(ref Form F1)
{
F0 = F1;
}
public void NowaF_Start()
{
F0.Show();
}
public void NowaF_End()
{
F0.Close();
}
}
}
Klasa przejmuje referencję do formatki i ma za zadanie sterować wyświetlaniem i zamykaniem tej formatki - tak sobie wymyśliłem.
Skompilowało sie, myślę sobie 'dobrze jest'.
Formatka 'Form1' zawiera dwa buttony i kod tak wygląda:
namespace WFA_001
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
button1.Text = "Otwórz okno";
Form Fx = new Form1();
NowaF NF = new NowaF(ref Fx);
}
public void button1_Click(object sender, EventArgs e)
{
NF.NowaF_Start(); //NF jest zaznaczony na czerwono - i tego nie rozumiem?
}
public void button2_Click(object sender, EventArgs e)
{
NF.NowaF_End(); //NF jest zaznaczony na czerwono - i tego nie rozumiem?
}
}
}
Nie rozumiem, dlaczego kompilator się czepia wywołania metod obiektu 'NF' utworzonego z klasy 'NowaF' w konstruktorze 'Form1'?
Co ciekawe, dla mnie, jeśli stworzę obiekt 'NF' z poziomu buttona:
public void button1_Click(object sender, EventArgs e)
{
Form Fx = new Form1();
NowaF NF = new NowaF(ref Fx);
NF.NowaF_Start(); //ten kod się kompiluje i działa!
}
To, po kliknięciu w button okno się otwiera.
Czegoś istotnego tu chyba nie rozumiem i w tym kontekście się (uprzejmie) pytam.
Jestem na formatce 'F0' będącej referencją do 'Form1', czyli jestem de facto na 'Form1' sterowanej z poziomu klasy 'NowaF' - i o to mi chodziło w tym moim ćwiczeniu.
Pozdrawiam.