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

C# object weergeven

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Ik ben bezig met een programma dat items op een panel weergeeft. De items bestaan uit een aantal variabelen en een plaatje. Nu is er op de achtergrond een thread die continu deze items op haalt. Iedere keer als er een is gevonden geeft de thead deze door aan de main thread. Deze gaat kijken of het item met dit id al bestaat. Als hij nog niet bestaat komt hij in een lijst, en wordt hij op het scherm getekent. Bestaat hij al wel worden de gegevens van de bestaande geupdate en de positie op het scherm veranderd. Uiteraard moet hij ook weer makkelijk te verwijderen zijn, als hij bijvoorbeeld voor 1 minuut geen update heeft gehad.

Nu vraag ik me af. Hoe kun je de objecten grafisch weergeven op het scherm op zoon manier dat als ik de X en Y verander hij ook op het scherm van positie veranderd. En als ik dit object uit de lijst haal hij ook automaties verwijderd wordt, zowel grafisch als in de memory.

  • Skamiplan
  • Registratie: Maart 2010
  • Laatst online: 31-10 16:43
Verwijderd schreef op woensdag 15 januari 2014 @ 15:27:
Hoe kun je de objecten grafisch weergeven op het scherm op zoon manier dat als ik de X en Y verander hij ook op het scherm van positie veranderd.
Volgens mij ben je opzoek naar Anchors, http://msdn.microsoft.com...styles%28v=vs.110%29.aspx, dit zorgt er voor dat de controls mee strechen met de parent.

Verwijderd

Topicstarter
Nope,

Wat ik zoek is dat als ik een object aanmaak en toevoeg in lijst X dat hij dat automaties getekend wordt op een panel waarvan de positie afhankelijk is van de X en Y die in dat object staan.

  • Viper®
  • Registratie: Februari 2001
  • Niet online
heel kort door de bocht.

Je panel is waarschijnlijk een object welke weer onder je form instantie valt.

In je update functie kan je door controls loopen of een findcontrol functie gebruiken om controls aan te maken of weer te verwijderen.

Als je via je designer een control op je paneel sleept genereert hij automatisch code welke dit object instantieert en properties zet, vervolgens voegt hij die instantie toe aan je instantie van je paneel/form.
Kijk maar eens in je onload functie (dacht ik)

  • Mavamaarten
  • Registratie: September 2009
  • Laatst online: 22-11 20:31

Mavamaarten

Omdat het kan!

Volgens mij wil je gewoon in de Paint event van je panel de objecten tekenen. Wanneer de "X en de Y verandert" moet je je panel invalidaten zodat het opnieuw wordt getekend. (dat kan met Invalidate() ). Misschien moet je iets specifieker zijn, dan kunnen we je gerichter helpen?

Android developer & dürüm-liefhebber


  • Thijmen
  • Registratie: Juni 2011
  • Laatst online: 25-07 13:16
Kun je dit niet in WPF met Binding doen en DataContext?

Verwijderd

Topicstarter
Ik denk dat Viper juist zit.

Het makkelijkst is denk ik dat mijn objecten van het type picturebox zijn. Als ik die dan als control toevoegen aan de panel.

Dan hoef ik ook geen aparte lijst te hebben waar alle instances instaan, dat is dan de control.


EDIT,

Prachtig jongen.
Het werkt.

Zelf heb ik altijd gewerkt met vb.net maar mijn stagebegelijder zij dat ik beter C#.net kon gebruiken.

[ Voor 45% gewijzigd door Verwijderd op 15-01-2014 17:15 ]


  • Viper®
  • Registratie: Februari 2001
  • Niet online
Ik heb niet heel veel ervaring met vb.net, wel VBA en delphi etc. gehad.

Beide zijn onderdeel van het .net platform, zover ik weet is alleen de notatie/gebruik anders, ook beschikt vb.net niet over alle library/functies als c# en vice versa. Er zijn zelfs converters om code vb.net <> c# om te zetten.

Persoonlijk heeft c# mijn voorkeur, maar dit kan puur eigen ervaringsvoorkeur zijn.

