Pytanie poczatkujacego.
Mam forme, na niej panel, na panelu tworze dynamicznie PictureBox'y.
Do kazdego stworzonego PictureBox'a podpinam obsluge roznych zdarzen.
Udalo mi sie podpiac DragEnter, DragDrop.
Dzieki temu moge na moje PictureBox zrzucac inne PictureBox ale tylko te,
ktore sa zdefiniowane na poziomie formatki.
Chcialbym moc podpiac do kazdego dynamicznie stworzonego PictureBox
zdarzenie MouseDown a w nim
funkcje DoDragDrop. Niestety nie udaje mi sie to, dostaje komunikat:
Error 1 Cannot access a nonstatic member of outer type
'System.Windows.Forms.Control' via nested type 'XYZ.FrmEdytor.Klocek'
D:\USERS\JACEK\C#\moje programy\XYZ\XYZ\FrmEdytorGlowna.cs 73 17 XYZ
Pytanie: jak temu zaradzic?
Pieknie dziekuje :)
Marek
Napisz jak to podpinasz, bo wg mnie pictureBox1.MouseDown+=new
MouseEventHandler(pictureBox1_MouseDown); powinno działać bez problemu.
tm
To nie z podpieciem mam problem ale z wykorzystaniem funkcji "DoDragDrop"
wewnatrz mojej klasy mam problem.
Marek
Tak, żeś napisał.
> "DoDragDrop" wewnatrz mojej klasy mam problem.
No to daj jakiś kawałek kodu.
tm
Prosze bardzo:
public class Klocek //Klocek to pojedyncza "komorka" mojej planszy
{
private PictureBox obrazek;
private char typObrazka; //to jest char poniewaz kod planszy
skladac sie bedzie z ciagu literek, kazdy klocek jest
//charakteryzowany przez jeden char
private byte kolumna;
private byte wiersz;
private void DragDrop(object sender, DragEventArgs e)
{
this.obrazek.Image = (Bitmap)e.Data.GetData(typeof(Bitmap));
}
private void DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(typeof(Bitmap)))
{
e.Effect = DragDropEffects.Copy;
}
else
{
e.Effect = DragDropEffects.None;
}
}
private void MouseDown(object sender, MouseEventArgs e)
{
PictureBox source = (PictureBox)sender;
DoDragDrop(source.Image, DragDropEffects.Copy); <- tu sie
wywala,
}
public Klocek(byte aWiersz, byte aKolumna, char aTypObrazka,
ImageList aImageList, Panel aPanel)
{
typObrazka = aTypObrazka;
//imageList = aImageList;
kolumna = aKolumna;
wiersz = aWiersz;
obrazek = new PictureBox();
obrazek.Image = aImageList.Images[aTypObrazka - 97]; //-97
aby 'a' mialo indeks '0'
obrazek.SizeMode = PictureBoxSizeMode.StretchImage;
obrazek.Width = obrazekSzerokosc;
obrazek.Height = obrazekWysokosc;
obrazek.Left = aKolumna * obrazekSzerokosc;
obrazek.Top = aWiersz * obrazekWysokosc;
obrazek.AllowDrop = true;
obrazek.DragEnter += new
System.Windows.Forms.DragEventHandler(this.DragEnter);
obrazek.DragDrop += new
System.Windows.Forms.DragEventHandler(this.DragDrop);
obrazek.MouseDown += new
System.Windows.Forms.MouseEventHandler(this.MouseDown);
klockiTabela[aWiersz, aKolumna] = this;
aPanel.Controls.Add(obrazek);
}
}
komunikat o bledzie to:
Error 1 Cannot access a nonstatic member of outer type
'System.Windows.Forms.Control' via nested type 'XXX.FrmEdytor.Klocek'
D:\Lolek\JACEK\C#\moje programy\XXX\XXX\FrmEdytorGlowna.cs 72 17 XXX
Marek
No i tu jest ważne to w czym osadziłeś tą klasę, bo poprosiłeś się o
błąd, który podaje Ci kompilator.
> ciach
> DoDragDrop(source.Image, DragDropEffects.Copy); <- tu sie wywala,
source.DoDragDrop(source.Image, DragDropEffects.Copy);
i powinno działać.
> Error 1 Cannot access a nonstatic member of outer type
> 'System.Windows.Forms.Control' via nested type 'XXX.FrmEdytor.Klocek'
> D:\Lolek\JACEK\C#\moje programy\XXX\XXX\FrmEdytorGlowna.cs 72 17 XXX
Czytaj dokładnie komunikaty kompilatora :)
tm
I dziala!
Piekne dzieki :)
Marek