C# Vraagje

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

Moderator: Moderators

Plaats reactie
hfjbuis
Berichten: 2015
Lid geworden op: 13 feb 2017 00:26
Locatie: Hoensbroek

Re: VB Vraagje

Bericht door hfjbuis »

Arie Kabaalstra schreef: 04 feb 2022 00:08 Nou komt het volgende.. zodra ik de gridview wis..'k peuter de data eruit, en gooi em leeg.. dan Crasht de applicatie..
Je kunt in het event zelf, de gridview niet opruimen, dan ruimt het event zichzelf op en probeert niet meer bestaande objecten te benaderen!!!
Zonder verandering geen verbetering. Soms is niets meer veranderen al een verbetering.
Arie Kabaalstra
Berichten: 11591
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: VB Vraagje

Bericht door Arie Kabaalstra »

Precies.. Dat was ook mijn conclusie..

'k heb zoals gezegd een Test applicatie inelkaar gezet.. maar daar lopen ook alweer dingen mis.. bij het openen van de Datagridview krijgt van alles focus.. behalve de Datagridview, ook wordt de aangegeven cel niet actief bij het openen van die Datagridview..
Keydown events komen niet meer aan.. en meer van dat soort dingen.. geen foutmeldingen tot nu toe.. maar werken doet het ook niet.. ik laat het even rusten.. ga even wat anders doen..
Gebruikersavatar
Arie Kabaalstra
Berichten: 11591
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: VB Vraagje

Bericht door Arie Kabaalstra »

hfjbuis schreef: 04 feb 2022 10:06 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

Ik heb 't simpeler opgelost.. omdat ik op de bovenste rij de naam van de dialoog heb staan (die wordt bij elke dialoog nieuw ingegeven), en de tweede cell op ReadOnly heb staan. omdat je daar toch nietshoeft in te vullen..
zet ik gewoon voor het wissen van de DataGridview : Datagridview1.RowCount=1.. dan "flikkert" ie alles overboord.. en zodra je'm opnieuw oproept.. krijgt ie vanuit die sub wel weer het juiste aantan rows toegewezen.. toegegeven.. 't is Quick and Dirty.. maar het is maar 1 regeltje Code, en het doet precies wat het moet doen..

Zodra je 2 keer op Escape drukt (de eerste keer wist ie de inhoud van de actieve cel) keert het programma terug naar zijn uitgangspositie, met alleen het programma venster zichtbaar.

en dat werkt!
hfjbuis
Berichten: 2015
Lid geworden op: 13 feb 2017 00:26
Locatie: Hoensbroek

Re: VB Vraagje

Bericht door hfjbuis »

Arie Kabaalstra schreef: 04 feb 2022 22:56 en dat werkt!
En dat is toch wel het belangrijkste van een applicatie.
Zonder verandering geen verbetering. Soms is niets meer veranderen al een verbetering.
Gebruikersavatar
Arie Kabaalstra
Berichten: 11591
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: VB Vraagje

Bericht door Arie Kabaalstra »

Nog iets uitgevlooid..

'k heb de onderste cell op de tweede kolom (degene waar je terecht komt als je alles hebt ingevuld) ook op Read Only gezet.. anders wilde de DataGridview nog wel een Rij toevoegen als je in de onderste rij nog wat invult..
Niet dat het enige invloed heeft op de rest, met die invoer wordt niets gedaan..maar't ziet er niet uit..:)

nu nog even "ordenen" want als ik de data uit de gridview in Strings zet die ik in de Textbox wil gooien.. dan gooit ie ze in de verkeerde volgorde.. en da'hoort nie!
Gebruikersavatar
Arie Kabaalstra
Berichten: 11591
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: VB Vraagje

Bericht door Arie Kabaalstra »

'k heb de afgelopen dagen de Code nog een beetje "opgenetterd"

