16. september 2010 - 11:09Der er
6 kommentarer og 1 løsning
Event på et byte array.
Hejsa
Jeg har 50-100 UserControl, som viser status på 2 bit i et byte array(input). Der ud over skal jeg styre status på 2 bit, via det samme UserControl, i et andet byte array(output).
De her byte arrays(input/output) bliver opdateret med 100ms interval, måske lidt hurtigere.
jeg vil godt have mulighed for at udvide, så jeg kan sætte et bit eller flere til at toggle, for hver 2. 3. 4. opdatering.
UserControl ligger pt. i en List. Bruger en Timer til at lave selve opdareringen af byte arrays. Begge byte array længde kan være mellem 15 til 62, i værste fald skal jeg have en UserControl for hvert bit i mit byte array.
Er der en smart måde at lave det her på? Er vi ude i noget event styring på UserControl'en?
Jeg har læst dit spørgsmål 8 gange nu, tror jeg. Og jeg fatter simpelthen ikke en bjælde af, hvad du mener. Kunne man lokke dig til at omformulere, eller måske endda poste noget kode, som viser noget af hvad du gør?
Jeg har et byte array, og jeg har en UserControle. UserControle viser status for 2 bit i mit byte array. fx: bit 0 og 1 i array index 0( array[0] & 0x03 ) jeg kopir min UserControle, og ændre hvilke bit og array index de "ser" på. så heler mit byte array er dækket ind.
mit Array opdater for hver 100ms, dvs. mit UserControle også skal opdater.
så jeg hele tiden har et grafisk billede af hvordan byte array'et ser ud.
Senere hen skal det så være muligt at gå den anden vej. ved at klikke på den grafiske del af UserControle , skal et anden byte array opdater.
I første omgang vil jeg helt sikkert vælge ikke at bruge usercontrols. Min første tanke var, at du evt. kunne lave en custom control der repræsenterede en byte rent grafisk "...1...1" - men hvis du skal have lavet op til 500 af dem og de hver især skal gentegne sig tror jeg det ville tage længere tid at tegne, end intervallet mellem dine refreshs.
Hva' med om du laver en control, som har dit array som en data source. I dens OnPaint tegner du den grafiske repræsentation af hele dit array. Det burde være til at overskue med lidt simpelt gdi. Når du så opdaterer dit array, kalder du også Invalidate på din control.
Når du nu selv har tegnet hele controllen, så kan du også hurtigt håndtere museklik på den og finde ud af hvilken bit der er tegnet på hvilken position og derfra opdatere dit andet byte array ud fra det.
Har prøvet det meste af dagen at laven en control, og tror jeg har styr på det.
Men planen er at jeg skal have en control for hvor 2 bit. det skal nemlig også være mulig at vælge hvilke der skal vises. da man kun er interesseret i nogle enkle bit en gang imellem.
Tak for linket har hjulpet en hel del. forstår ikke hvordan den custom control kommer over i toolbox'en, så man kan se den i Design Mode( men det er en anden sag).
Men jeg er stadig af den overbevisning, at du bør nøjes med en enkelt kontrol. Om ikke andet så fordi hver enkelt kontrol du laver bruger et window handle og når vi taler om så mange controller, er der risiko for at dit program bliver en resourceæder.
Et forslag kunne være, at du laver en datastruktur, som indeholder bytearray'et samt informationer til din kontrol om hvordan hver enkelt byte skal renderes. Og så sætter denne struktur op når din control initialiseres.
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.