Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

DoDragDrop w mojej wlasnej, osadzonej klasie

4 views
Skip to first unread message

Marek

unread,
Dec 6, 2009, 7:40:12 AM12/6/09
to
Witam :)

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

Tomasz Muszyński

unread,
Dec 6, 2009, 9:59:22 AM12/6/09
to
W dniu 09-12-06 13:40, Marek pisze:

> 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

Napisz jak to podpinasz, bo wg mnie pictureBox1.MouseDown+=new
MouseEventHandler(pictureBox1_MouseDown); powinno działać bez problemu.

tm

Marek

unread,
Dec 6, 2009, 12:33:05 PM12/6/09
to
> Napisz jak to podpinasz, bo wg mnie pictureBox1.MouseDown+=new
> MouseEventHandler(pictureBox1_MouseDown); powinno działać bez problemu.

To nie z podpieciem mam problem ale z wykorzystaniem funkcji "DoDragDrop"
wewnatrz mojej klasy mam problem.

Marek

Tomasz Muszyński

unread,
Dec 7, 2009, 1:16:16 PM12/7/09
to
W dniu 09-12-06 18:33, Marek pisze:

>> Napisz jak to podpinasz, bo wg mnie pictureBox1.MouseDown+=new
>> MouseEventHandler(pictureBox1_MouseDown); powinno działać bez problemu.
>
> To nie z podpieciem mam problem ale z wykorzystaniem funkcji

Tak, żeś napisał.

> "DoDragDrop" wewnatrz mojej klasy mam problem.

No to daj jakiś kawałek kodu.

tm

Polon

unread,
Dec 9, 2009, 8:08:11 PM12/9/09
to
> No to daj jakiś kawałek kodu.

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

Tomasz Muszyński

unread,
Dec 11, 2009, 4:40:32 PM12/11/09
to
W dniu 09-12-10 02:08, Polon pisze:

>> No to daj jakiś kawałek kodu.
>
> Prosze bardzo:
>
> public class Klocek //Klocek to pojedyncza "komorka" mojej planszy
> { ... }

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

Polon

unread,
Dec 14, 2009, 6:39:39 PM12/14/09
to
> source.DoDragDrop(source.Image, DragDropEffects.Copy);

I dziala!

Piekne dzieki :)

Marek

0 new messages