C# Vraagje

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

Moderator: Moderators

hfjbuis
Donateur
Berichten: 3077
Lid geworden op: 13 feb 2017 00:26
Locatie: Hoensbroek

Re: C# Vraagje

Bericht door hfjbuis »

Arie Kabaalstra schreef: 26 feb 2023 14:52 Binnen een Class.. maar eh.. de Filewatcher en de EventHandler staan in hetzelfde Form, dus in dezelfde Class.. toch??
Als je tussen de acculades van de class van dat form hebt staan wel

Code: Selecteer alles

public void CreateFileWatcher(string Cycle)
        {
            // Create a new FileSystemWatcher and set its properties.
            FileSystemWatcher Watcher = new FileSystemWatcher();
Ik snap de code niet. Deze void doet iets, maar de in de void gedeclareerde Watcher is een locale variabele die vernietigd wordt op het moment dat je de void verlaat.
There are only 2 limits, the sky and your imagination
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13491
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: C# Vraagje

Bericht door Arie Kabaalstra »

Ik snap er momenteel nog minder van.. als je op Google zoekt naar " in de gaten houden of een bestand gewijzigd is", dan krijg je die code..
verder niets.. ja.. enkele varianten, met net een andere declaratie, maar vergelijkbaar...

Het gaat er mij dus om.. " Hoe krijg ik een applicatie zover dat ie :

A In de gaten houdt of mijn bestandje C:\CNC4.03\teach_in.nc gewijzigd wordt, al is het alleen maar dat ie opnieuw wordt opgeslagen met dezelfde inhoud...

B dat ie mijn Applicatie naar de voorgrond trapt zodra A plaatsvindt.. (en dat ie dan het bestandje even in een string frommelt, en de bruikbare code eruit frunnikt.., maar da's niet zo spannend.. dat heb ik al..
hfjbuis
Donateur
Berichten: 3077
Lid geworden op: 13 feb 2017 00:26
Locatie: Hoensbroek

Re: C# Vraagje

Bericht door hfjbuis »

Arie,

Bedoel je deze informatie: https://learn.microsoft.com/en-us/dotne ... ew=net-7.0

Zo ja, dan gooi ik hem straks in een stukje code om te testen, zo nee, graag de link naar de code die je op internet gevonden hebt.

Dat wat ik gevonden heb, is een class die je kunt gebruiken. Je moet dat wel als class gebruiken. Dus een variabele maken van deze class en deze variabele gebruiken.
There are only 2 limits, the sky and your imagination
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13491
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: C# Vraagje

Bericht door Arie Kabaalstra »

Die Link had ik ook aangetroffen, maar pas nadat ik een aantal andere opties geprobeerd had.. allen zonder succes.. :roll:
Dat wat ik gevonden heb, is een class die je kunt gebruiken. Je moet dat wel als class gebruiken. Dus een variabele maken van deze class en deze variabele gebruiken.
Ik denk dat em daar ook de kneep zit.. "als Class gebruiken".. eh?.. Huh?.. hoe doe ik dat?.. en.. kan ik die class dan apart opslaan, en em ook in andere projecten gebruiken?..

Dat stukje Code is welkom.. Ik zit me bijna het haar uit mijn hoofd te sleuren, omdat ik het niet voor elkaar kreeg.. ik overwoog inmiddels om een Timer te gebruiken, en dan te kijken naar het tijdstip waarop een file is opgeslagen..(je krijgt zo'n dialoog toch niet binnen een seconde vol, dus fouten zoals met de Therac 25 gaan ook niet voorkomen.. daar had je iets meer de tijd voor..)

Voor het functioneren van de applicatie is dat wel belangrijk.. dat ie na wijziging van die bewuste file naar de voorgrond komt.. het laden van die file in een string moet dan ook wel gaan lukken... immers, dat kan ik er zo achteraanFietsen.

Code: Selecteer alles

if (fiets != "")
                {
                    textBox1.Text = fiets;
                    textBox2.Text = System.IO.File.ReadAllText(fiets);
                    int StartInsert = textBox2.Text.IndexOf(";cycle");
                    int EndInsert = textBox2.Text.IndexOf("endcycle") + 8 - StartInsert;
                    var InsertCycle = textBox2.Text.Substring(StartInsert, EndInsert);
                    //MessageBox.Show(InsertCycle);
                    textBox2.Clear();
                    fastColoredTextBox1.InsertText(InsertCycle);
                    InsertCycle = "";
                }
wat ik namelijk van plan ben.. is Dialogen schrijven in EdingCNC, de waarden van die Dialogen wegschrijven naar een bestandje.
Nou kan ik dat bestandje automatisch laten openen in EdingCNC, en dus de in de dialoog geprogrammeerde bewerking direct uitvoeren, maar.. ik kan em dus ook in een Editor openen, en daar in een NC bestand invoegen.. (dan haal ik alleen de Cyclus parameters eruit, en niet de voorbereidende en uitvoerende M-codes..vandaar dat ik alles tussen ;Cycle en ;Endcycle eruit peuter, want dan kun je gewoon makkelijk meerdere bewerkingen in een bestand gooien.. en dan kun je zelf bepalen wanneer je ze uitvoert.. want op dat moment type je gewoon "M99" in je programma..

Door het in een separate Editor te doen, kun je namelijk ook zonder moeilijkheden G00 en G01 regels invoegen, alsmede G02 en G03.. , en dat is voor Freesprogramma's wel zo prettig,

Zo kun je een cyclus als een Object zien dat je kan invoegen, en aanpassen naar behoefte, tel daar bij op dat er in de Beta 5 een "loadjob" commando zit, waarmee je bestanden kan openen vanuit andere bestanden..eh.. Classes anyone?.. op die manier gaat het toch echt op een Object georienteerde taal lijken...Daarom heb ik mijn Editor E++ gedoopt.

Afbeelding

en dit is vooralsnog het icoontje... maar ik denk wel dat dat een blijvertje is.. de ++ is wel duidelijk... maar de "E" ?.. die staat er niet... dus weer wel... :lol: ..net als de pijl in het FedEx Logo.. what has been seen, can not be unseen..
hfjbuis
Donateur
Berichten: 3077
Lid geworden op: 13 feb 2017 00:26
Locatie: Hoensbroek

Re: C# Vraagje

Bericht door hfjbuis »

Arie,
Hier een werkende versie die bestanden op D:\ controleert.

Als de file watcher een wijziging ziet wordt dat gelogd met "LogStatus()". Deze LogStatus() past het status veld op het scherm aan.
De watcher thread is een andere thread dan de GUI thread. Zomaar vanuit de watcher de status veranderen gaat dan ook niet. Daarvoor moet de huidige thread (GUI) worden gepauzeerd en de andere geactiveerd. Dat wordt gedaan met de Invoke regel.
FileChangeHandler.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: 13491
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: C# Vraagje

Bericht door Arie Kabaalstra »

ik heb em even gedownload, en vooraan op mijn harde schijf geparkeerd en uitgepakt.. Of ik er vandaag nog mee bezig ga, of morgen..dat moet ik nog even bekijken..

In elk geval "dank U Meester" dat je me weer een beetje op weg helpt, en mijn leerweg in C# met kennis plaveit.. :lol:
MeMoRy
Berichten: 737
Lid geworden op: 17 okt 2022 09:40
Locatie: Utrecht

Re: C# Vraagje

Bericht door MeMoRy »

Code: Selecteer alles

Watcher.Changed += new FileSystemEventHandler(OnChanged);
Waar is de "OnChanged" methode?
Ik denk dat je de code hiervandaan hebt?

Als ik dat voorbeeld trouwens zie dan vind ik die syntax wel interessant. Meestal als je een eventhandler registreert zou

Code: Selecteer alles

Watcher.Changed += OnChanged;
voldoende moeten zijn.

Sterker nog, een lambda kan ook

Code: Selecteer alles

Watcher.Changed += (s,e) => [...];
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13491
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: C# Vraagje

Bericht door Arie Kabaalstra »

Nou.. om eerlijk te zijn.. ik heb gisteravond nog wat vruchteloze pogingen gedaan om mijn Applicatie naar de voorgrond te verhuizen.. en dat lukte me niet.. ik kreeg er hoofdpijn met zijwieltjes van..

Dus, heb ik een oud idee weer opgedoken..

Code: Selecteer alles

using System.IO;
using System.Windows.Forms;

namespace TestBed
{
    //this code ist nicht fuer gefingerpoken und mittengrabben!
    //ist easy to schnappen der springenwerk, mit blownfusen und poppencorken mit spitzensparken!
    //also ist nicht fuer gewerken bei dummkopfen
    //relax und watschen der Blinkenlights
    public partial class Form1 : Form
    {
        readonly string Cyclepath = "cycle.tmp";
        public Form1()
        {
            InitializeComponent();
            File.ReadAllText(Cyclepath);
            timer1.Start();
        }
        public void Timer1_Tick(object sender, System.EventArgs e)
        {
            string Cycle = System.IO.File.ReadAllText(Cyclepath);
            FileInfo LookensPeepers = new FileInfo(Cycle);
            var NewTime = LookensPeepers.LastAccessTime;
            textBox1.Text = NewTime.ToString();
            if (textBox1.Text != textBox2.Text)
            {
                this.Activate();
                this.BringToFront();
                string OldTime = textBox1.Text;
                textBox2.Text = OldTime;
            }
        }
    }
}

de Timer staat op 100 milliseconden.. da's snel genoeg.. en niet dermate snel dat het geen tijd meer overhoudt voor andere dingen..
Ik kijk naar de last acces time, mieter em bij het opstarten in een Textbox, kopieert em naar een tweede textbox, en kijkt dan of de eerste wijzigt, zodra dat gebeurt, trekt ie de applicatie naar de voorgrond, maakt boxje 2 aan boxje 1 gelijk, meer dan dat is het niet..
MeMoRy
Berichten: 737
Lid geworden op: 17 okt 2022 09:40
Locatie: Utrecht

Re: C# Vraagje

Bericht door MeMoRy »

Nou in principe is dat niet veel anders dan de filesystemwatcher

Code: Selecteer alles

using System.IO;
    public partial class Form1 : Form
    {
        const string Cyclepath = "cycle.tmp";
        public Form1()
        {
            InitializeComponent();
            //File.ReadAllText(Cyclepath); // ?? je leest maar doet er niets mee?
            fsw = new FileSystemWatcher()
            {
            	Path = Cyclepath,
            	NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite,
            	Filter = "*.nc", // vanwaar dit filter? je kijkt toch naar een specifieke file?
            };
            fsw.Changed += (s,e) =>
            {
            	this.Activate();
                this.BringToFront();
            };
        }
        private FileSystemWatcher fsw;
    }
p.s. ik type maar wat uit m'n hoofd. ben geen winforms guru. Misschien moet OnChanged static zijn? geen idee.
hfjbuis
Donateur
Berichten: 3077
Lid geworden op: 13 feb 2017 00:26
Locatie: Hoensbroek

Re: C# Vraagje

Bericht door hfjbuis »

MeMoRy schreef: 27 feb 2023 09:49 Waar is de "OnChanged" methode?
Ik denk dat je de code hiervandaan hebt?
Dat klopt, uit de microsoft knowhow
Arie Kabaalstra schreef: 27 feb 2023 10:55 meer dan dat is het niet..
Als het maar werkt en past binnen de rest van de applicatie is het voor mij altijd goed.
There are only 2 limits, the sky and your imagination
hfjbuis
Donateur
Berichten: 3077
Lid geworden op: 13 feb 2017 00:26
Locatie: Hoensbroek

Re: C# Vraagje

Bericht door hfjbuis »

Ik heb een stukje code toegevoegd om het venster op de voorgrond te krijgen na een watcher event:

Code: Selecteer alles

    
        private void BringToFront()
        {
            this.WindowState = FormWindowState.Minimized;
            this.Show();
            this.WindowState = FormWindowState.Normal;
        }
FileChangeHandler.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: 13491
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: C# Vraagje

Bericht door Arie Kabaalstra »

Ik heb die Timergrap, en de bijbehorende Code nu in mijn E++ test applicatie geknikkerd,
en dat lijkt te werken, ik heb in de Code gezet dat je op F1 moet drukken als je de met een EdingCNC DLGMSG geprogrammeerde, en in Teach_in.nc opgeslagen gegevens wilt invoegen.

Dan voegt E++ die gegevens op cursorpositie in, M99 eronder zetten.. en klaar.. Waarom M99 niet Automagisch?.. nou.. dat maak je als Programmeur zelf wel uit, wanneer je een cyclus programmeert, en wanneer je em afroept.., voor het zelfde geld kom je van ergens ver voor je werk, en wil je eerst je tool voorpositioneren.., dan klop je de cyclus in, plempt em in je programma, dan een G00 X10, gevolgd door een G00 Z-30, en DAN pas een M99.. dan weet je tenminste zeker dat je Botsingsvrij voorpositioneert, immers mijn Macro gaat in een rechte lijn naar het startpunt.. als ie daar zonder brokken kan komen, dan is dat helemaal mooi, maar als ie daar niet kan komen.. dan wil je vantevoren wel even een slalommetje kunnen afleggen met je gereedschap..

en dit is dan nog voor Draaibank Code zo bedacht..
Wat te denken van Freesbank prorgramma's?.. je staat ergens Bovenin de machine... gereedschap gewisseld, Cyclus: Boren.. je vult em in.. plakt em in je file.. en dan?..

Code: Selecteer alles

G00 X10 Y10 Z20
G00 Z2 M3
M99 (Eerste gat)
G00 X29 Y5
M99 (Tweede gat)
G00 X37 Y24
M99 (Derde gat)
G00 X... Y...
M99 (Zoveelste gat
G00 Z20 M5
TxxM6... Volgende gereedschap..
Je kunt dat gatenpatroon ook rustig in een Sub gooien.. de Cyclus definieer je buiten de sub..

en dan kun je dus, Centeren, Subje aanroepen, opboren, Subje aanroepen

Want bij elke M99 die ie tegenkomt gaat EdingCNC (bij mij in elk geval) de laatst geprogrammeerde Cyclus uitvoeren (Ja.. deze heb ik van Heidenhain gejat... :mrgreen: ).. Het wordt zo leuk...
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13491
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: C# Vraagje

Bericht door Arie Kabaalstra »

Leuk he?

Code: Selecteer alles

M100
+ ;CYCLE FACING
M99
+ ;CYCLE TURNING
M99
+ ;CYCLE CHAMFER
M99
+ ;CYCLE TURNING
M99
+ ;CYCLE CHAMFER
M99
M2
Een compleet draaiprogramma, de Cycli zijn ingevouwen, maar als je Ctrl Down druk, dan klappen ze allemaal open.. en met Ctrl Up weer dicht... als je in de kantlijn op het - teken klikt, dan klappen ze dicht.. klik je op het + teken, of dubbelklik op de regel, dan klapt alles weer open..
Nu de FreesMacro nog een keer passend maken voor deze Applicatie, want daar is sinds 2008 niet veel meer aan gedaan... :mrgreen:
hfjbuis
Donateur
Berichten: 3077
Lid geworden op: 13 feb 2017 00:26
Locatie: Hoensbroek

Re: C# Vraagje

Bericht door hfjbuis »

Arie Kabaalstra schreef: 27 feb 2023 14:15 E++ test applicatie
G++ zul je bedoelen :mrgreen:
There are only 2 limits, the sky and your imagination
Plaats reactie