[C#] ContextMenu

Pagina: 1
Acties:
  • 225 views sinds 30-01-2008
  • Reageer

  • TrasherXL
  • Registratie: September 2002
  • Laatst online: 21-11-2025

TrasherXL

Bicky burger for life

Topicstarter
Ik gebruik in een applicatie een contextmenu. Dit menu wordt at runtime gevuld met waardes uit een bestand. Ik genereer ook netjes event-handlers per toegevoegd item, die in pincipe werken. Maar het probleem is dat ik de index van het geselecteerde item of de text van dat item wil kunnen krijgen, en het contextmenu heeft geen "selected" functie ofzoiets dergelijks.

Weet iemand toevallig hoe dit moet?

ASUS Commando | Core2Duo E6600 @ 3Ghz air-cooled | Geforce 8800GTX | Raid-0 | 4 GB DDR2-800


  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 23-04 14:31
Je krijgt toch de 'sender' mee in de functie?

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 19:09

pjvandesande

GC.Collect(head);

C#:
1
2
3
4
5
6
7
8
9
private void menuItem_Click(object sender, System.EventArgs e)
{
    MenuItem menuItem = sender as MenuItem;

    if(menuItem != null)
    {
        // Doe er iets mee.
    }
}


Aan der hand van je sender kun je het item achterhalen.

edit:
riezebosch, niet snel posten als ik een voorbeeldje tik!

[ Voor 13% gewijzigd door pjvandesande op 30-08-2005 10:07 ]


  • TrasherXL
  • Registratie: September 2002
  • Laatst online: 21-11-2025

TrasherXL

Bicky burger for life

Topicstarter
dat klopt ja, hier heb die proberen te typecasten (want het is een def object) naar een menitem, maar dit werkt niet, dwz de .text optie bv blijft dan leeg

ASUS Commando | Core2Duo E6600 @ 3Ghz air-cooled | Geforce 8800GTX | Raid-0 | 4 GB DDR2-800


  • TrasherXL
  • Registratie: September 2002
  • Laatst online: 21-11-2025

TrasherXL

Bicky burger for life

Topicstarter
ja idd, dat had ik ook al gedaan questa, maar dat werkte niet...

ASUS Commando | Core2Duo E6600 @ 3Ghz air-cooled | Geforce 8800GTX | Raid-0 | 4 GB DDR2-800


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 19:09

pjvandesande

GC.Collect(head);

TrasherXL schreef op dinsdag 30 augustus 2005 @ 10:06:
dat klopt ja, hier heb die proberen te typecasten (want het is een def object) naar een menitem, maar dit werkt niet, dwz de .text optie bv blijft dan leeg
Show is even wat code dan! ;)

  • TrasherXL
  • Registratie: September 2002
  • Laatst online: 21-11-2025

TrasherXL

Bicky burger for life

Topicstarter
questa, echt raar maar die regel van jou werkt wel:

MenuItem menuItem = sender as MenuItem; en dan menuItem.Text.....

en

((MenuItem)sender).Text blijft empty...
vage shit

ASUS Commando | Core2Duo E6600 @ 3Ghz air-cooled | Geforce 8800GTX | Raid-0 | 4 GB DDR2-800


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 19:09

pjvandesande

GC.Collect(head);

TrasherXL schreef op dinsdag 30 augustus 2005 @ 10:11:
questa, echt raar maar die regel van jou werkt wel:

C#:
1
2
MenuItem menuItem = sender as MenuItem;
// en dan menuItem.Text.....


en

C#:
1
2
((MenuItem)sender).Text blijft empty...
vage shit
Het prencipe is hetzelfde. Alleen gooit (MenuItem)sender) misschien een InvalidCastException. In bijde gevallen word gecast, alleen bij de AS operator heb je geen exception maar een null-waarde.

  • dotcode
  • Registratie: Augustus 2003
  • Laatst online: 19-04 14:26

dotcode

///\00/\\

Dan is het object blijkbaar niet van het type waar je naar probeert te casten. Kijk eens in de debugger wat het dan wel is?

  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 19:09