Na een Toolchange zet ik altijd de G96 CSS Snijsnelheid en max RPM of G97 toerental , en de voeding (G94/G95), want, zo is mijn gedachtengang.. als je dat er altijd inzet onder een Toolchange, dan kun je 't deel van het programma met dat gereedschap in één keer beetpakken en verplaatsen, als je de bewerkingsvolgorde wilt verplaatsen, of als je die bewerking in een ander programma wilt zetten..

Daartoe heb ik dus nu ook een Dialoogje geschreven, en als je G96 kiest, vraagt het programma om de snijsnelheid en het maximum toerental, waar ie bij G97 alleen het toerental vraagt..
Dit doe ik door in het Datagridview SelectionChanged Event te kijken naar de waarden die ingevoerd zijn, en aan de hand daarvan vul ik de rest van de DataGridview in.
Zo krijg je alleen dat wat je in moet vullen.. ook wordt het aantal rijen aangepast, zodat je geen lege regels hoeft "over te steken"..

't wordt nu zo zoetjes tijd om eens te gaan kijken naar Communicatie.. want dat heb ik na een aantal vruchteloze pogingen nog niet voor elkaar gekregen.

Ik werk met Visual Studio 2019.. en het programma is tot dusver geschreven in VB.NET

de Communicatie in VB heb ik dus nog niet aan de praat.. maar ik heb wel een kleine example gevonden in C# die wel werkt..
Momenteel staat er op het scherm van mijn Psion een CNC Programma voor mijn EMCOturn 120 dat ik via dat progje over de draad gejaagd heb..

Wat is nu wijsheid?.. 't diepe inspringen en de Applicatie opnieuw opbouwen in C#?.. of een werkende snippet Code voor VB.Net voor de Communicatie ?
Gebruikersavatar
hugo stoutjesdijk
Donateur
Berichten: 10651
Lid geworden op: 02 mar 2011 17:04
Locatie: elst (u)
Contacteer:

Re: VB Vraagje

Bericht door hugo stoutjesdijk »

Ik heb nul ervaring in VB en dergelijke, maar als je even zoekt zal je toch ook wel een VB voorbeeld vinden waar je wat aan hebt.
https://stackoverflow.com/questions/329 ... -in-vb-net
Ik ben voor meer techniek op school, maar dan wel vanaf groep 1 basischool.
hfjbuis
Berichten: 2015
Lid geworden op: 13 feb 2017 00:26
Locatie: Hoensbroek

Re: VB Vraagje

Bericht door hfjbuis »

Arie Kabaalstra schreef: 12 feb 2022 11:56 Wat is nu wijsheid?.. 't diepe inspringen en de Applicatie opnieuw opbouwen in C#?.. of een werkende snippet Code voor VB.Net voor de Communicatie ?
Ik probeer voor elk probleem een basis applicatie te maken om alleen dat probleem op te lossen. Als het eenmaal werkt, maak ik daar een bibliotheek van die ik dan in andere applicaties kan gebruiken. Daarmee voorkom ik dat ik hetzelfde probleem keer en keer moet oplossen. 90% van mijn software bestaat uit bibliotheken en dat maakt het ontwikkelen een stuk eenvoudiger en veel sneller.

Ik heb zo'n 15 jaar VB.net geprogrammeerd en ben op C# overgestapt omdat het beter aansluit bij mijn C en C++ programma's voor microcontrollers. Als dat niet was geweest, gebruikte ik het nu nog.

Of je iets moet maken in VB.net of C#, dat kun je alleen zelf beoordelen. Je moet je de vraag stellen, waar wil ik over 10 jaar staan. En als dat C# is, dan kan het handig zijn om zo min mogelijk in VB te ontwikkelen. Van de andere kant, moet er ook productie gedraaid worden en een uurtje programmeren is toch minder uren aan productie. Om de klus te snel te klaren, kan verder met VB.net gaan, een goede keuze zijn.

