Nie widzę problemu. Zadbaj o to, aby każde tworzone okno potomne miało jakąś sensowną nazwę (nazwa ta oczywiście będzie unikalna dla każdego z tych okien). Następnie, gdy będziesz potrzebował wywołać metodę, na którymś z okien potomnych to robisz tak jak powiedziałeś, czyli korzystasz z właściwości MdiChildren. Przechodzisz pętlą po otrzymanej tablicy okien potomnych i wybierasz jedno z nich o jakiejś konkretnej nazwie, np. Form3.
Możesz też pomyśleć nad tym, żeby wszystkie tworzone okna potomne wrzucać do jakiejś hashtablicy. Wówczas nie będziesz musiał za każdym razem wykonywać pętli, żeby znaleźć konkretne okno potomne. Kluczami w tej hashtablicy będą unikalne nazwy okien, a wartościami oczywiście same okna (a w zasadzie referencje do tych okien).
Jeśli metodę będziesz musiał wywołać na aktualnie aktywnym oknie potomnym to możesz skorzystać z właściwości ActiveMdiChild zamiast MdiChildren. Ta właściwość zwraca tylko i wyłącznie aktualnie aktywne okno potomne.
void miWykonaj_Click(object sender, EventArgs e)
{
if (gv.bForm3_OnOff == false)
{
}
else
{
Form[] f = this.MdiChildren;
int i;
string s = "Zapytanie Sql";
for (i = 0; i < f.Length; i++)
{
if (f[i].Text == s)
{
break;
}
}
Console.WriteLine(f[i].Text); // I tutaj wychodzi mi że złapał dobrą kontrolkę
string s2;
s2 = f[i].ZwróćZdanieSql(); // i tu chce wywołać funkcje i wyskakuje BŁĄD, funkcja ma zwracać z innej formy richbox.text
Console.WriteLine(s2);
}
}
dla pewności funkcja wygląda tak
public string ZwróćZdanieSql()
{
return rbZapytanieSql.Text;
}
co radzicie zrobić, czemu ta funkcja nie chce się wywołać, kompilator zwraca błąd