verschillen: Wikipedia: Comparison of C Sharp and Visual Basic .NET

  • ObiTewodros
  • Registratie: April 2011
  • Laatst online: 05-04 22:22
Post iets zinnigs of post niets :z

[ Voor 84% gewijzigd door RobIII op 15-01-2014 22:30 ]


Verwijderd

Topicstarter
Jongens, het volgende.

Nu ben ik bezig met het maken van de thread die de objecten maakt en doorgeeft aan de main thread. Helaas krijg ik het niet voor elkaar om een fatsoenlijke thread te maken en een event die het doorgeeft.

De thread draait zolang als de applicatie draait.

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 09:22
Wat lukt er niet dan?

Roomba E5 te koop


Verwijderd

Topicstarter
Ik zie eigenlijk door de bomen het bos niet meer. Wat ik nodig heb is een event die ik en thread A kan raisen en in thread B kan opvangen, waar thread A een child is van thread B.

  • Jan_V
  • Registratie: Maart 2002
  • Laatst online: 00:00
Je zou een soort van Event Driven Architecture kunnen toepassen om de events over je gehele applicatie te versturen.

Ik heb hier een redelijk 'eenvoudig' voorbeeld gevonden: http://dotnet.dzone.com/articles/introduction-event-driven

Volgens mij moet het ook wel kunnen door gebuik te maken van de TPL, dat je een Task retourneert uit een thread en daar vervolgens iets mee gaat doen in een andere methode. Hier heb ik geen voorbeeld van, ook heb ik nog weinig gewerkt met de TPL om hier zeker van te zijn.

Battle.net - Jandev#2601 / XBOX: VriesDeJ


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 09:22
Ik zit op m'n telefoon dus ga er geen hele uitgebreide post van maken, maar in de simpelste vorm zou het zijn als:
-Definieer een event in je form
-Maak een eventhandler voor het event in je onload of iets dergelijks
-Start een thread die nieuwe items ophaalt en het event raised
-Nog even rekening houden met dit: MSDN: How to: Make Thread-Safe Calls to Windows Forms Controls

Zou je een eind moeten komen

Roomba E5 te koop


  • Styxxy
  • Registratie: Augustus 2009
  • Laatst online: 22-11 11:22
Viper® schreef op woensdag 15 januari 2014 @ 17:22:
Beide zijn onderdeel van het .net platform, zover ik weet is alleen de notatie/gebruik anders, ook beschikt vb.net niet over alle library/functies als c# en vice versa. Er zijn zelfs converters om code vb.net <> c# om te zetten.
VB.NET heeft alle features dat je nodig hebt net zoals C#. Sommige syntactical sugar is er niet, maar dat doet er weinig toe.

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 22:50
Jup, alle libraries van C# zouden het ook met VB.NET moeten doen, op die paar na die unsafe code (C++/CLI etc) er in hebben staan.
Als je echt de verschillen wilt weten kan je Wikipedia raadplegen. Geen idee of ze allemaal kloppen hoor :) Wikipedia: Comparison of C Sharp and Visual Basic .NET#Language_features Wat fijner werkt komt wel een beetje op voorkeur (en kennis) neer.

Maar volgens mij dwalen we alweer af ^^

  • Viper®
  • Registratie: Februari 2001
  • Niet online
Styxxy schreef op woensdag 15 januari 2014 @ 23:55:
[...]

VB.NET heeft alle features dat je nodig hebt net zoals C#. Sommige syntactical sugar is er niet, maar dat doet er weinig toe.
Ik weet niet meer precies welke functie, maar een tijdje geleden moest ik iets doen wat in vb.net met een standaard functie kon en in c# niet.

Dit is ook een voorbeeld, reverse string.
c# libraries bevat hiervoor geen standaard functie.
Of je moet een referentie leggen naar de vb libraries en deze gebruiken:
code:
1
2
string strModified = Microsoft.VisualBasic.Strings.StrReverse(strOriginal);
MessageBox.Show(strModified);