Ik laat mijn bestaande VB programma's ongewijzigd, die zijn uitontwikkeld en daar is nog maar heel weinig werk aan. Omzetten naar C# kost alleen maar tijd en heeft voor de rest geen voordelen. Alle nieuwe software wordt wel in C# geschreven.
Zonder verandering geen verbetering. Soms is niets meer veranderen al een verbetering.
Gebruikersavatar
hugo stoutjesdijk
Donateur
Berichten: 10651
Lid geworden op: 02 mar 2011 17:04
Locatie: elst (u)
Contacteer:

Re: VB Vraagje

Bericht door hugo stoutjesdijk »

Je moet vooral ook het handshake stukje wel even meenemen, als die emco niet zo vlug is zouden er anders characters weg kunnen vallen.
Hier vond ik een voorbeeld die wat dat betreft wat completer is.
https://docs.microsoft.com/en-us/dotnet ... at-ext-6.0

Kan zo snel niet beoordelen of dat ook VB.et is, maar het zit allemaal zo dicht bij elkaar dat je er waarschijnlijk wel uit komt.
Ik zou even een heel losstaand programma maken om die communicatie te testen.(dat zei hfjbuis ook al)
Probeer eerst en tekstwindow te vullen met wat je ontvangt van de emco.
Ik ben voor meer techniek op school, maar dan wel vanaf groep 1 basischool.
Gebruikersavatar
Arie Kabaalstra
Berichten: 11591
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: VB Vraagje

Bericht door Arie Kabaalstra »

Vooralsnog test ik het met de Psion..
Ik ben inderdaad bezig met een apart projectje om te kijken of ik het aan de praat krijg.. dat scheelt je in de Code zoeken als er iets niet in orde is.

Ik heb nu wel iets dat een beetje werkt.. vanaf de PC naar de Psion gaat goed.. andersom krijg ik nog niet heel goed.. Time-outs..

Dat zal wel iets in de code zijn.. moet ik even naar kijken..
't moet zo gaan werken dat als ik van de machine naar de PC wil sturen, dat de poort gewoon open gaat tot ik em dicht gooi..
en bij het verzenden net zo.. dat kan ik bijvoorbeeld doen als er in de TextStream 2 lege regels zitten.. da's al de Default voor de EMCO..
Gebruikersavatar
Arie Kabaalstra
Berichten: 11591
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: VB Vraagje

Bericht door Arie Kabaalstra »

Ik heb even naar de VB Code zitten kijken.. als een aap in een roestig horloge.. de code die ik in C# heb ziet er toch veel overzichtelijker uit.. Ik denk dat het tijd wordt om de overstap naar C# te gaan maken.. ook vanwege toekomstige toepassingen van Arduino's enzo..

Als ik nu op de Psion een reeks karakters door de lijn prop.. dan neemt ie alles mee.. behalve CRLF.. hoe krijg ik dat voor elkaar?

Als alles dan werkt.. dus als ik de Kortommunicatie op orde heb.. dan kan ik de rest die ik in VB heb gebouwd, de interface van de Editor dus, gaan vertalen naar C#..
Gebruikersavatar
Arie Kabaalstra
Berichten: 11591
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: VB Vraagje

Bericht door Arie Kabaalstra »

Code: Selecteer alles

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
using System.Threading;

namespace WindowsApplication14
{
    public partial class Form1 : Form
    {
        SerialPort _serialPort;

        // delegate is used to write to a UI control from a non-UI thread
        private delegate void SetTextDeleg(string text);

        public Form1()
        {
            InitializeComponent();
        }

