Witam,
Mam taki problem, stworzylem sobie kontrolke zawierajaca pola tekstowe i przyciski.
W oknie głównym mam umieszczone rozne kontrolki miedzy innymi ListView i moją kontrolke opisana wyzej.
Chce teraz zeby np. po kliknieciu w mojej kontrolce danego przycisku mialo to wplyw na kontrolke ListView.
Tyle ze gdy w klasie kontrolki ktora stworzylem nie mam dostepu do innych kontrolek. Wiec pytanie brzmi:
Jak zrobic zebym klikajac w przycisk kontrolki (czyli zdarzenie OnClick, mial dostep do innych kontrolek)?
Stworz sobie prywatna zmienna ListView. Nastepnie do niej publiczny properties, ktory przypisuje ja i pobiera. np tak:
ListView listView;
public ListView AttachedListView
{
get { return this.listView; }
set { this.listView = value; }
}
nastepnie podczas tworzenia formy przypisz propertisowi odpowiednia wartosc.
np. this.myCustomControl.AttachedListView = this.listView1;
Wewnatrz kodu klasy bedziesz wtedy mogl operowac na powiazanym listview
W form1.Designer.cs
public System.Windows.Forms.ListView listView1;
private mojaKontrolka mojaKontrolka1;
W form1.cs
public Form1()
{
InitializeComponent();
this.wListView1 = this.listView1;
}
public ListView wListView1
{
get { return this.listView1; }
set { this.listView1 = value; }
}
w mojaKontrolka.cs
private void button1_Click(object sender, EventArgs e)
{
// tutaj chce np dodac jakis item do listView1... ale nadal nie mam dostepu do kontrolek, chce miec
// dostep do jakiejkolwiek funkcji w form1.cs
}
propertisa i zmienna ListView umieszczasz w mojaKontrolka.cs
i po inicjalizacji komponentow dajesz
this.mojaKontrolka.wLisView1 = this.listView1
pozniej w button clicku po prostu korzystasz z this.listView1
Jesli dobrze zrozumialem to wtedy bede miec w kontrolce mojaKonkrolka listView dokladnie taka sama jak w form1, a ja chce miec dostep do tej w form1 ... chce miec dostep do jakiejs fukcji w form1 a ona juz zalatwi reszte...
w mojaKontrolka.cs
class MojaKontrolka
{
private ListView listView = null; //tu będziesz trzymać referencje do kontrolki z form1
public ListView ListView { set { listView = value; } } //publiczny akcesor umożliwiający przypisanie tej referencji
private void button1_Click(object sender, EventArgs e)
{
if(listView != null) //sprawdzasz, czy jest przypisany jakiś ListView
{
listView./*...*/; //wykonujesz coś na ListView
}
}
//...
W form1.cs
class Form1 : Form
{
public Form1()
{
InitializeComponent();
//załóżmy że twoja kontrolka nazywa się 'mojaKontrolka', a ListView na formie nazywa się 'ListView1'
mojaKontrolka.ListView = this.ListView1; //przypisujesz twojej kontrolce referencje do ListView z formy wykorzystując publiczny akcesor, teraz w 'mojaKontrolka.listView' będzie ta sama referencja co w 'this.ListView1'
}
//...
Wielkie dzieki, bardzo mi pomogles! :)
Ok jeszcze jedno,
sytuacja analogiczna ale chce z poziomu kontrolki wywolac funkcje znajdujaca sie w Form, jak to zrobic?
jeśli kontrolka leży na formie bezpośrednio to możesz wywołać jej parenta i wtedy funkcję, którą chcesz. Jeśli nie leży bezpośrednio, to kilka razy parenta, aż dojdziesz do formatki.
czy moglbys podac przyklad w kodzie?