PDA

View Full Version : [.net 4.0]Controlli e delegate a runtime


RaouL_BennetH
03-09-2012, 08:52
Ciao a tutti.

Dopo aver aggiunto a runtime dei controlli, riesco a determinare la loro posizione
dopo averli spostati su di un'area mediante drag - drop:



int posX = 0;
int posY = 0;

Button b = new Button();
b.Text = "prova";
Point location = Point.Empty;
pannello.Controls.Add(b);

DragHelper.SetDraggable(b);
b.MouseUp += delegate(object mySender, MouseEventArgs me)
{
location = b.PointToScreen(Point.Empty);
posX = location.X;
posY = location.Y;
};



Con il suddetto codice non ho nessun problema, mi funziona perfettamente.

I controlli che aggiungo poi vengono memorizzati su un database.
Il problema lo ho quando, dopo aver caricato i dati dal database ed i controlli riprendono le posizioni giuste, devo gestire nuovamente il drag drop:


try
{
int counter = myController.ObjList.Count;
Button[] b = new Button[counter];
for(int i = 0; i < counter; i++);
{
b[i] = new Button();
b[i].Text = myController.ObjList[i].Descrizione;
b[i].Location = new Point(myController.ObjList[i].PosX, myController.ObjList[i].PosY);

pannello.Controls.Add(b[i]);

DragHelper.SetDraggable(b[i]);

//ora iniziano i miei problemi

b[i].MouseUp += delegate(object mySender, MouseEventArgs me)
{
//devo fare in modo di ricavare la X e la Y
//perchè se l'oggetto cambia posizione devo
//rimemorizzarla nel db
};
}


L'errore che al momento non riesco a superare è quello di
sforare l'indice dell'array quando viene creato il delegate
e non ne capisco il motivo.

Vi ringrazio in anticipo.

RaouL_BennetH
03-09-2012, 12:14
Ok, capito dov'era il problema:



for(int i = 0; i < bla; i++)
{
//aggiungo i controlli
control[i].MouseUp += delegate(object mySender, MouseEventArgs me)
{
Button bb = mySender as Button;
blah....
};
}