Angepinnt [Sammelthread] Code-Korrektur
- VB.NET
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 123 Antworten in diesem Thema. Der letzte Beitrag () ist von FormFollowsFunction.
-
-
-
-
-
Shit den fehler hab ich noch vergessen. Die Testdaten werden bei erstenlauf erstellt. Da bekommst du ein paar abfragen. Entferne die zuweisung hinter srPathToOpen;
So ich hab kurz den Fehler den EDR bemängelt hat ausgebaut:Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Lord C“ ()
-
Als nächstes funzt das hier nicht:Du kannst nicht gleichzeitig einen Reader und einen Writer auf dieselbe Datei haben.
-
-
Hallo,
auch ich würde meinen Code gerne einmal von den argwöhnischen Augen der Profis begutachten lassen
Ich hoffe er ist nicht zu lang. Falls doch, mach ich es kürzer.
Info:
Ich bin eigentlich mehr mit VB6 (ist auch schon über 10 Jahre her, mit vb4 angefangen) vertraut. Das ist ja aber nun outdated und ich versuche mich langsam in vbnet.
Der folgende Code dient dazu, bei Tastendruck, KeyCodes anzuzeigen oder eben einen KeyCode einzugeben und die dazugehörige Taste anzuzeigen. Mit Hilfe dieses Forums konnte ich es nun zum Abschluss bringen. Alles funktioniert soweit.
Ich tendiere grundsätzlich immer zu aufgeräumten Code, was mir noch fehlt sind ein paar Tipps zur "Sauberkeit". Es gibt soviel Neues in vbnet..... das erschlägt einen glatt wenn man VB6-"versaut" ist
Hier also der Code:
VB.NET-Quellcode
- Imports ControlChars = Microsoft.VisualBasic.ControlChars
- Public Class Form1
- Declare Function GetKeyState Lib "user32" Alias "GetKeyState" (ByValnVirtKey As Int32) As Int16
- Private Const VK_CAPSLOCK = &H14
- Dim KeyCharacter As Char
- Dim lblShiftBC As Color
- Dim lblCtrlBC As Color
- Dim lblCapsBC As Color
- Dim lblAltBC As Color
- Dim keyEingabe As Boolean
- Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- 'Sichern der ursprünglichen Backgroundfarben
- lblShiftBC = lblShift.BackColor
- lblCtrlBC = lblCtrl.BackColor
- lblCapsBC = lblCaps.BackColor
- lblAltBC = lblAlt.BackColor
- 'Prüfen ob CapsLock an oder aus
- 'und das label entsprechend einfärben
- If GetKeyState(VK_CAPSLOCK) = 1 Then
- lblCaps.BackColor = Color.LightPink
- Else
- lblCaps.BackColor = lblCapsBC
- End If
- 'Flag zum Eingabemodus setzen
- keyEingabe = False
- End Sub
- Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
- 'Wenn Taste gedrückt wird, anzeigendes Label einfärben
- Select Case e.KeyValue
- Case 16 : lblShift.BackColor = Color.LightBlue
- Case 17 : lblCtrl.BackColor = Color.LightGreen
- Case 18 : lblAlt.BackColor = Color.LightCoral
- End Select
- End Sub
- Private Sub Form1_KeyUp(sender As Object, e As KeyEventArgs) Handles Me.KeyUp
- 'Wenn keine Eingabe des KeyCodes, dann Taste auswerten
- If keyEingabe = False Then
- KeyCharacter = e.KeyData.ToString
- KeyCodeAuswerten(e.KeyValue, KeyCharacter)
- End If
- End Sub
- Private Sub btnViewKeyCode_Click(sender As Object, e As EventArgs) Handles btnViewKeyCode.Click
- 'Code by Quadsoft
- '----------------------------------------------------
- Dim keyCode As Integer = Integer.Parse(txtNumBox.Text)
- Dim key As Keys = keyCode
- If lblCaps.BackColor = Color.LightPink Or lblShift.BackColor = Color.LightBlue Then
- KeyCodeAuswerten(key, key.ToString())
- Else
- KeyCodeAuswerten(key, key.ToString().ToLower)
- End If
- '----------------------------------------------------
- 'Label, Textbox und Button wieder de-/aktivieren
- 'damit sie beim drücken bestimmter Tasten nicht aktiviert werden.
- lblKeyCodeViewInt.Text = txtNumBox.Text
- lblTextOnOff.Visible = True
- lblTextOnOff.Text = txtNumBox.Text
- txtNumBox.Enabled = False
- keyEingabe = False
- btnViewKeyCode.Enabled = False
- End Sub
- Private Sub KeyCodeAuswerten(i As Integer, iChar As String)
- 'Tastenbeschreibungen anzeigen die nicht oder schlecht
- 'von der Funktion übermittelt wird
- Select Case i
- Case 8 : lblKeyCodeViewStr.Text = "Back" & ControlChars.NewLine & "Space"
- Case 9 : lblKeyCodeViewStr.Text = "Tab"
- Case 13 : lblKeyCodeViewStr.Text = "Enter"
- Case 16 : lblKeyCodeViewStr.Text = "Shift" : lblShift.BackColor = lblShiftBC
- Case 17 : lblKeyCodeViewStr.Text = "Ctrl" : lblCtrl.BackColor = lblCtrlBC
- Case 18 : lblKeyCodeViewStr.Text = "Alt" : lblAlt.BackColor = lblCtrlBC
- Case 19 : lblKeyCodeViewStr.Text = "Break"
- Case 20 : lblKeyCodeViewStr.Text = "Caps"
- If GetKeyState(VK_CAPSLOCK) = 1 Then
- lblCaps.BackColor = Color.LightPink
- Else
- lblCaps.BackColor = lblCapsBC
- End If
- Case 32 : lblKeyCodeViewStr.Text = "Space"
- Case 33 : lblKeyCodeViewStr.Text = "PgUp"
- Case 34 : lblKeyCodeViewStr.Text = "PgDown"
- Case 35 : lblKeyCodeViewStr.Text = "End"
- Case 36 : lblKeyCodeViewStr.Text = "Pos1"
- Case 37 : lblKeyCodeViewStr.Text = "Left"
- Case 38 : lblKeyCodeViewStr.Text = "Up"
- Case 39 : lblKeyCodeViewStr.Text = "Right"
- Case 40 : lblKeyCodeViewStr.Text = "Down"
- Case 44 : lblKeyCodeViewStr.Text = "Print"
- Case 45 : lblKeyCodeViewStr.Text = "Ins"
- Case 46 : lblKeyCodeViewStr.Text = "Del"
- Case 112 : lblKeyCodeViewStr.Text = "F1"
- Case 113 : lblKeyCodeViewStr.Text = "F2"
- Case 114 : lblKeyCodeViewStr.Text = "F3"
- Case 115 : lblKeyCodeViewStr.Text = "F4"
- Case 116 : lblKeyCodeViewStr.Text = "F5"
- Case 117 : lblKeyCodeViewStr.Text = "F6"
- Case 118 : lblKeyCodeViewStr.Text = "F7"
- Case 119 : lblKeyCodeViewStr.Text = "F8"
- Case 120 : lblKeyCodeViewStr.Text = "F9"
- Case 121 : lblKeyCodeViewStr.Text = "F10"
- Case 122 : lblKeyCodeViewStr.Text = "F11"
- Case 123 : lblKeyCodeViewStr.Text = "F12"
- Case 145 : lblKeyCodeViewStr.Text = "Roll"
- Case 220 : lblKeyCodeViewStr.Text = "^"
- Case Else : lblKeyCodeViewStr.Text = iChar
- End Select
- 'TastenCode als Zahl anzeigen
- lblKeyCodeViewInt.Text = CStr(i)
- End Sub
- Private Sub lblTextOnOff_Click(sender As Object, e As EventArgs) Handles lblTextOnOff.Click
- 'Label, Textbox und Button wieder de-/aktivieren
- 'damit sie beim drücken bestimmter Tasten nicht aktiviert werden.
- txtNumBox.Enabled = True
- btnViewKeyCode.Enabled = True
- lblTextOnOff.Visible = False
- keyEingabe = True
- End Sub
- Private Sub txtNumBox_TextChanged(sender As Object, e As EventArgs) Handles txtNumBox.TextChanged
- On Error Resume Next
- 'Nur falls es Fehler bei der Eingabe gibt
- 'Evtl auch überflüssiges Relikt aus VB6-Zeiten???
- End Sub
- End Class
Je höher man vor Freude springt,
desto tiefer fällt man um auf den Boden der Tatsachen zu landen.Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „HHRonny“ ()
-
mich stört, dass du den KeyCode als Integer behandelst, und nicht als das, was er ist: ein
Keys
Also besser wäre:VB.NET-Quellcode
- Private Sub KeyCodeAuswerten(code As Keys, iChar As String)
- 'Tastenbeschreibungen anzeigen die nicht oder schlecht
- 'von der Funktion übermittelt wird
- Select Case code
- Case Keys.Back : lblKeyCodeViewStr.Text = "Back" & ControlChars.NewLine & "Space"
- Case Keys.Tab : lblKeyCodeViewStr.Text = "Tab"
- Case Keys.Enter : lblKeyCodeViewStr.Text = "Enter"
- Case Keys.ShiftKey : lblKeyCodeViewStr.Text = "Shift" : lblShift.BackColor = lblShiftBC
- Case Keys.ControlKey : lblKeyCodeViewStr.Text = "Ctrl" : lblCtrl.BackColor = lblCtrlBC
- Case Keys.Menu : lblKeyCodeViewStr.Text = "Alt" : lblAlt.BackColor = lblCtrlBC
- Case Keys.Pause : lblKeyCodeViewStr.Text = "Break"
- Case Keys.CapsLock : lblKeyCodeViewStr.Text = "Caps"
- If GetKeyState(VK_CAPSLOCK) = 1 Then
- lblCaps.BackColor = Color.LightPink
- Else
- lblCaps.BackColor = lblCapsBC
- End If
- '...
Keys
), und für sich arbeiten lassen. -
Um deinen Code auf VB.NET-Stand zu heben:
Was ich dir auch empfehlen kann, ist die WinAPI-Funktionn nicht über Private Declare sondern über <DllImport()> einzubinden. Das mit dem Private Declar ist VB6.
Hierzu einfach mal auf pinvoke.net nachschlagen: pinvoke.net/default.aspx/user32.getkeystate
Du verwendest immer noch den VB-Namespace...nicht gut. Wenn du eine "Neue Zeile" brauchst, kannst du das auch überSystem.Environment.NewLine
lösen.
Lg RadinatorIn general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell -
@'ErfinderDesRades
Danke!
@'Radinator
Auch Dir danke ich, aber leider kann ich mit dem Tipp so nichts anfangen. Dafür fehlt mir wohl etwas mehr Hintergrundwissen.
Wenn ich den Beispielcode von pinvoke einfüge bekomme ich die verschiedensten Fehlermeldungen:
Ein Bild sagt mehr als 1000 Worte
So stehts auf der pinvoke-Seite. Im Netz habe ich dann nach kurzer Suche einen Hinweis gefunden dass der Namespace "System.Runtimes.InteropServices" eingebunden werden muss.
Gesagt getan:
Danach verschwanden ein paar der Fehler und übrig blieb das hier:
Aus der Fehlermeldung schloss ich, dass die Funktion darunter irgendwie fehl am Platz ist und entfernte sie.
Und jetzt wird es etwas strange (für mich^^). Ich hänge hinten also ein "_" inklusive Leerzeichen davor an was sich anscheinend
positiv auswirkt aber sich auch gleich wieder in Luft auflöst. !höÖ! Ö_Ö?
Und ab hier habe ich die Raterei aufgegeben, denn die hier bemänglte Konstante wird auf der pinvoke-Seite angegeben.
Mir fehlt zuviel Grundwissen zu diesen ganzen Vorgängen um solche Beispiele korrekt einzusetzen. Ich brauche funktionierenden
Beispielcode. Alles andere ist nur raten.
Wenn Du diesbezüglich noch ein Tipp hast der mir weiterhilft....
Sonst warte ich, bis ich es begriffen habe
Deinen Hinweis zu NewLine habe ich dankend umgesetzt.Je höher man vor Freude springt,
desto tiefer fällt man um auf den Boden der Tatsachen zu landen.Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von „HHRonny“ ()
-
Bitte keine Bilder über Schmuddel-Hoster einfügen!
Warum nicht einfach die Bild-Anhang-Funktion des Forums benutzen?
(Der Button ist ein Button, ist zum draufklicken (jaja, manche finden diesen Hinweis doof, aber andere wissen das einfach nicht)) -
<p>Um das DllImport-Attribut verwenden zu können, musst du es voll qualifizieren (sprich: den Namspace-Pfad System.Interop.RuntimeService entweder mit Imports einbinden oder vor das DllImport schreiben)</p>
<p>Aus dem zweiten Bild lese ich mal (obwohl ich nicht die ganze Signatur sehe), dass du hier das Schlüsselwort "Shared" nicht dabei hast.</p>
<p>Um das DllImport-Attribut verwenden zu könne, musst du die Methode Shared (also Static) machen. Das hat zur Folge, dass du von der Klasse, in der du die Methode defniertst, keine Instanz, also kein Objekt erzeugen musst, um die Methode verwenden zu können.</p>
<p> </p>
<p> </p>
<p> </p>In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell -
@'Radinator
Also so ganz schlau werde ich aus Deinem letzten Beitrag nicht. Dennoch habe ich es mit etwas Rate-Glück hinbekommen.
Nun funktioniert es!
So sieht das jetzt bei mir aus: Bitte sag dass alles richtig ist
Den Typ "KeyStates" mochte meine IDE nicht und schlug mir stattdessen "CheckState" vor. Ich nehme mal an, da gibt es keinen gravierenden Unterschied, oder doch?Je höher man vor Freude springt,
desto tiefer fällt man um auf den Boden der Tatsachen zu landen. -
HHRonny schrieb:
da gibt es keinen gravierenden Unterschied, oder doch?
Den falschen Datentyp nehmen ist wie einen Fisch heiraten, oder eine Kartoffeltüte interpolieren - es geht nicht, und es ergibt oftmals nichteinmal irgendeinen Sinn. -
Lustiger Vergleich
Und in Bezug auf meinen Code oben?
Ich mein, CheckState, KeyStates, klingt für mich wie Mario und Luigi. Beides Italiener, nur die Namen sind unterschiedlich.
Da der Typ von der IDE vorgeschlagen wurde dachte ich dass er vielleicht Ersatz für KeyStates ist. Also neuer.
?Je höher man vor Freude springt,
desto tiefer fällt man um auf den Boden der Tatsachen zu landen. -
Dann schauen wir mal nach, wofür CheckState in .Net steht:
msdn.microsoft.com/de-de/libra…cs-lang=vb#code-snippet-1
Nicht gerade beeindruckend, oder?
Nun nochmal zu Pinvoke:
pinvoke.net/default.aspx/user32.GetKeyState
Nun, da is ein gewaltiger Block namens VirtualKeyStates, wobei es sich um ein Enum handelt.
Man könnte nun dazu über gehen und das kopieren, wäre da nicht ein kleiner Satz drunter:
Pinvoke schrieb:
The Enum Keys in System.Windows.Forms has the key code used for this function, so you don't need to define const
Wie du also siehst ist CheckState nicht mal annähernd mit KeyStates verwandt. Selbst sie als "false friends" zu bezeichnen wäre noch zu viel, denn hier ist (Virtual)KeyStates lediglich ein Beispiel, wohingegen CheckState eine feste Enumeration im .Net Framework ist, die noch nicht einmal was mit Keys zu tun hat. -
Hi,
denke mal das gehört am ehesten hierhin. Und zwar sollen die Items einer CheckedListBox anhand dem Inhalt eines Arrays (split) gechecked werden. Jedoch glaube ich, dass man diesen Code, den ich gebastelt hab noch optimieren kann, da er eigentlich viel zu lange durch läuft und prüft, selbst wenn das Item schon längst gefunden wurde.
VB.NET-Quellcode
Vielleicht kann mir jemand zeigen, wies effizienter geht
Liebe Grüße
rory"Es ist sehr einfach, ein Programm zu schreiben, das innerhalb kürzester Zeit und mit wenig Speicherplatzbedarf ein vorgegebenes Problem NICHT löst." - H.A. Klaeren -
rory schrieb:
For i As Integer = 0 To split.Length - 1
Ich würde mal sagen, dass diese Schleife völlig überflüssig ist.--
If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
-- -
@rory Wenn gesichert ist, dass das Array
split
mit den Items vonclbBewerbungsart
synchron läuft, brauchst Du nur eine einzige Schleife:
Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert!
-
Ähnliche Themen
-
Cistbesser - - Sonstige Problemstellungen
-
.Secret - - Sonstige Problemstellungen
-
28 Benutzer haben hier geschrieben
- Gast (22)
- ErfinderDesRades (19)
- RodFromGermany (13)
- Lord C (10)
- jvbsl (6)
- Cypress (6)
- FormFollowsFunction (5)
- HHRonny (4)
- faxe1008 (4)
- Arby (4)
- Runshak (3)
- nafets (3)
- Gräfin_Koks (3)
- VincentTB (2)
- VaporiZed (2)
- thomasuebi (2)
- Radinator (2)
- petaod (2)
- EaranMaleasi (2)
- Artentus (2)
- us4711 (1)
- Trade (1)
- SeriTools (1)
- Rinecamo (1)
- Gather (1)
- exc-jdbi (1)
- Counterbug (1)
- Akanel (1)