Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[C#] Object verwijderen met sender

Pagina: 1
Acties:
  • 973 views

Verwijderd

Topicstarter
Ik maak verschillende pictureboxen aan in één parent picturebox met volgende code:

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
private void btn_transfo_MouseDown(object sender, MouseEventArgs e)
{
teller_transfo += 1;
PictureBox transfo = new PictureBox();
transfo.Name = "transfo" + teller_transfo;
transfo.ClientSize = new Size(50, 50);
transfo.SizeMode = PictureBoxSizeMode.StretchImage;
try
{
transfo.Image = Image.FromFile(@"c:\pic\transfo.jpg");
}
catch (Exception error)
{
MessageBox.Show(error.Message, "Cannot find pic", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
transfo.MouseDown += new MouseEventHandler(transfo_MouseDown);
transfo.MouseUp += new MouseEventHandler(transfo_MouseUp);
transfo.MouseMove += new MouseEventHandler(transfo_MouseMove);
transfo.MouseDoubleClick += new MouseEventHandler(transfo_MouseDoubleClick);
transfo.MouseClick += new MouseEventHandler(transfo_MouseRightClick);
picCanvas.Controls.Add(transfo);
this.DoDragDrop(transfo, DragDropEffects.Move);
}


Dit werkt prima. Nu heb ik een contextmenu geplaatst die ik aanroep op de rechtermuisknop:
C#:
1
2
3
4
5
6
7
8
void transfo_MouseRightClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
PictureBox x = sender as PictureBox;
cxt_Transfo.Show(x, new Point(e.X, e.Y));
}
}


Dit werkt ook prima. Nu heb ik een button in het contextmenu die de geklikte picturebox moet verwijderen, dit lukt niet.

C#:
1
2
3
4
5
private void cxt_btn_transfoVerwijder_MouseDown(object sender, MouseEventArgs e)
{
PictureBox x = sender as PictureBox; 
picCanvas.Controls.Remove(x);
}



Wat zie ik over het hoofd? x blijft continu null, is dat normaal?

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 16:28

TeeDee

CQB 241

Ik vermoed dat je sender een ToolstripMenuItem is.
Je kan dit controleren door sender.GetType() even te bekijken.

Heart..pumps blood.Has nothing to do with emotion! Bored


Verwijderd

Topicstarter
TeeDee schreef op dinsdag 26 februari 2008 @ 11:15:
Ik vermoed dat je sender een ToolstripMenuItem is.
Je kan dit controleren door sender.GetType() even te bekijken.
Wat je zegt dat de sender een toolstrip is, heb ik nog niet aan gedacht maar dat lijkt me idd logisch.

Maar wat zou ik dan moeten veranderen in code?

x wordt na het uitvoeren van die methode ineens -4

[ Voor 6% gewijzigd door Verwijderd op 26-02-2008 11:28 ]


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

De sender is altijd de veroorzaker van het bericht, dus bij een Click event idd datgene waar je op geklikt hebt.

Dit probleem kun je op diverse manieren oplossen, waarvan de simpelste is om bij het showen van je context menu even op te slaan op welke image er het laatst geklikt is.

Professionele website nodig?


Verwijderd

Topicstarter
Kan je mij hier wat (pseudo) code geven aub?

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Je weet toch wel hoe je een member variable in je class opslaat?

Professionele website nodig?


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 08:34

Creepy

Tactical Espionage Splatterer

Verwijderd schreef op dinsdag 26 februari 2008 @ 11:59:
Kan je mij hier wat (pseudo) code geven aub?
No offence, maar dit kan je zelf toch wel uitzoeken? Een variabele aanmaken en hier (de referentie naar) de sender in opslaan is zo moeilijk nu ook weer niet. Sterker nog, als je dat nog niet snapt dan wil ik je aanraden om je C# tuts of boek nog eens goed door te nemen. De uitleg can Curry is echt geen rocketsience

[ Voor 5% gewijzigd door Creepy op 26-02-2008 12:06 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Sorry voor deze gemakzucht! Maar ik zit nu al 1,5 dag aan dit probleem te werken als absolute C# beginner met een redelijk zwaar project..
Maar dit terzijde..

Dus als ik het goed begrijp, steek ik bij de rechtermuisknop event de naam van de picturebox waar ik op heb geklikt in een variabele.
Dit heb ik zo gedaan:

C#:
1
2
3
4
5
6
7
8
9
 void transfo_MouseRightClick(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                PictureBox x = (PictureBox)sender;
                contextMenuStrip1.Show(x, new Point(e.X, e.Y));
                naam = x.Name.ToString();
             }
        }


Met Add Watch zie ik dat de variabele (string) gelijk wordt aan transfo1, dit is ook de picturebox waar ik nu op heb rechts geklikt.


In mijn verwijder knop in het contextmenu moet ik nu dus transfo1 zien te verwijderen.

C#:
1
2
3
4
5
6
private void verwijderToolStripMenuItem_Click(object sender, EventArgs e)
        {
           PictureBox nieuw = new PictureBox();
            nieuw.Name = naam;
           pictureBox1.Controls.Remove(nieuw);
         }


Dit werkt niet, volgens mij zit het ergens dat de string "naam" niet wordt geconverteerd naar een Name?

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 20:22
Nee, je maakt nu een nieuwe PictureBox, die je daarna wilt verwijderen. Dat doet niks omdat deze PictureBox niet eens in je Controls collection staat. Tip: sla niet de naam van de PictureBox op, maar de reference naar de PictureBox zelf.
Dit werkt niet, volgens mij zit het ergens dat de string "naam" niet wordt geconverteerd naar een Name?
Sorry, ik zou echt nog wat gaan lezen want dit raakt kant noch wal...

Roomba E5 te koop


Verwijderd

Topicstarter
sig69 schreef op dinsdag 26 februari 2008 @ 13:52:
Nee, je maakt nu een nieuwe PictureBox, die je daarna wilt verwijderen. Dat doet niks omdat deze PictureBox niet eens in je Controls collection staat. Tip: sla niet de naam van de PictureBox op, maar de reference naar de PictureBox zelf.
Dit ga ik eens op zoeken, bedankt
Sorry, ik zou echt nog wat gaan lezen wat dit raakt kant noch wal...
Denk je nu echt dat ik hier gewoon zit te wachten ineens het hele project kant en klaar op mijn bureau ligt?

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 20:22
Dat bedoel ik helemaal niet, wilde je ook niet beledigen ofzo. Maar "naam" is een string, en "Name" is geen Name-object maar ook gewoon een string. Er hoeft dus helemaal niks geconverteerd te worden. Hieruit concludeerde ik alleen dat je gewoon wat basiskennis mist, meer niet.

Roomba E5 te koop


Verwijderd

Topicstarter
sig69 schreef op dinsdag 26 februari 2008 @ 14:00:
Dat bedoel ik helemaal niet, wilde je ook niet beledigen ofzo. Maar "naam" is een string, en "Name" is geen Name-object maar ook gewoon een string. Er hoeft dus helemaal niks geconverteerd te worden. Hieruit concludeerde ik alleen dat je gewoon wat basiskennis mist, meer niet.
Ik mis inderdaad een pak basiskennis, ook logisch voor een student elektriciteit :)