Of je moet je eigen functie maken:
code:
1
2
3
4
5
6
public static string Reverse( string s )
{
    char[] charArray = s.ToCharArray();
    Array.Reverse( charArray );
    return new string( charArray );
}

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
@Viper: Als je dan toch een eigen functie maakt, maak er dan meteen een extension method van ;)

“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.”


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Woy schreef op donderdag 16 januari 2014 @ 14:59:
@Viper: Als je dan toch een eigen functie maakt, maak er dan meteen een extension method van ;)
Zorg dan eerst even dat 'ie fatsoenlijk met unicode en surrogate pairs etc. werkt ;)

[ Voor 3% gewijzigd door RobIII op 16-01-2014 15:09 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
RobIII schreef op donderdag 16 januari 2014 @ 15:08:
[...]

Zorg dan eerst even dat 'ie fatsoenlijk met unicode en surrogate pairs etc. werkt ;)
Een char in .NET is gewoon een unicode char, dus ik zie niet waarom dat niet zou moeten werken? Het is niet zoals in C(++) dat er verschil is tussen een char en wchar.

[ Voor 10% gewijzigd door Woy op 16-01-2014 15:17 ]

“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.”


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Woy schreef op donderdag 16 januari 2014 @ 15:16:
[...]

Een char in .NET is gewoon een unicode char, dus ik zie niet waarom dat niet zou moeten werken? Het is niet zoals in C(++) dat er verschil is tussen een char en wchar.
Zie http://stackoverflow.com/a/15111719/215042
Even uitgewerkt hier.

Spot de verschillen:
Afbeeldingslocatie: http://tweakers.net/ext/f/qwooN1VUevOsdsX6ifs9lTMZ/full.png

Zie ook http://csharp.2000things....essed-as-surrogate-pairs/

De StrReverse implementatie van MS ziet er zo uit (ILSpy, heb de originele code even niet bji de hand (als die er al is kan 'm in ieder geval niet vinden in Net 4.5.1)):
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
public static string StrReverse(string Expression)
{
    if (Expression == null)
    {
        return "";
    }
    int length = Expression.Length;
    if (length == 0)
    {
        return "";
    }

    checked
    {
        int num = length - 1;
        for (int i = 0; i <= num; i++)
        {
            char c = Expression[i];
            UnicodeCategory unicodeCategory = char.GetUnicodeCategory(c);
            if (unicodeCategory == UnicodeCategory.Surrogate || unicodeCategory == UnicodeCategory.NonSpacingMark || unicodeCategory == UnicodeCategory.SpacingCombiningMark || unicodeCategory == UnicodeCategory.EnclosingMark)
            {
                return Strings.InternalStrReverse(Expression, i, length);
            }
        }
        char[] array = Expression.ToCharArray();
        Array.Reverse(array);
        return new string(array);
    }
}

private static string InternalStrReverse(string Expression, int SrcIndex, int Length)
{
    StringBuilder stringBuilder = new StringBuilder(Length);
    stringBuilder.Length = Length;
    TextElementEnumerator textElementEnumerator = StringInfo.GetTextElementEnumerator(Expression, SrcIndex);
    if (!textElementEnumerator.MoveNext())
    {
        return "";
    }
    int i = 0;
    checked
    {
        int j = Length - 1;
        while (i < SrcIndex)
        {
            stringBuilder[j] = Expression[i];
            j--;
            i++;
        }
        int num = textElementEnumerator.ElementIndex;
        while (j >= 0)
        {
            SrcIndex = num;
            if (textElementEnumerator.MoveNext())
            {
                num = textElementEnumerator.ElementIndex;
            }
            else
            {
                num = Length;
            }
            for (i = num - 1; i >= SrcIndex; i--)
            {
                stringBuilder[j] = Expression[i];
                j--;
            }
        }
        return stringBuilder.ToString();
    }
}

De grap nu: Die geeft ook 't "verkeerde" resultaat. Al kun je twisten wat "verkeerd" is...

[ Voor 125% gewijzigd door RobIII op 16-01-2014 17:55 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Caelorum
  • Registratie: April 2005
  • Laatst online: 22:50
En weer wat geleerd ^^
Pagina: 1