pjvandesande

GC.Collect(head);

dotcode schreef op dinsdag 30 augustus 2005 @ 10:16:
Dan is het object blijkbaar niet van het type waar je naar probeert te casten. Kijk eens in de debugger wat het dan wel is?
Jawel, want anders zou hij niet eens kunnen casten.

  • dotcode
  • Registratie: Augustus 2003
  • Laatst online: 19-04 14:26

dotcode

///\00/\\

Laat eens een stuk je code zien waar je ze vult. Misschien is daar iets aan te zien waardoor het niet zou werken...

  • TrasherXL
  • Registratie: September 2002
  • Laatst online: 21-11-2025

TrasherXL

Bicky burger for life

Topicstarter
nouja:

MenuItem temp = (MenuItem)sender;
temp.Text geeft dan ook de juiste text.

raar normaal hoef ik nooit eerst een referentie te maken, ach ja het werkt bedankt hoor

ASUS Commando | Core2Duo E6600 @ 3Ghz air-cooled | Geforce 8800GTX | Raid-0 | 4 GB DDR2-800


  • dotcode
  • Registratie: Augustus 2003
  • Laatst online: 19-04 14:26

dotcode

///\00/\\

Cool, ik ga effe kijken in de ms-il wat er mis gaat :).

  • dotcode
  • Registratie: Augustus 2003
  • Laatst online: 19-04 14:26

dotcode

///\00/\\

Bij mij werkt het gewoon:
MenuItem mi = (MenuItem)sender;
string s = mi.Text;

string s1 = ((MenuItem)sender).Text;
Levert het zelfde resultaat. Vaag welke compiler gebruik je (1.0/1.1)?

  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 19:09

pjvandesande

GC.Collect(head);

dotcode schreef op dinsdag 30 augustus 2005 @ 10:32:
Cool, ik ga effe kijken in de ms-il wat er mis gaat :).
Hippy, dat kun je in je eigen code ook wel zien. :Z

Anyway, een cast of de AS operator geven hetzelfde resultaat als het goed is. Daar kan het niet aan liggen.

[ Voor 7% gewijzigd door pjvandesande op 30-08-2005 10:44 ]


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
questa schreef op dinsdag 30 augustus 2005 @ 10:43:
[...]

Hippy, dat kun je in je eigen code ook wel zien. :Z

Anyway, een cast of de AS operator geven hetzelfde resultaat als het goed is. Daar kan het niet aan liggen.
Niet helemaal. De As operator returnt als het goed is null als hij niet kan casten en gewoon Casten levert een InvalidCastException op.

Maar al het wel van het type is waar je naar wilt casten zou het idd hetzelfde resultaat op moeten leveren.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • TrasherXL
  • Registratie: September 2002
  • Laatst online: 21-11-2025

TrasherXL

Bicky burger for life

Topicstarter
.NET 1.1

ASUS Commando | Core2Duo E6600 @ 3Ghz air-cooled | Geforce 8800GTX | Raid-0 | 4 GB DDR2-800


  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 23-04 14:31
questa schreef op dinsdag 30 augustus 2005 @ 10:06:
[...]

edit:
riezebosch, niet snel posten als ik een voorbeeldje tik!
offtopic:
Moet je ook maar niet alles voorkauwen ;)

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 19:09

pjvandesande

GC.Collect(head);

rwb schreef op dinsdag 30 augustus 2005 @ 11:01:
[...]

Niet helemaal. De As operator returnt als het goed is null als hij niet kan casten en gewoon Casten levert een InvalidCastException op.

Maar al het wel van het type is waar je naar wilt casten zou het idd hetzelfde resultaat op moeten leveren.
Dit heb ik al uitgelegd. Waar het om gaat is dat er niets verandert aan het object zelf.

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
questa schreef op dinsdag 30 augustus 2005 @ 11:37:
[...]
Dit heb ik al uitgelegd. Waar het om gaat is dat er niets verandert aan het object zelf.
Ik zie het nou ja. Had ik even overheen gelezen. Maar idd het veranderd niks aan het object het zorgt alleen dat je een refference van een ander type kunt gebruiken ( Mits het object dat je wilt casten daar natuurlijk wel aan voldoet ) en het is dus ook niet veel anders als het vertellen van de compiler welk type het is

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 19:09