Ik heb na 2 weken al wat nette dingen werkend, maar als ik dan op zo simpele probleempjes blijf steken is dat zeer frustrerend.
Maar dat is natuurlijk geen reden om uitlatingen te gaan doen 8)7

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 16:28

TeeDee

CQB 241

Als je het naampje al hebt: kijk eens naar FindControl
Blast... FindControl zit in Web.UI ;)

[ Voor 29% gewijzigd door TeeDee op 26-02-2008 14:09 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Verwijderd schreef op dinsdag 26 februari 2008 @ 14:03:
[...]


Ik mis inderdaad een pak basiskennis, ook logisch voor een student elektriciteit :)

Ik heb na 2 weken al wat nette dingen werkend, maar als ik dan op zo simpele probleempjes blijf steken is dat zeer frustrerend.
Waarom ben je dan als student electriciteit zonder basiskennis ook in godesnaam bezig met een redelijk zwaar project?

Want sorry hoor maar als je dit project al afkrijgt gaat het een puinzooi zijn die direct de vuilnisbak in kan, al is het maar omdat je tegen die tijd zelf al weet hoeveel duizend stomme fouten je hebt gemaakt.

Professionele website nodig?


Verwijderd

Topicstarter
curry684 schreef op dinsdag 26 februari 2008 @ 14:38:
[...]

