Avatar billede justincase1089 Nybegynder
06. juli 2009 - 12:15 Der er 7 kommentarer og
1 løsning

UITypeEditor som altid trigger en PropertyValueChanged

Hej

Her er et spørgsmål som jeg faktisk er lidt i tvivl om om der overhovedet findes en løsning på. Jeg har et objekt hvorpå der sidder en public property af typen string. Objektet sidder på SelectedObject på et propertygrid og til editering af stringen har jeg en UITypeEditor tilknyttet. Selvom propertien jeg retter i ikke nødvendigvis ændrer sig, dvs stringen stadig er den samme vil jeg gerne raise PropertyValueChanged eventen på propertygriddet når UITypeEditoren lukkes. hvordan gør jeg det?

MVH Justin Case
Avatar billede montago Praktikant
06. juli 2009 - 12:44 #1
kan du ikke bare invoke eventet selv ?

PropertyValueChanged(null, null);

alt efter om du benytter [sender] eller [e]
Avatar billede justincase1089 Nybegynder
06. juli 2009 - 12:49 #2
Hvor vil du have jeg skal gøre det ?

public class MyPropertyEditor : UITypeEditor
{
    public override object EditValue(ITypeDescriptorContext context, IServiceProvider sp, object value)
    {
        // Det er her hvor jeg laver noget som skal resultere i at eventen triggeres
        return value.ToString();
    }

    public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
    {
        return UITypeEditorEditStyle.Modal;
    }
}
Avatar billede montago Praktikant
06. juli 2009 - 13:40 #3
lige inden, eller efter du laver din return skal du have fat i PropertyGrid'et enten ved reflection på [value] objektet eller ved noget fikumudik ...


alt efter hvordan dit program er struktureret, kan man jo tillade sig at have en statisk property et sted, som peger på det Grid er igang med at redigere...

det kan også være du kan finde en smartere måde at få adgang til grid'et

men når du endelig har fat i det.. skal du udføre følgende:

myPropertyGrid.PropertyValueChanged(myPropertyGrid, null);
Avatar billede justincase1089 Nybegynder
06. juli 2009 - 17:04 #4
Min app er struktureret på sådan vis at en static property ikke duer og jeg har forsøgt at lave fikumdik et et par timer nu :-).

Det tætteste jeg er kommet på er ved faktisk at hæfte en non browsable property på mit objekt ved siden af min string property. Denne property har propertygriddet på sig. Inde i UITypeEditoren kan jeg imidlertid ikke komme til mit propertygrid selvom propertyen tydeligvis hænger på context.Instance for det ser ud som om listen med properties er private. Gag nammit!
Avatar billede justincase1089 Nybegynder
06. juli 2009 - 17:41 #5
Jeg er iøvrigt heller ikke helt sikker på hvor du får myPropertyGrid.PropertyValueChanged(myPropertyGrid, null); fra? Er det det propertygrid der er følger med som du finder en PropertyValueChanged metode på?
Avatar billede montago Praktikant
06. juli 2009 - 22:15 #6
oki - for at være ærlig har jeg aldrig brugt et PropertyGrid før...

men den umiddelbare løsning jeg kunne komme på, var at aktivere den event du savner, selv.

ifølge MSDN : http://msdn.microsoft.com/en-us/library/system.windows.forms.propertygrid.propertyvaluechanged.aspx

sidder eventet på PropertyGrid'et... dvs dét grid du har...
jeg kaldte den så bare for [myPropertyGrid] ...


det er et lidt tricky scenarie du har gang i :-)
Avatar billede justincase1089 Nybegynder
07. juli 2009 - 03:38 #7
Der er sjælden nogen herinde der når de svarer på de mere komplicerede spørgsmål har prøvet det det det svarer på :-)

Så vidt jeg ved kan man ikke programmatisk trigge events så som den event her. Det eneste jeg kan er at gøre noget som trigger en event.

Anyway, jeg har fået det til at virke nu. Kort fortalt ved at jeg giver mit objekt som jeg knytter til propertygriddet en delegate metod med ind som jeg så kan få fat på inde i min EditValue metode. Dermed kan jeg kalde min update funktioanlitet i mit main program

Justin Case
Avatar billede justincase1089 Nybegynder
12. februar 2010 - 10:56 #8
tjaa
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester