[Visual studio 2013] MSG tool

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • LangeTreeDorpie
  • Registratie: Januari 2015
  • Laatst online: 15-08 14:28
Hallo mede-Tweakers,

Ik heb een tooltje gemaakt in Visual Studio 2013. Dit is ook de eerste keer dat ik VS2013 aanraak dus ik ben nog een beginner :+. Alleen ben ik over 1 ding nog niet tevreden en weet niet hoe ik het moet oplossen.

Uitleg van de werking:
Het is een programma die het cmd command "msg" gebruikt. Voorbeeld:

Afbeeldingslocatie: https://i.imgur.com/zoD9uND.png

Dit is hoe het tooltje eruit ziet:

Afbeeldingslocatie: https://i.imgur.com/GeHosIH.png

Ik heb het een beetje bewerkt met paint omdat ik de gebruikers liever niet laat zien. De rode lijn is de scheiding van advanced mode. Die mode heb ik gemaakt omdat er niet alleen ICT'er gebruik gaan maken van dit tooltje.

Dit is een deel van de code (het is een bende maar het werkt :+) :

Afbeeldingslocatie: https://i.imgur.com/rlkusb0.png

Tot zover is het nog prima. Even een voorbeeld in actie:

Afbeeldingslocatie: https://i.imgur.com/jrmIW0Y.png

Uitleg van het probleem:

Ik heb een "treeview" gemaakt om allen gebruikers netjes in een lijst te zetten. Hierin heb ik alle accounts met naam handmatig toegevoegd. dit is de code die erachter zit:

Afbeeldingslocatie: https://i.imgur.com/4RzMF90.png

Maar als er een nieuwe gebruiker komt staat deze niet in de lijst. Daarom wil ik een soort mappen structuur aanmaken die er bijvoorbeeld zo uit ziet:

Afbeeldingslocatie: https://i.imgur.com/cnviiUB.png

Hierdoor zou ik de gebruikerslijst kunnen aanpassen zonder VS2013 op mijn computer te hebben.

Mijn vraag:

Hoe codeer ik zo'n mappen structuur of iets waardoor ik het VS2013 niet hoeft op te starten om het te kunnen veranderen?
Ik heb heel het internet afgezocht maar kan niks vinden (zodat ik het begrijp). Kan iemand dit op een makkelijke manier uitleggen?

Alvast bedankt :)

Intel i7 13700k | RTX 3080 | 32GB Geheugen


Acties:
  • +1 Henk 'm!

  • Rannasha
  • Registratie: Januari 2002
  • Laatst online: 12-09 09:54

Rannasha

Does not compute.

Om dit te bereiken moet je de TreeView dynamisch gaan opbouwen. Dat wil zeggen dat in plaats van het handmatig toevoegen van alle entries in VS, je bij het starten van het programma de gegevens ergens vandaan haalt en vervolgens programmatisch de TreeView opbouwt.

Dit kan bijvoorbeeld op deze manier:
Visual Basic:
1
2
3
4
5
6
7
treeView1.BeginUpdate()
treeView1.Nodes.Add("Parent")
treeView1.Nodes(0).Nodes.Add("Child 1")
treeView1.Nodes(0).Nodes.Add("Child 2")
treeView1.Nodes(0).Nodes(1).Nodes.Add("Grandchild")
treeView1.Nodes(0).Nodes(1).Nodes(0).Nodes.Add("Great Grandchild")
treeView1.EndUpdate()

(bron: Microsoft .NET documentatie)

De BeginUpdate() functie voorkomt dat het programma de TreeView opnieuw gaat tekenen, waardoor je de mogelijkheid hebt om wijzigingen aan te brengen aan de structuur. Nadat je klaar bent, roep je EndUpdate() aan zodat de TreeView weer gewoon gaat functioneren.

De volgende stap is de vraag hoe je de bron-gegevens het makkelijkst kunt beheren. Een mappenstructuur op de schijf kan (Google op ".NET file system functions" voor een hele waslijst aan functies om mappen en bestanden mee te benaderen), maar is bepaald niet elegant. Ik zou zelf kiezen voor een XML bestand, bijvoorbeeld iets als dit:
XML:
1
2
3
4
5
6
<category name="ICT">
    <person name="Thijs" username="StageICT" />
    <person name="Bob" username="Bob" />