Waarom ben je dan als student electriciteit zonder basiskennis ook in godesnaam bezig met een redelijk zwaar project?

Want sorry hoor maar als je dit project al afkrijgt gaat het een puinzooi zijn die direct de vuilnisbak in kan, al is het maar omdat je tegen die tijd zelf al weet hoeveel duizend stomme fouten je hebt gemaakt.
Ook optimistisch ingesteld :*)

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 20:22
Ervaring? >:)
We zijn allemaal ooit begonnen hè...

Roomba E5 te koop


Verwijderd

Topicstarter
sig69 schreef op dinsdag 26 februari 2008 @ 14:54:
Ervaring? >:)
We zijn allemaal ooit begonnen hè...
Inderdaad, je kan niet eindigen zonder ergens te beginnen ;)

Neen , ik moet voor mijn stage een applicatie schrijven om kabels te berekenen.
Momenteel komt er niks elektrisch bij kijken, puur programmeren.
Ik heb wat interesse in programmeren en het leek mij een uitdaging, daarom dat ik nu aan dat project bezig ben.

Maar om het nadien in de vuilbak te kieperen.. hier zijn we allen toch wel een beetje educatief ingesteld :)

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

sig69 schreef op dinsdag 26 februari 2008 @ 14:54:
Ervaring? >:)
We zijn allemaal ooit begonnen hè...
Ik programmeer inmiddels 23 jaar of zo en heb nog steeds wel eens situaties dat ik code van 2 maanden terug zie en denk "wtf was I thinking?" ;)

Professionele website nodig?


Verwijderd

Topicstarter
sig69 schreef op dinsdag 26 februari 2008 @ 13:52:
Tip: sla niet de naam van de PictureBox op, maar de reference naar de PictureBox zelf.
Ik vind hier geen info over...

Kan ik echt niet de naam van de picturebox in een string duwen, en erna zeggen dat picturebox met naam 'string' moet verwijderd worden?

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Waarom zou je helemaal moeilijk de naam van het ding opslaan zodat je hem naderhand weer moet terugzoeken terwijl je ook stomweg op kunt slaan waar het ding direct staat?

Professionele website nodig?


Verwijderd

Topicstarter
Vertel mij dan aub hoe..

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 20:22
C#:
1
PictureBox x = (PictureBox)sender;

Alleem moet je dan ipv de naam er uit te halen en in een field te stoppen, gewoon de PictureBox in een field stoppen.
C#:
1
2
// _lastClickedPictureBox is een field van je class
_lastClickedPictureBox = (PictureBox)sender;
curry684 schreef op dinsdag 26 februari 2008 @ 15:15:
[...]

Ik programmeer inmiddels 23 jaar of zo en heb nog steeds wel eens situaties dat ik code van 2 maanden terug zie en denk "wtf was I thinking?" ;)
Ach ja ik zie nog wel eens code van m'n stage van 5 jaar terug... Daar wordt je niet vrolijk van :)

[ Voor 39% gewijzigd door sig69 op 26-02-2008 15:35 ]

Roomba E5 te koop


  • DutchCommando
  • Registratie: November 2000
  • Laatst online: 20:20
Nee.

En ik mag hopen dat voor dit redelijk zware project geen geld neergelegd moet worden. "Professionals" hebben we al genoeg in de software engineering business.

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 08:34

Creepy

Tactical Espionage Splatterer

:w

Ik had al uitgelegd dat het hier niet zo werkte. Gelukkig voor jou wordt je nog op je wenken bedient ook. Mocht het nog niet werken dan kan je een nieuw topic openen mits je je volledig houdt aan de quickstart.

Je mist een behoorlijke bak basiskennis en dat geef je gelukkig zelf ook toe. Op GoT verwachten we dat je het gros van die basiskennis jezelf kan aanleren of in elk geval de moeite probeert te nemen om dat te doen maar zelfs dat laat je nu achterwege.

[ Voor 26% gewijzigd door Creepy op 26-02-2008 21:57 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1

Dit topic is gesloten.