C# Vraagje

Vragen die je boven niet kwijt kunt, kan je hier stellen.

Moderator: Moderators

Plaats reactie
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13370
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

C# Vraagje

Bericht door Arie Kabaalstra »

Luitjes.. ik weet dat er hier een aantal mensen zitten die niet vies zijn van een stevig robbertje programmeren..

Momenteel zit ik een beetje te prutsen in VB.NET (Visual Studio 2019), ik wil een G-code Editortje maken voor de EMCOturn 120.

Ik ben al een heel eind gekomen.. 'k heb zelfs al voor elkaar gekregen dat de 12 softkeys onderin het scherm "meerekken" met de GUI als ik het maximaliseer.. de middelste 4 blijven in het midden, de rechter schuiven mee met de rechterkant, en de linker blijven links staan.. ('k heb dit al een paar keer aangegeven bij Bert Eding, maar in EdingCNC is dit nog steeds niet het geval.. :lol:
EMCOturn 120 .jpg
Ik ben een beetje in de stijl van de EMCO besturing gebleven, dus een zwart scherm met groene letters, bediening van het geheel met Softkeys, zodat je niet iedere keer naar een muis hoeft te grijpen.. en rechts in het scherm heb ik een paar Textboxen verstopt.. normaliter zie je ze niet, maar zodra je bijvoorbeeld een Toolchange wilt doen.. (F1), dan komen ze naar de voorgrond, en in de ene box wordt tekst getoond, en in het tweede boxje vul je de waarden in.. (die peuter ik er later wel weer uit om G-Code regels samen te stellen, da's niet heel spannend.

het probl.. de uitdaging zit em nu in het volgende.. als ik de laatste waarde heb ingevoerd, (je gaat met Enter naar de volgende regel) moet ik de invoer "bevestigen", mijn gedachte is : na elke waarde geef je "Enter", heb je de laatste gehad, druk je weer op Enter.. (dus 2 keer Enter)
en dan zou ik dus de invoer uit de tweede box om moeten gaan zetten naar de code.. en die in het programma invoeren op cursorpositie..

Hoe breng ik 't programma nu aan het verstand dat ik de inhoud van de invoerbox wil omzetten als ik 2 keer achter elkaar op Enter druk?..ik heb gezocht in Google, wel wat snippers code gevonden, maar geen van die suggesties werkt..

Als alles klaar is, dan wil ik er ook RS232 communicatie in gaan zetten.. zodat ik 1 programma heb om code te kloppen, en het daarna in de machine te schieten, of om code uit de machine meteen in de Editor te sleuren, maar dat is van later zorg..
Je hebt niet voldoende permissies om de bijlagen van dit bericht te bekijken.
Laatst gewijzigd door Arie Kabaalstra op 18 feb 2022 12:10, 1 keer totaal gewijzigd.
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13370
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: VB Vraagje

Bericht door Arie Kabaalstra »

Laat maar... :lol: Ik ben er al uit.. ik had gisteren al iets in deze richting.. maar waar je de parameter entercount definieert is wel belangrijk natuurlijk.. die moet je niet in deze sub pas definieren, maar bovenin het programma.. anders zet ie em na elke Keydown op 0.. Duhhh..

Code: Selecteer alles

Private Sub TextBox3_KeyDown(sender As Object, e As KeyEventArgs) Handles TextBox3.KeyDown
        TextBox4.Text = entercount
        If e.KeyCode = Keys.Escape Then
            BoxClear()
            TextBox2.SendToBack()
            TextBox3.SendToBack()

        End If
        If e.KeyCode = Keys.Enter Then
            entercount = entercount + 1
            TextBox4.Text = entercount
            If entercount = 2 Then
                MsgBox(" 2 keer!!")
                entercount = 0
            End If
        Else
            entercount = 0
        End If
    End Sub
Deze doet het!
hfjbuis
Donateur
Berichten: 3056
Lid geworden op: 13 feb 2017 00:26
Locatie: Hoensbroek

Re: VB Vraagje

Bericht door hfjbuis »

Arie,

Je kunt aangeven welke "control" de focus moet krijgen na een enter (of tab). Daarmee loop je snel door je parameters heen. Als laatste "control" in de lijst, kun je een knop (Button) zetten die dan
de inhoud van de invoerbox wil omzetten als ik 2 keer achter elkaar op Enter druk
uitvoert.

De volgorde regel je d.m.v. het zetten van de "TabIndex" van de control.
Wil je een "control" overslaan, zet dan "Accepts Returns" en/of "Accepts Tabs" op false.
There are only 2 limits, the sky and your imagination
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13370
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: VB Vraagje

Bericht door Arie Kabaalstra »

Ik doe het (zoals gewoonlijk) weer net even anders... de "Dialoog" bestaat momenteel nog uit 2 textboxen, één met de tekst, en één voor de invoer..
die invoer stamp ik naderhand (dus na bevestiging) in een listbox
dan kan ik gewoon op regelindex de parameters eruit peuteren..

zoals ik het nu doe (weer wat anders bedacht.. zodra ik in de invoer textbox naar regel nummer zoveel spring grabbelt ie de input eruit, en verwerkt het..
dat regelnummer.. dat peuter ik uit de TextChanged Event, middels GetlineFromCharIndex(TextBox3.SelectionStart)

Gisteravond, terwijl ik onder het gemalen water stond, kwam er weer een nieuw idee op bij me.. in een DataGridview kun je veel makkelijker de index eruit peuteren om te kijken waar je staat.., Dus.. (eerst koffie).. ik ga zo even een DataGridview in mijn Code frommelen..
hfjbuis
Donateur
Berichten: 3056
Lid geworden op: 13 feb 2017 00:26
Locatie: Hoensbroek

Re: VB Vraagje

Bericht door hfjbuis »

Dat datagridview onder Windows10 gaat niet altijd goed. De gridlijnen zijn dan niet zichtbaar. De oplossing is eenvoudig, sommige Windows kleuren aanpassen.

Mocht je het probleem hebben, dan deze regfile starten. De regfile om de kleurverandering weer ongedaan te maken, zit er ook in.
Misschien heb je dit probleem niet, dan is het inmiddels gefixed.
ColorsWindows10.zip
Je hebt niet voldoende permissies om de bijlagen van dit bericht te bekijken.
There are only 2 limits, the sky and your imagination
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13370
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: VB Vraagje

Bericht door Arie Kabaalstra »

hfjbuis schreef: 03 feb 2022 12:54 De gridlijnen zijn dan niet zichtbaar.
Is niet erg.. we spreken over dialoogjes met een beperkt aantal inputs.

Alleen is het opvragen van de actieve row nog niet zo makkelijk als ik gedacht had.. 't idee is om met een Keydownevent, de "Enter"op te vangen, zodra deze op de onderste regel van de Datagridview staat.. , dan moet ie de gegevens eruit peuteren en in de code mikken
hfjbuis
Donateur
Berichten: 3056
Lid geworden op: 13 feb 2017 00:26
Locatie: Hoensbroek

Re: VB Vraagje

Bericht door hfjbuis »

In een datagridview is er bij enter een cel geselecteerd die in de lijst SelectedCells (kan meer dan één cel zijn geselecteerd) staat.
datagridview.SelectedCells.Item(0).RowIndex is dan de geselecteerde Row, met de kolom gaat het net zo.

Van te voren controleren of SelectedCells niet null is en daarna of SelectedCels.Count > 0 is, anders kan het programma crashen!!!!
There are only 2 limits, the sky and your imagination
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13370
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: VB Vraagje

Bericht door Arie Kabaalstra »

hfjbuis schreef: 03 feb 2022 19:49 Van te voren controleren of SelectedCells niet null is en daarna of SelectedCels.Count > 0 is, anders kan het programma crashen!!!!
en hoe doe ik dat?.. 'k probeer van alles.. maar ik krijg nog geen textboxje gevuld met de index van de huidige regel.. de gedachtengang is om met bijvoorbeeld Keydown te kijken of ie in de onderste cel staat in de tweede kolom, kolom index is niet belangrijk.. de eerste kolom staat read-only..

zodra ik kan uitvlooien of ie in de onderste row staat, en ik vang een e.keycode = keys.enter op.. dan kan ik de gridview leegtrekken en de gegevens in een stuk code knopen.
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13370
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: VB Vraagje

Bericht door Arie Kabaalstra »

Code: Selecteer alles

Private Sub DataGridView1_SelectionChanged(sender As Object, e As EventArgs) Handles DataGridView1.SelectionChanged
        Dim selrow As Integer = DataGridView1.SelectedCells.Item(0).RowIndex
        TextBox5.Text = selrow.ToString

    End Sub
hehe.. is dat nou alles?.. verdikke.. op een C# pagina kwam ik tegen dat je dat kon afvangen met een Selectionchanged Event.. en die werkt dus.. zodra ik naar een andere cel verhuis.. verspringt het getalletje in Textbox 5..

Ik moet het nog even typselen.. maar als ik dan in het Datagridview1.keydown Event kijk naar de index als ik enter in hei.. en hij staat op 7.. dan moet ie dus de code gaan maken en in het programma zetten..
hfjbuis
Donateur
Berichten: 3056
Lid geworden op: 13 feb 2017 00:26
Locatie: Hoensbroek

Re: VB Vraagje

Bericht door hfjbuis »

Arie Kabaalstra schreef: 03 feb 2022 23:02 hehe.. is dat nou alles?..
Zodra je het weet is het al een stuk gemakkelijker!
There are only 2 limits, the sky and your imagination
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13370
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: VB Vraagje

Bericht door Arie Kabaalstra »

Ja.. maar ik blijf tegen dingen aanlopen.. met Keydown kreeg ik niets boven water.. met een SelectionChanged Event wel..
Als ik daarmee door de Gridview heen liep, zag ik keurig de waarde in het textboxje veranderen.. alleen..om die waarde eruit te peuteren als ie hoger dan 7 was?.. kreeg ik niet voor elkaar.. ik heb dus nog een extra rij toegevoegd.. of je nou Enter drukt, of pijltje naar benee.. zodra je ONDER de regel met "OK" komt.. laat ik de Gridview verdwijnen..

Nou komt het volgende.. zodra ik de gridview wis..'k peuter de data eruit, en gooi em leeg.. dan Crasht de applicatie..

hoe vang ik dat nou weer af?. om nou elke keer alle cellen leeg te gaan maken?.. da's ook een gedoe..
Gebruikersavatar
hugo stoutjesdijk
Donateur
Berichten: 11995
Lid geworden op: 02 mar 2011 17:04
Locatie: elst (u)
Contacteer:

Re: VB Vraagje

Bericht door hugo stoutjesdijk »

Arie Kabaalstra schreef: 04 feb 2022 00:08. om nou elke keer alle cellen leeg te gaan maken?.. da's ook een gedoe..
Lijkt me ook maar 1 regeltje, en dat hoef je niet zelf steeds te doen. :lol:
Gewoon netjes de boel schoonmaken en opruimen als je het niet meer nodig hebt, zo doe je dat in je werkplaats toch ook?
(maar eigenlijk denk ik dat het probleem ergens anders zit)

Ik heb veel met Delphi gedaan in het verleden, en nooit begrepen wat er nu eigenlijk Visual is bij dat VB, en er crashte ook nooit wat bij dat soort geintjes. Helaas vergane glorie.
Ik ben voor meer techniek op school, maar dan wel vanaf groep 1 basischool.
hfjbuis
Donateur
Berichten: 3056
Lid geworden op: 13 feb 2017 00:26
Locatie: Hoensbroek

Re: VB Vraagje

Bericht door hfjbuis »

De applicatie crasht waarschijnlijk omdat er een change event gegenereert wordt als de gridview verwijderd wordt. Dan benaderd de event change routine een gridview die er niet meer is en dat gaat fout.

Je kunt alle objecten in een list, array, ect met één regel code bewerken door een for each next loop te gebruiken.

Code: Selecteer alles

Voor elke kolom
  voor elk item in de kolom
    wis het item
    next
  next

For Each row As DataGridViewRow In DataGridView1.Rows
  For Each item As String In row.items
    item=""
  next
next
!!!Niet getest, kunnen fouten in staan!!!
Hier de uitleg van MS en onderaan een voorbeeld:
https://docs.microsoft.com/en-us/dotnet ... -statement
There are only 2 limits, the sky and your imagination
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13370
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: VB Vraagje

Bericht door Arie Kabaalstra »

't zal er wel aan liggen dat ik te veel "geprobeerd" heb, zonder de boel echt goed op te ruimen in de code ofzo..
want ik heb net even een projectje gebouwd om te testen met een Datagridview..

Code: Selecteer alles

Private Sub DataGridView1_KeyDown(sender As Object, e As KeyEventArgs)
        If e.KeyCode = Keys.Enter Then
            TextBox2.Text = DataGridView1.SelectedCells.Item(0).RowIndex
            If DataGridView1.SelectedCells.Item(0).RowIndex = 7 Then
                MsgBox("ÖK!!")
            End If
        End If
    End Sub
En da's alles..

omdat ik hier met een Keydown de gebeurtenissen afvang.. is er denk ik geen probleem als ik de Gridview naderhand wis.. omdat er dan geen Selectionchanged event in de code zit die de Crash op zijn geweten heeft..

'k ben nog steeds een beginner.. maar ik kom er wel..
Plaats reactie