</category>
<category name="Directie">
...

Of iets in die richting.

Dit XML bestand kun je inladen in een XmlDocument object, waarmee je makkelijk door alle nodes heen kunt lopen. Je hoeft je dus niet bezig te houden met het inlezen en parsen van het XML bestand, dat wordt door de XmlDocument klasse geregeld.

Kortom: Maak in de VS designer de TreeView helemaal leeg. Sla de data op in een XML structuur die voor jouw project handig opgezet is. In de OnLoad event handler van je main form laad je dit in een XmlDocument object, waarmee je vervolgens de TreeView opbouwt.

Ongerelateerde tips:
- Je kunt op Tweakers je code in code-tags zetten, dat leest wat makkelijker dan een screenshot.
- Probeer je UI elementen een echte naam te geven in plaats van de standaard naam RichTextBox3 zegt vrij weinig over wat het doel van deze component is. Zeker als je code uitgebreider wordt, kan dit de leesbaarheid zeer sterk hinderen. Er zijn verschillende manieren om dit te doen, maar zelf gebruik ik een systeem waarbij de naam begint met een afkorting voor het elementtype, gevolgd door het doel van het object. Bijvoorbeeld btnSend voor de verzend-knop.

|| Vierkant voor Wiskunde ||


Acties:
  • 0 Henk 'm!

  • LangeTreeDorpie
  • Registratie: Januari 2015
  • Laatst online: 15-08 14:28
Rannasha schreef op donderdag 12 januari 2017 @ 11:03:
Om dit te bereiken moet je de TreeView dynamisch gaan opbouwen. Dat wil zeggen dat in plaats van het handmatig toevoegen van alle entries in VS, je bij het starten van het programma de gegevens ergens vandaan haalt en vervolgens programmatisch de TreeView opbouwt.

Dit kan bijvoorbeeld op deze manier:
Visual Basic:
1
2
3
4
5
6
7
treeView1.BeginUpdate()
treeView1.Nodes.Add("Parent")
treeView1.Nodes(0).Nodes.Add("Child 1")
treeView1.Nodes(0).Nodes.Add("Child 2")
treeView1.Nodes(0).Nodes(1).Nodes.Add("Grandchild")
treeView1.Nodes(0).Nodes(1).Nodes(0).Nodes.Add("Great Grandchild")
treeView1.EndUpdate()

(bron: Microsoft .NET documentatie)

De BeginUpdate() functie voorkomt dat het programma de TreeView opnieuw gaat tekenen, waardoor je de mogelijkheid hebt om wijzigingen aan te brengen aan de structuur. Nadat je klaar bent, roep je EndUpdate() aan zodat de TreeView weer gewoon gaat functioneren.

De volgende stap is de vraag hoe je de bron-gegevens het makkelijkst kunt beheren. Een mappenstructuur op de schijf kan (Google op ".NET file system functions" voor een hele waslijst aan functies om mappen en bestanden mee te benaderen), maar is bepaald niet elegant. Ik zou zelf kiezen voor een XML bestand, bijvoorbeeld iets als dit:
XML:
1
2
3
4
5
6
<category name="ICT">
    <person name="Thijs" username="StageICT" />
    <person name="Bob" username="Bob" />
</category>
<category name="Directie">
...

Of iets in die richting.

Dit XML bestand kun je inladen in een XmlDocument object, waarmee je makkelijk door alle nodes heen kunt lopen. Je hoeft je dus niet bezig te houden met het inlezen en parsen van het XML bestand, dat wordt door de XmlDocument klasse geregeld.

Kortom: Maak in de VS designer de TreeView helemaal leeg. Sla de data op in een XML structuur die voor jouw project handig opgezet is. In de OnLoad event handler van je main form laad je dit in een XmlDocument object, waarmee je vervolgens de TreeView opbouwt.

