myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » GUI: Windows-Forms » GruppenSeparatoren werden im DMC nicht erkannt
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

GruppenSeparatoren werden im DMC nicht erkannt

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
moser69 moser69 ist männlich
myCSharp.de-Mitglied

Dabei seit: 30.08.2019
Beiträge: 6
Entwicklungsumgebung: VS 2017
Herkunft: Schlesien


moser69 ist offline

GruppenSeparatoren werden im DMC nicht erkannt

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Zusammen
ich eine GUI geschrieben wo als Eingangsdaten der Inhalt eine DMC übernommen werden soll. Leider werden die GS nicht erkannt … oder vom Scanner nicht übertragen (Cognex DM8050). Die Cognex Leute finden keine Lösung … :-(
Vielleicht liegt das aber auch an meiner Applikation …
!!! Und jetzt kommts: wenn ich den DMC in Notepad++ einscanne - sehe ich alles, inkl. GS, RS und EOT. Wenn ich jetzt diesen "Text" vom Notepad++ in meine GUI kopiere - funktioniert alles.
Als Eingangsfeld für die Scanner Daten nutze ich eine einfache TextBox … hier habe ich auch schon versucht einige Eigenschaften zu verändern - muss aber zugeben dass ich nicht alle kenne …
Programmiert habe ich in VS 2017 / C# / .NET FW 4.00

Ich würde mich über jeden Tipp / Lösung seeeehr freuen ! :-)

Gruß,
moser
30.08.2019 16:53 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.334
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

In welchem Format scannst du denn die Daten? Könntest du mal einen Beispieltext zeigen?
31.08.2019 08:25 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
moser69 moser69 ist männlich
myCSharp.de-Mitglied

Dabei seit: 30.08.2019
Beiträge: 6
Entwicklungsumgebung: VS 2017
Herkunft: Schlesien

Themenstarter Thema begonnen von moser69

moser69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo
so sieht der code aus - allerdings die GruppenSepparatoren (die Kästchen hier) sind erst in Notepad++ sichtbar.

Code:
1:
[)>0613V6439559581P285164571630000P1009170332320P0021P1006273801122P0031P1006262629132P00S96189060002B10ZREFLASH11Z31627909012Z10521825605137

Gruß,
moser
04.09.2019 15:14 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.334
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Da es sich bei GS, RS und EOT um nicht druckbare Steuerzeichen (s. z.B.  How do I put GS / RS / EOT into a PDF417 barcode?) handelt, können diese in einer Standard-TextBox nicht angezeigt werden.
Notepad++ benutzt anscheinend intern eine andere TextBox-Implementierung, welche eben auch Steuerzeichen sichtbar darstellt (ähnlich wie auch z.B. "MS Word" Tabs und Spaces optional anzeigen kann).

Scannst du den Code direkt in die TextBox oder benutzt du eine spezielle API dafür?
Wenn du den Text dann z.B. in eine Datei speicherst, siehst du dann mit einem Hexcode-Editor (oder z.B. Notepad++) dann die Steuerzeichen?

PS: Nur durch "Zitieren" deines Beitrags habe ich die Steuerzeichen gesehen, denn auch hier in der normalen Forenansicht werden diese nicht dargestellt. Selbst im Standard-Editor Notepad kann ich das herauskopierte Steuerzeichen zwar einfügen, aber es wird nicht dargestellt (aber beim Speichern ist das Steuerzeichen dann vorhanden)!

Edit: schau auch mal in  Free Barcode Scanner ASCII String Decoder ;-)

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Th69 am 04.09.2019 17:22.

04.09.2019 17:18 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Taipi88 Taipi88 ist männlich
myCSharp.de-Mitglied

avatar-3220.jpg


Dabei seit: 02.02.2010
Beiträge: 972
Entwicklungsumgebung: VS 2010
Herkunft: Mainz


Taipi88 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi,

mal vom Grundsatz - ich persönlich als Nutzer erwarte eigentlich von einer Textbox nicht, dass diese irgendwelche Steuerzeichen darstellt - die sind ja für was anderes als zum Anzeigen gut.

Mit einem der vielen Key/Input-Ereignisse sollte man diese doch problemlos abfangen und verarbeiten können. Oder verstehe ich das Grundproblem nicht?

LG
05.09.2019 06:45 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
moser69 moser69 ist männlich
myCSharp.de-Mitglied

Dabei seit: 30.08.2019
Beiträge: 6
Entwicklungsumgebung: VS 2017
Herkunft: Schlesien

Themenstarter Thema begonnen von moser69

moser69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich scanne den DMC direkt in die TextBox - erwarte aber nicht, dass die Separattoren angezeigt werden. Ich habe eine Methode, die mir den DMC zerlegen soll und die einzelnenn Datensegmente anhand der GS ausliest. Diese Methode funktioniert mit einem anderen Scanner, den ich aber aus unterschiedlichen Gründen für meine Applikation nicht verwenden kann.
Ich habe einen Cognex DM8050, und mit dem habe ich das beschriebene Problem.
Leider konnten mir bis jetzt die Cognex Experten auch nicht weiter helfen.

Hier die Methode die ich nutze:

C#-Code:
public static class DmcIdentifires
    {

        /// <summary>Extracts the element identified by the given identifier from the complete label String. The sections
        /// need to be divided by group separators</summary>
        /// <param name="identifier">The identifier of the section.</param>
        /// <param name="completeLabel">The complete label</param>
        /// <param name="index">The start index in the label of this identifier</param>
        /// <returns></returns>
        public static string GetContentForIdentifier(string completeLabel, string identifier)
        {
            // match [GS]1P (as look-around), then any code but GS or RS and then GS or RS, again as look-around
            // \p{P} contains punctuation
            // [\w-[\x1d\x1e]] any word element but the GS or RS separators
            string regExPatternString = "(?<=\\x1d" + identifier + ")[\\u0020\\p{P}\\w-[\\x1d\\x1e]]{2,}((?=\\x1e)|(?=\\x1d))";
            var regex = new Regex(regExPatternString,
                RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace);
            var match = regex.Match(completeLabel);

            if (match == null || match.Length == 0)
            {
                return null;
            }
            else
            {
                return match.ToString();
            }
        }

    }
05.09.2019 08:20 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Taipi88 Taipi88 ist männlich
myCSharp.de-Mitglied

avatar-3220.jpg


Dabei seit: 02.02.2010
Beiträge: 972
Entwicklungsumgebung: VS 2010
Herkunft: Mainz


Taipi88 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi,

was ich meinte ist in folgendem Artikel beschrieben:
 https://docs.microsoft.com/de-de/dotnet/...-the-form-level

LG
05.09.2019 08:38 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
moser69 moser69 ist männlich
myCSharp.de-Mitglied

Dabei seit: 30.08.2019
Beiträge: 6
Entwicklungsumgebung: VS 2017
Herkunft: Schlesien

Themenstarter Thema begonnen von moser69

moser69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von Th69:
Wenn du den Text dann z.B. in eine Datei speicherst, siehst du dann mit einem Hexcode-Editor (oder z.B. Notepad++) dann die Steuerzeichen?

Wenn ich den Text von der TextBox (das was direkt vom Scanner kommt) in eine txt Datei speichere und die dann im Notepad++ öffne - sehe ich auch keine GS.

Vielleicht muss "nur" eine Eigenschaft der TextBox richtig gesetzt werden … ? :-(
05.09.2019 09:10 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.334
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

So eine Eigenschaft gibt es nicht.
Aber hänge dich mal an das KeyPress-Ereignis der TextBox (oder der Form, wie im Link von  Taipi88 beschrieben).
Dort kannst du sie ja ebenfalls in eine Datei (oder z.B. als Hexwerte in die Debug-Ausgabe) schreiben lassen. Kommen die Steuerzeichen überhaupt an (werden also vom Scanner gesendet)?
05.09.2019 09:21 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
moser69 moser69 ist männlich
myCSharp.de-Mitglied

Dabei seit: 30.08.2019
Beiträge: 6
Entwicklungsumgebung: VS 2017
Herkunft: Schlesien

Themenstarter Thema begonnen von moser69

moser69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von Taipi88:
Hi,

was ich meinte ist in folgendem Artikel beschrieben:
 https://docs.microsoft.com/de-de/dotnet/...-the-form-level

LG

Wenn ich versuche die Scanner Daten mit dem Ereignis PreviewKeyDown abzufangen - erkenne ich auch keine GS, … als ob sie vom Scanner gar nicht kommen.
Dann frage ich mich: was macht den Notepad++ dass ich sie sehen kann ?
Er musst sie irgendwie erkennen oder zumindest die Sacannerdaten mit den GS ergänzen … aber auch hier muss Notepad++ wissen wo sie hingehören …
Zu viele Sachen die ich nicht verstehe :-(
05.09.2019 09:23 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
moser69 moser69 ist männlich
myCSharp.de-Mitglied

Dabei seit: 30.08.2019
Beiträge: 6
Entwicklungsumgebung: VS 2017
Herkunft: Schlesien

Themenstarter Thema begonnen von moser69

moser69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Als Eingangsdaten für meine Methode zum Extrahieren des DMC nehme ich momentan den Text von meiner TextBox.
Wenn ich jetzt die Ereignisse Ereignis PreviewKeyDown oder KeyPress verwende, dann ist der Text noch null - so habe ich keine Eingangsdaten für meine Methode.

Wie kann ich dann anders die Daten vom Scanner anfangen ?
05.09.2019 09:29 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
MartinH MartinH ist männlich
myCSharp.de-Mitglied

avatar-1761.gif


Dabei seit: 08.11.2005
Beiträge: 177
Herkunft: Asperg


MartinH ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Was sagt denn der debugger?
Welche Daten empfänst du denn?
Hast du dir die Rohdaten mal angeschaut (Empfangene Bytes)?
05.09.2019 10:16 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.334
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Bei den KeyPress oder KeyDown-Ereignissen stehen die Daten in den übergebenen  KeyPressEventArgs bzw.  KeyEventArgs (bevor also das Zeichen dem TextBox-Text hinzugefügt wird) - dies sind aber Grundlagen.

Oder die Methode  Form.WndProc überschreiben und nach passenden WM_CHAR oder WM_KEYDOWN-Nachrichten schauen (dafür sollte aber KeyPreview = true bei der Form gesetzt sein).
Alternativ gibt es auch noch die virtuelle Methode  Control.ProcessKeyMessage dafür.
05.09.2019 12:39 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 22.09.2019 18:49