        private void btnStart_Click(object sender, EventArgs e)
        {
            // Makes sure serial port is open before trying to write
            try
            {
                if (!_serialPort.IsOpen)
                    _serialPort.Open();

                //_serialPort.Write("SI\r\n");
                _serialPort.Write(textBox1.Text);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error opening/writing to serial port :: " + ex.Message, "Error!");
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // all of the options for a serial device
            // can be sent through the constructor of the SerialPort class
            // PortName = "COM1", Baud Rate = 2400, Parity = Even, 
            // Data Bits = 7, Stop Bits = One, Handshake = None
            _serialPort = new SerialPort("COM1", 2400, Parity.Even, 7, StopBits.One);
            _serialPort.Handshake = Handshake.None;
            _serialPort.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);
            _serialPort.ReadTimeout = 180000;
            _serialPort.WriteTimeout = 180000;
            _serialPort.Open();
        }

        void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
           Thread.Sleep(500);
            string data = _serialPort.ReadLine();
            this.BeginInvoke(new SetTextDeleg(si_DataReceived), new object[] { data });
        }

        private void si_DataReceived(string data)
        {
            textBox1.Text = textBox1.Text +data;
        }
    }
}
Gebruikersavatar
Arie Kabaalstra
Berichten: 11591
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: VB Vraagje

Bericht door Arie Kabaalstra »

Code: Selecteer alles

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
using System.Threading;

namespace WindowsApplication14
{
    public partial class Form1 : Form
    {
        SerialPort _serialPort;

        // delegate is used to write to a UI control from a non-UI thread
        private delegate void SetTextDeleg(string text);

        public Form1()
        {
            InitializeComponent();
        }

        private void btnStart_Click(object sender, EventArgs e)
        {
            // Makes sure serial port is open before trying to write
            try
            {
                if (!_serialPort.IsOpen)
                    _serialPort.Open();

                //_serialPort.Write("SI\r\n");
                _serialPort.Write(textBox1.Text);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error opening/writing to serial port :: " + ex.Message, "Error!");
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // all of the options for a serial device
            // can be sent through the constructor of the SerialPort class
            // PortName = "COM1", Baud Rate = 2400, Parity = Even, 
            // Data Bits = 7, Stop Bits = One, Handshake = None
            _serialPort = new SerialPort("COM1", 2400, Parity.Even, 7, StopBits.One);
            _serialPort.Handshake = Handshake.None;
            _serialPort.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);
            _serialPort.ReadTimeout = 180000;
            _serialPort.WriteTimeout = 180000;
            _serialPort.Open();
        }

        void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
           Thread.Sleep(500);
            string data = _serialPort.ReadLine();
            this.BeginInvoke(new SetTextDeleg(si_DataReceived), new object[] { data });
        }

        private void si_DataReceived(string data)
        {
            textBox1.Text = textBox1.Text +data;
        }
    }
}
Dit is wat ik nu heb, en zoals gezegd.. als ik een CNC File vanaf de PC naar de Psion jaag, dan gaat dat gewoon goed..
Andersom?.. niet zo goed.. want hij voegt de CRLF's niet in.. dat moet de "terminal" zelf herkennen, want op de EMCO kan ik los van de Baudrate niets instellen..
Gebruikersavatar
hugo stoutjesdijk
Donateur
Berichten: 10651
Lid geworden op: 02 mar 2011 17:04
Locatie: elst (u)
Contacteer:

Re: VB Vraagje

Bericht door hugo stoutjesdijk »

Dan moet je toch even alles wat je ontvangt in hex bekijken, zitten vast wel regeleinde in, maar misschien alleen CR of LF en niet beide.
Of het is zo opgebouwd dat elke volgende regel ook een volgende string is, dan zitten die CRLF inderdaad niet in de strings.
Bestand even in notepad++ openen en vinkje aanzetten bij Beeld|niet afdrukbare tekens|alle tekens weergeven.

Kijken of je een demo code kunt vinden voor een terminal programma, daar zit zo'n beetje alles in.

Dat ik dit soort dingen deed is ruim meer dan 20 jaar geleden. Ruim daarvoor , toen we nog DOS hadden en GWBasic, kon ik het in 5 regeltjes. :lol:
Ik ben voor meer techniek op school, maar dan wel vanaf groep 1 basischool.
Plaats reactie