Ongerelateerde tips:
- Je kunt op Tweakers je code in code-tags zetten, dat leest wat makkelijker dan een screenshot.
- Probeer je UI elementen een echte naam te geven in plaats van de standaard naam RichTextBox3 zegt vrij weinig over wat het doel van deze component is. Zeker als je code uitgebreider wordt, kan dit de leesbaarheid zeer sterk hinderen. Er zijn verschillende manieren om dit te doen, maar zelf gebruik ik een systeem waarbij de naam begint met een afkorting voor het elementtype, gevolgd door het doel van het object. Bijvoorbeeld btnSend voor de verzend-knop.
Dankje voor de uitgebreide reactie :)

Ik heb al veel geprobeerd maar heb nog een paar vragen

Visual Basic:
1
2
3
4
5
6
7
treeView1.BeginUpdate()
treeView1.Nodes.Add("Parent")
treeView1.Nodes(0).Nodes.Add("Child 1")
treeView1.Nodes(0).Nodes.Add("Child 2")
treeView1.Nodes(0).Nodes(1).Nodes.Add("Grandchild")
treeView1.Nodes(0).Nodes(1).Nodes(0).Nodes.Add("Great Grandchild")
treeView1.EndUpdate()


Wat betekenen de (0) en (1) hier?

De manier van de mappen structuur is niet zo netjes nee maar ik wist niet hoe het anders moest. Dus de XML oplossing lijkt me prima. Ik alleen niet hoe ik VS2013 de XML file kan laten uitlezen :| . Moet dit met "using system.io" of enig ander "using ---"?

Ik weet ook niet of ik het .XML bestand op de juiste manier heb aangemaakt. Ik heb het via VS2013 gedaan en het staat nu langs mijn form.vb bestanden.

antwoord op de tips:
Tip 1: Ik ga de code-tags gebruiken. Ik zie nu in de quote hoe het moet.
Tip 2: Ik weet het maar ik verwachtte dat dit niet mijn uiteindelijke project zou zijn omdat dit mijn eerste project was. Nou is dat natuurlijk geen excuus.

Intel i7 13700k | RTX 3080 | 32GB Geheugen


Acties:
  • 0 Henk 'm!

  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 20:46
Pentiumdualcore schreef op donderdag 12 januari 2017 @ 15:20:
[...]
De manier van de mappen structuur is niet zo netjes nee maar ik wist niet hoe het anders moest. Dus de XML oplossing lijkt me prima. Ik alleen niet hoe ik VS2013 de XML file kan laten uitlezen :| . Moet dit met "using system.io" of enig ander "using ---"?
Visual studio hoeft in feite de XML niet te lezen : dat dient jouw applicatie te doen.

Acties:
  • +1 Henk 'm!

  • Rannasha
  • Registratie: Januari 2002
  • Laatst online: 12-09 09:54

Rannasha

Does not compute.

De Nodes structuur is een array, oftewel een lijst met meerdere elementen. Met Nodes(0) spreek je het eerste element aan, met Nodes(1) het tweede, enz... In een TreeView kunnen dergelijke structuren genest zijn, vandaar dat je uitdrukkingen ziet als

Visual Basic .NET:
1
treeView1.Nodes(0).Nodes(1).Nodes.Add("Grandchild")

Hier wordt van de TreeView de eerste node geselecteerd en daarvan de tweede kind-node, waar vervolgens met de Add() functie nog een node aan toegevoegd wordt.
Ik alleen niet hoe ik VS2013 de XML file kan laten uitlezen :| . Moet dit met "using system.io" of enig ander "using ---"?

Ik weet ook niet of ik het .XML bestand op de juiste manier heb aangemaakt. Ik heb het via VS2013 gedaan en het staat nu langs mijn form.vb bestanden.
Om van de XmlDocument class gebruik te maken moet je System.Xml includen, dus:
Visual Basic .NET:
1
using System.Xml

gebruiken.

Om een XML bestand te laden, doe je het volgende:
Visual Basic .NET:
1
2
Dim doc As XmlDocument = New XmlDocument()
doc.Load("c:\map\submap\bestand.xml")


Hiermee kun je direct het pad naar een XML bestand doorgeven. Dat kan willekeurig waar op je PC staan.

|| Vierkant voor Wiskunde ||