pjvandesande

GC.Collect(head);

rwb schreef op dinsdag 30 augustus 2005 @ 11:47:
[...]

Ik zie het nou ja. Had ik even overheen gelezen. Maar idd het veranderd niks aan het object het zorgt alleen dat je een refference van een ander type kunt gebruiken ( Mits het object dat je wilt casten daar natuurlijk wel aan voldoet ) en het is dus ook niet veel anders als het vertellen van de compiler welk type het is
Daarom kan ik me niet voorstellen dat het daaraan ligt bij de TS.

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
TrasherXL schreef op dinsdag 30 augustus 2005 @ 10:11:
C#:
1
2
3
MenuItem menuItem = sender as MenuItem;  en dan menuItem.Text.....
en 
((MenuItem)sender).Text blijft empty...

vage shit
wat dan als je dit doet
C#:
1
2
3
4
5
6
7
8
9
MenuItem menuItem = sender as MenuItem;
if( menuItem.Text.Equals( ((MenuItem)sender).Text ) )
{
    MessageBox.Show( "Gelijk" );
}
else
{
    MessageBox.Show( "Niet gelijk" );
}

Krijg je "Gelijk", "Niet gelijk" of een Exception?

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • dotcode
  • Registratie: Augustus 2003
  • Laatst online: 19-04 14:26

dotcode

///\00/\\

Ik krijg gewoon gelijk er uit, dit is ook met 1.1. Misschien ging er iets mis met compilen waardoor je een verkeerde versie aan het bekijken en debuggen was?

Je moet eigenlijk bijna altijd de as opperator gebruiken als je wilt casten. Anders moet je van die try en catch dingen gaan gebruiken die niet zo fijn zijn voor je preformance.

[ Voor 37% gewijzigd door dotcode op 30-08-2005 14:07 ]


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
dotcode schreef op dinsdag 30 augustus 2005 @ 14:03:
Ik krijg gewoon gelijk er uit, dit is ook met 1.1. Misschien ging er iets mis met compilen waardoor je een verkeerde versie aan het bekijken en debuggen was?
Dat zou idd het antwoord moeten zijn en in deze code naast een InvalidCastException ook de enige mogenlijkheid.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:35
Misschien moest je maar ff je *.obj files etc... gewist hebben (de volledige obj folder dus), en je project gerebuilded hebben.

https://fgheysels.github.io/


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 19:09

pjvandesande

GC.Collect(head);

dotcode schreef op dinsdag 30 augustus 2005 @ 14:03:
Ik krijg gewoon gelijk er uit, dit is ook met 1.1. Misschien ging er iets mis met compilen waardoor je een verkeerde versie aan het bekijken en debuggen was?

Je moet eigenlijk bijna altijd de as opperator gebruiken als je wilt casten. Anders moet je van die try en catch dingen gaan gebruiken die niet zo fijn zijn voor je preformance.
Hangt van je cast af. Controleren op null na een as is niet duur, maar moet ook gebeuren. Als je zeker weet dat je cast goed gaat zie ik het probleem niet.

En een try-catch is niet duur, die wordt pas duur na een Exception.

[ Voor 3% gewijzigd door pjvandesande op 30-08-2005 14:50 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:35
questa schreef op dinsdag 30 augustus 2005 @ 14:50:
[...]

En een try-catch is niet duur, die wordt pas duur na een Exception.
Het gooien van een exceptie is duur, die try/catch niet. :)

https://fgheysels.github.io/


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 19:09

pjvandesande

GC.Collect(head);

whoami schreef op dinsdag 30 augustus 2005 @ 15:04:
[...]


Het gooien van een exceptie is duur, die try/catch niet. :)
Precies! :)
Pagina: 1