Angepinnt [Sammelthread] Code-Korrektur

  • VB.NET

Es gibt 123 Antworten in diesem Thema. Der letzte Beitrag () ist von FormFollowsFunction.

    Wenn du dir den Code einer PictureBox angucken würdest, dann würdest du dort einen GDI+ Code sehen, der das Bild zeichnet. Also ist gleich ein Control das alles zeichnet besser.(Auch weil z.B. nicht die ganzen Flags abgefragt werden missen - z.B. fürs skalieren des Bildes).

    Dann kann man anstelle eines Strings folgendes machen:

    Visual Basic-Quellcode

    1. Private data() As Integer
    2. Property Bit(index as Integer) As Boolean
    3. Get
    4. Dim tmp As Integer = index mod 32
    5. Return ((data(index >> 5) >> tmp) And 1) = 1
    6. End Get
    7. Set
    8. If value Then
    9. Dim tmp As Integer = index mod 32
    10. data(index >> 5) |= 1 << tmp
    11. End If
    12. End Set


    Kann natürlich Fehler enthalten :D
    Edit: schon was aufgefallen: muss natürlich >> 5 sein
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „jvbsl“ ()

    Danke für den Super Tipp ;)

    Hab jetzt mal alles überarbeitet. :)

    VB.NET-Quellcode

    1. Option Strict On
    2. Option Explicit On
    3. Imports System.Drawing
    4. Imports System.Windows.Forms
    5. Imports System.Drawing.Drawing2D
    6. Public Class BinaryClock
    7. Inherits Panel
    8. Public Sub New()
    9. MyBase.New()
    10. MyBase.SetStyle(ControlStyles.CacheText Or _
    11. ControlStyles.DoubleBuffer Or _
    12. ControlStyles.AllPaintingInWmPaint Or _
    13. ControlStyles.OptimizedDoubleBuffer Or _
    14. ControlStyles.SupportsTransparentBackColor, True)
    15. With Me
    16. .Name = "BinaryClock"
    17. .Size = New Size(151, 75)
    18. .MinimumSize = New Size(.Width, .Height)
    19. End With
    20. UpdateStyles()
    21. End Sub
    22. Dim styl As New Style
    23. Dim func As New Functions
    24. Dim binarylist As New List(Of String)
    25. Public WithEvents T_BinaryClock As New Timers.Timer
    26. Private Sub BinaryClock_Load(ByVal sender As Object, _
    27. ByVal e As System.EventArgs) Handles Me.HandleCreated
    28. binarylist = func.BinarClock(Now.Hour, Now.Minute, Now.Second)
    29. T_BinaryClock.Interval = 1000
    30. T_BinaryClock.Start()
    31. End Sub
    32. Private Sub BinaryClock_Paint(ByVal sender As Object, _
    33. ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
    34. Dim ColorTop As Color = Color.LightGray
    35. Dim ColorBottom As Color = Color.DimGray
    36. Dim r As Rectangle
    37. With MyBase.ClientRectangle
    38. r = New Rectangle(0, 0, .Width - 1, .Height - 1)
    39. End With
    40. Dim radius As Single = 3
    41. styl.DrawFillRoundedRectangle(e.Graphics, r, radius, Color.Black, _
    42. New LinearGradientBrush(r, ColorTop, ColorBottom, _
    43. LinearGradientMode.Vertical))
    44. Dim tmp As Integer = 0
    45. For i As Integer = 0 To 2 Step 1
    46. For j As Integer = 0 To 5 Step 1
    47. Select Case binarylist(tmp)
    48. Case "1"
    49. e.Graphics.DrawImage(My.Resources._true, _
    50. New Point(5 + ((j * 24) + (j * 1)), _
    51. 5 + ((i * 24) + (i * 1))))
    52. Case "0"
    53. e.Graphics.DrawImage(My.Resources._false, _
    54. New Point(5 + ((j * 24) + (j * 1)), _
    55. 5 + ((i * 24) + (i * 1))))
    56. End Select
    57. tmp += 1
    58. Next
    59. Next
    60. End Sub
    61. Private Sub Timer_BinaryClock_Elapsed(ByVal sender As Object, _
    62. ByVal e As EventArgs) Handles T_BinaryClock.Elapsed
    63. binarylist = func.BinarClock(Now.Hour, Now.Minute, Now.Second)
    64. Me.Invalidate()
    65. End Sub
    66. End Class
    67. Public Class Style
    68. Public Sub DrawFillRoundedRectangle(ByVal g As Graphics, _
    69. ByVal r As Rectangle, _
    70. ByVal radius As Single, _
    71. ByVal borderColor As Color, _
    72. ByVal fillBrush As Brush)
    73. Dim path As GraphicsPath = FillRoundedRectanglePath(r, radius)
    74. g.FillPath(fillBrush, path)
    75. g.DrawPath(New Pen(borderColor), path)
    76. path.Dispose()
    77. End Sub
    78. Private Function FillRoundedRectanglePath(ByVal r As RectangleF, _
    79. ByVal radius As Single) As GraphicsPath
    80. Dim path As New GraphicsPath
    81. Dim d As Single = 2 * radius
    82. With path
    83. If radius < 1 Then
    84. .AddRectangle(r)
    85. Else
    86. .AddLine(r.X + radius, r.Y, r.X + r.Width - d, r.Y)
    87. .AddArc(r.X + r.Width - d, r.Y, d, d, 270, 90)
    88. .AddLine(r.X + r.Width, r.Y + radius, r.X + r.Width, r.Y + r.Height - d)
    89. .AddArc(r.X + r.Width - d, r.Y + r.Height - d, d, d, 0, 90)
    90. .AddLine(r.X + r.Width - d, r.Y + r.Height, r.X + radius, r.Y + r.Height)
    91. .AddArc(r.X, r.Y + r.Height - d, d, d, 90, 90)
    92. .AddLine(r.X, r.Y + r.Height - d, r.X, r.Y + radius)
    93. .AddArc(r.X, r.Y, d, d, 180, 90)
    94. End If
    95. .CloseFigure()
    96. End With
    97. Return (path)
    98. End Function
    99. End Class
    100. Public Class Functions
    101. Public Function BinarClock(ByVal hh As Integer, ByVal mm As Integer, _
    102. ByVal ss As Integer) As List(Of String)
    103. Dim binstring As New List(Of String)
    104. If hh < 12 And hh > 0 Then
    105. binstring.Add("1")
    106. Else
    107. binstring.Add("0")
    108. End If
    109. For i As Integer = 0 To 2 Step 1
    110. Dim temp As String = ""
    111. Select Case i
    112. Case 0
    113. temp = Convert.ToString(hh, 2)
    114. For j As Integer = (4 - temp.Length) To 0 Step -1
    115. binstring.Add("0")
    116. Next
    117. For m As Integer = 0 To temp.Length - 1 Step 1
    118. binstring.Add(temp.Substring(m, 1))
    119. Next
    120. Case 1
    121. temp = Convert.ToString(mm, 2)
    122. For k As Integer = (5 - temp.Length) To 0 Step -1
    123. binstring.Add("0")
    124. Next
    125. For n As Integer = 0 To temp.Length - 1 Step 1
    126. binstring.Add(temp.Substring(n, 1))
    127. Next
    128. Case 2
    129. temp = Convert.ToString(ss, 2)
    130. For l As Integer = (5 - temp.Length) To 0 Step -1
    131. binstring.Add("0")
    132. Next
    133. For o As Integer = 0 To temp.Length - 1 Step 1
    134. binstring.Add(temp.Substring(o, 1))
    135. Next
    136. End Select
    137. Next
    138. Return binstring
    139. End Function
    140. End Class
    Keep Calm And Color Your Life
    @Cypress Warum arbeitest Du mit Strings und nicht mit Boolean?
    Step 1 kannst Du einfach weglassen.
    Du kannst immer dieselbe LAufvariable j verwenden.
    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!

    Cypress schrieb:

    Laufvariable

    VB.NET-Quellcode

    1. For i As Integer = 0 To 2
    2. Dim temp As String = ""
    3. Select Case i
    4. Case 0
    5. temp = Convert.ToString(hh, 2)
    6. For j As Integer = (4 - temp.Length) To 0 Step -1
    7. binstring.Add(False)
    8. Next
    9. For j As Integer = 0 To temp.Length - 1
    10. binstring.Add(temp.Substring(j, 1) = "1") ' Konvertierung in Boolean
    11. Next
    12. Case 1
    13. temp = Convert.ToString(mm, 2)
    14. For j As Integer = (5 - temp.Length) To 0 Step -1
    15. binstring.Add(False)
    16. Next
    17. For j As Integer = 0 To temp.Length - 1
    18. binstring.Add(temp.Substring(j, 1) = "1")
    19. Next
    20. Case 2
    21. temp = Convert.ToString(ss, 2)
    22. For j As Integer = (5 - temp.Length) To 0 Step -1
    23. binstring.Add(False)
    24. Next
    25. For j As Integer = 0 To temp.Length - 1
    26. binstring.Add(temp.Substring(j, 1) = "1")
    27. Next
    28. End Select
    29. Next

    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!
    Hallo!

    Ich habe zwei Linq-Abfragen die das gleiche Ergebnis haben, ich bin mir aber nicht sicher, welche warum besser ist. Zum durchlaufen braucht ihr nur eine Listbox auf die Form1 ziehen.

    Die Abfrage macht folgendes:
    Sie gibt den Vornamen und den Nachnamen aus und summiert die Stunden. Es wird einmal mit "Group by" und einmal mit "Group row by" gearbeitet. Beidesmal kommt das gleiche Ergebnis raus. Kann zudem vielleicht noch jemand sagen, wann ein Group xxx by überhaupt relevant ist.

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    3. Dim ListUserDaten As New List(Of UserDaten)
    4. Dim objPersDetails1 As New UserDaten With {.Team = "A", .Vorname = "Hans", .Nachname = "Franz", .Hours = 3}
    5. Dim objPersDetails2 As New UserDaten With {.Team = "A", .Vorname = "Hans", .Nachname = "Franz", .Hours = 4}
    6. Dim objPersDetails3 As New UserDaten With {.Team = "A", .Vorname = "Jack", .Nachname = "Wulf", .Hours = 1}
    7. Dim objPersDetails4 As New UserDaten With {.Team = "A", .Vorname = "Jack", .Nachname = "Wulf", .Hours = 8}
    8. Dim objPersDetails5 As New UserDaten With {.Team = "B", .Vorname = "Tango", .Nachname = "Cash", .Hours = 8}
    9. Dim objPersDetails6 As New UserDaten With {.Team = "B", .Vorname = "Tango", .Nachname = "Cash", .Hours = 10}
    10. Dim objPersDetails7 As New UserDaten With {.Team = "B", .Vorname = "Tango", .Nachname = "Cash", .Hours = 7}
    11. With ListUserDaten
    12. .Add(objPersDetails1)
    13. .Add(objPersDetails2)
    14. .Add(objPersDetails3)
    15. .Add(objPersDetails4)
    16. .Add(objPersDetails5)
    17. .Add(objPersDetails6)
    18. .Add(objPersDetails7)
    19. End With
    20. '***************************************************************************
    21. '***************************************************************************
    22. Dim query = From row In ListUserDaten
    23. Group row By Name = New With {
    24. Key .Vorname = row.Vorname,
    25. Key .Nachname = row.Nachname}
    26. Into NameGroup = Group
    27. Select New With {
    28. .First = Name.Vorname,
    29. .Last = Name.Nachname,
    30. .Sum = NameGroup.Sum(Function(r) r.Hours)}
    31. '***************************************************************************
    32. '***************************************************************************
    33. For Each element In query
    34. ListBox1.Items.Add(element.First & " : " & element.Last & " : " & element.Sum)
    35. Next
    36. '***************************************************************************
    37. '***************************************************************************
    38. Dim query1 = From row In ListUserDaten
    39. Group By row.Vorname, row.Nachname Into NEU = Group
    40. '***************************************************************************
    41. '***************************************************************************
    42. For Each element In query1
    43. ListBox1.Items.Add(element.Vorname & " : " & element.Nachname & " : " & element.NEU.Sum(Function(x) x.Hours))
    44. Next
    45. '***************************************************************************
    46. '***************************************************************************
    47. End Sub
    48. End Class
    49. Public Class UserDaten
    50. Public Property Team As String
    51. Public Property Vorname As String
    52. Public Property Nachname As String
    53. Public Property Hours As Integer
    54. End Class

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „ruediger_006“ ()

    ich denke hier passt meine Frage am besten hinein...

    ich habe eine Methode, die mir die ipv4 Adresse zurück gibt...in dieser Methode habe ich eine

    if-Abfrage... und darin ein "break;" ist das unsauber? bzw gibt es da was "saubereres"?

    C#-Quellcode

    1. using (ServiceHost sh = new ServiceHost(typeof(Cservice)))
    2. {
    3. string Host = System.Net.Dns.GetHostName();
    4. string IPAddress = null;
    5. foreach (IPAddress address in Dns.GetHostEntry(Host).AddressList)
    6. {
    7. if (address.AddressFamily != AddressFamily.InterNetworkV6)
    8. {
    9. IPAddress = address.ToString();
    10. break;
    11. }
    12. }


    ohne das break; liefert er die falsche ipv4 zurück

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Runshak“ ()

    im generellen heißt es, dass man den Programmfluss mit breaks, returns oder labels nicht stören sollte. Ich persönlich sehe jetzt jedoch kein Problem darin, dass das Programm nur exakt so viele Schleifen durchläuft wie nötig.

    Die andere Frage ist, woher weisst, du dass eine IP die flasche ist? wenn du die erste IP benötigst, die der Bedingung im if()-Block entspricht, benutz doch eine modifizierte for() schleife:

    C#-Quellcode

    1. //Bitte einen Post weiter unten nachsehen, nachfolgendes ist Müll.
    2. //bool b = true;
    3. //for(int i = 0; i < Dns.GetHostEntry(Host).AddressList.Count && b; i++) // oder .Length
    4. //{ }

    Hast du die richtige IP gefunden stell b auf false und das ganze bricht Programmflusstechnisch korrekt ab.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „EaranMaleasi“ ()

    sowas finde ich eher abwegig.
    Da wird eine Extra-Variable eingeführt, die man auf true stellt, damit ohne "break" gebreakt werden kann.
    Das ist aber nur eine Verschleierung des Breakens, daher bin ich dafür, break zu verwenden, wenn gebreakt werden soll.
    Denn dafür isses da, und deswegen heißt es auch so.
    Und Variablen sind nur sehr sehr notfalls dafür da.



    Insgesamt liegt hier aber wohl eine Suche nach dem ersten (First) Treffer in einer Auflistung vor.
    Für sowas ist Linq erfunden:

    C#-Quellcode

    1. var IPAddress = Dns.GetHostEntry(Host).AddressList.First(adr=>adr.AddressFamily != AddressFamily.InterNetworkV6)
    Das ergibt aber keinen string, sondern den Typ IpAddress (was ja vlt sogar besser ist).
    Und es wirft einen Fehler, wenn nix passendes gefunden wird.
    Hey liebe Community,

    Ich selbst bin (noch) nicht wirklich aktiv in diesem Forum. Ich hab schon ein bisschen Ahnung vom programmieren, also hab alle Grundlagen drauf. Wär nett, wenn ihr euch den folgenden Codeausschnitt meines Vokabeltrainers anschaut, und mir sagt, was ich so falsch mache. Würd mir sicher helfen, wenn ich mal weiß, welche Fehler ich mache.

    VB.NET-Quellcode

    1. ​Option Strict On
    2. Public Class Form1
    3. 'Definitonen
    4. Dim Liste As New List(Of String)
    5. Dim Richtiges As String = ""
    6. 'Dieser Sub bestimmt das nächste zu prüfende Wort
    7. Sub Zufall()
    8. If Not Liste.Count = 0 Then
    9. 'Die Liste, der zu prüfenden Vokabeln beinhaltet noch Wörter - ein zufälliges Wort wird gefunden
    10. For num As Integer = 0 To Liste.Count
    11. Dim a As Integer
    12. a = CInt(Int(num * Rnd()))
    13. Dim b As String
    14. b = Liste.Item(a)
    15. Label_Frage.Text = b.Split(CChar("|")).First()
    16. Richtiges = b.Split(CChar("|")).Last()
    17. Next
    18. Else
    19. 'Die Liste, der zu prüfenden Vokabeln ist leer
    20. MsgBox("Sie haben diese Lerneinheit abgeschlossen. Ihre Fehlerquote: " & Label_Fehlerquote.Text)
    21. 'Alle Eigenschaften dieser Lektion werden in die Listview der Form Auswertung geschrieben
    22. Auswertung.Show()
    23. Dim LVI As New ListViewItem
    24. LVI.Text = Label_Lektion.Text
    25. LVI.SubItems.Add(Now.ToString)
    26. LVI.SubItems.Add("Abgebrochen")
    27. LVI.SubItems.Add(CStr(CInt(Label_Richtige.Text) + CInt(Label_Fehler.Text) + Liste.Count))
    28. LVI.SubItems.Add(Label_Richtige.Text)
    29. LVI.SubItems.Add(Label_Fehler.Text)
    30. LVI.SubItems.Add(Label_Fehlerquote.Text)
    31. Auswertung.ListView1.Items.Add(LVI)
    32. Me.Close()
    33. End If
    34. End Sub
    35. Private Sub TextBox_Eingabe_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Textbox_Eingabe.KeyDown
    36. If e.KeyCode = Keys.Enter Then
    37. 'Wenn die Textbox_Eingabe den Focus hat und Enter gedrückt wird, soll das Button1_Click Event ausgelöst werden
    38. Button_Bestätigen_Click(sender, e)
    39. End If
    40. End Sub
    41. Private Sub Button_Bestätigen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Bestätigen.Click
    42. If Not Textbox_Eingabe.Text = Nothing Then
    43. 'Die Textbox ist nicht leer
    44. If Textbox_Eingabe.Text = Richtiges Then
    45. 'In der Textbox steht die richtige Übersetzung
    46. Liste.Remove(Label_Frage.Text & "|" & Richtiges)
    47. Label6.Text = "Richtig - " & Richtiges
    48. Label_Richtige.Text = CStr(CInt(Label_Richtige.Text) + 1)
    49. Label10.ForeColor = Color.Black
    50. Else
    51. 'In der Textbox steht eine falsche Übersetzung
    52. Label6.Text = "Leider falsch - Richtig wäre " & Chr(34) & Richtiges & Chr(34) & " gewesen"
    53. Console.Beep()
    54. Label_Fehler.Text = CStr(CInt(Label_Fehler.Text) + 1)
    55. Label10.ForeColor = Color.Red
    56. End If
    57. 'Der Fehlerdurchschnitt wirde berechnet
    58. Label_Fehlerquote.Text = CStr(((CDbl(Label_Fehler.Text)) * 100) / (CInt(Label_Richtige.Text) + CInt(Label_Fehler.Text))).Split(CChar(",")).First() & " %"
    59. 'Die nächsten Zeilen sind dafür da, dass ein Label hochfährt, einfach um dem ganzen ein bisschen mehr Charakter zu geben :)
    60. Label10.Text = Richtiges
    61. Label10.BringToFront()
    62. Label10.Show()
    63. Dim Top As Integer = Label10.Top
    64. For Counter As Integer = 0 To 30
    65. Label10.Top -= 1
    66. Wartezeit(1)
    67. Next
    68. Label10.Top = Top
    69. Label10.Hide()
    70. Textbox_Eingabe.BringToFront()
    71. 'Ruft ein neues zufälliges Wort auf
    72. Zufall()
    73. End If
    74. 'Die Textbox wird geleert und der Focus wieder drauf gesetzt, damit man schnell das nächste Wort eingeben kann :)
    75. Textbox_Eingabe.Text = ""
    76. Textbox_Eingabe.Focus()
    77. End Sub
    78. Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    79. If Liste.Count > 0 Then
    80. 'Die Überprüfung wurde nicht abgeschlossen und es wird gefragt, ob die Lektion nicht lieber beendet werden soll
    81. If MsgBox("Willst du nicht lieber die Lektion abschließen, anstatt sie abzubrechen?", MsgBoxStyle.YesNo, "Vokabeltrainer") = MsgBoxResult.Yes Then
    82. e.Cancel = True
    83. Else
    84. 'Alle Eigenschaften dieser Lektion werden in die Listview der Form Auswertung geschrieben
    85. Auswertung.Show()
    86. Dim LVI As New ListViewItem
    87. LVI.Text = Label_Lektion.Text
    88. LVI.SubItems.Add(Now.ToString)
    89. LVI.SubItems.Add("Abgebrochen")
    90. LVI.SubItems.Add(CStr(CInt(Label_Richtige.Text) + CInt(Label_Fehler.Text) + Liste.Count))
    91. LVI.SubItems.Add(Label_Richtige.Text)
    92. LVI.SubItems.Add(Label_Fehler.Text)
    93. LVI.SubItems.Add(Label_Fehlerquote.Text)
    94. Auswertung.ListView1.Items.Add(LVI)
    95. End If
    96. End If
    97. End Sub
    98. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    99. Me.Text = Label_Lektion.Text 'Der Text für die Form ist der Titel der Lektion
    100. If My.Computer.FileSystem.FileExists("C:\Vokabeltrainer\" & Label_Lektion.Text & ".ini") Then 'Nochmal überprüfen ob die Datei existiert. Ich weiß, dass C:\ nicht der richtige Ort für sowas ist, wo soll ich die Dateien abspeichern?
    101. 'Die Vokabelliste wird in den List(of String) Liste eingelesen
    102. Dim sr As New IO.StreamReader("C:\Vokabeltrainer\" & Label_Lektion.Text & ".ini")
    103. While Not sr.EndOfStream
    104. Liste.Add(sr.ReadLine)
    105. End While
    106. sr.Close()
    107. End If
    108. 'und gleich zu Beginn wird ein zufälliges Vokabel abgefragt
    109. Zufall()
    110. End Sub
    111. End Class


    Ich hab mich bemüht, dass ich alles so gut wie möglich kommentiere. Wäre wirklich extrem nett, wenn ich auf ein paar meiner Fehler hingewiesen wäre :)

    Danke im Vorraus
    KingTimon
    Auf der Suche nach Coding-Kursen auf Lence.at
    1. Dir fehlt eine Architektur
    2. Du verwendest RND -> verwende die Random-Klasse
    3. Keine festen Pfade verwenden
    4. MsgBox ->MessageBox.Show
    5. Nicht mit Werten aus Labels arbeiten. Halte dir die Daten in Variablen und weiße nur fertigen Text deiner UI zu.
    6. Verwende für UI Animationen einen Timer
    7. CChar("a") -> "a"c. Dürfte zwar im Ergebnis keinen Unterschied machen, finde ich aber besser lesbar
    8. CStr(...) -> ...ToString() dasselbe wie bei 7

    Das ist mir so mal aufgefallen
    Edit:
    9. Variablen Namen wie a, b, sind idr. nicht gut identifizierbar(es sei denn es geht um geometrische Formen)
    P.S.: Guter Code ist besser als jedes Kommentar(zumindest bei den meisten Dingen)
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    @KingTimon
    • Englische Variablennamen
    • Not List.Count = 0 sieht komisch aus. Mach doch List.Count > 0, ist aber reine Geschmacksache ;)
    • CInt(Int(num * Rnd())) Holy sh*t, da sind fast mehr Fehler als Buchstaben drin. Guckst du hier: Böses aus VB6/VB2003 - und die richtigen VB.NET-Alternativen
    • Dim a As Integer ist immer etwas ungenau. Da würde ich einen aussagekräftigeren Namen wählen (In einer Schleife i zu benutzten ist etwas anderes)
    • Label_Frage.Text = b.Split(CChar("|")).First() -> Label_Frage.Text = b.Split("|"c).First()
    • Auswertung.Show() -> vb-paradise.de/allgemeines/tip…-und-aufruf-von-dialogen/ Außerdem würde da eine Namensgebung a la frmResult besser passen
    • sr.Close() -> Using nutzten
    • Label10.Hide() - Richtige Namensgebung von Controls: Englisch und ein Kürzel davor, also in dem Fall lblWhatEver. Für Kürzel guckst du hier: Was für Kürzel benutzt ihr für welche Objekte ?

    Es wäre ganz gut, wenn du mal das Projekt anhängen könntest, dann könnte man (ich) dir das mal so umschreiben, dass alles gut ist, denn es ist viel zu viel, als dass man da überall drauf eingehen könnte.
    Mfg
    Vincent

    Hey,

    wow innerhalb dieser kurzen Zeit schon zwei nützliche Antworten zu erhalten, vielen Dank kann ich da nur sagen! @jvbsl
    Ich werd mal eure Tipps anwenden und vielleicht danach das Projekt anhängen @VincentTB

    MFG

    EDIT: Sry dass ich nochmals nerve, aber @jvbsl du hast geschrieben, keine festen Pfade, wie genau darf ich das verstehen?
    Auf der Suche nach Coding-Kursen auf Lence.at

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „KingTimon“ ()

    VincentTB schrieb:

    und ein Kürzel davor
    Diese Kürzel sind von @ErfinderDesRades enorm propagiert, kommen so im Framework aber nirgends vor. Ist auch kein Wunder, denn eine derartige Benennung entspricht nicht der Guideline. So wäre z.B. der Korrekte Name für lblWhatEver eigentlich whatEverLabel, was sich aus Sicht des englischen Sprachgebrauchs wesentlich natürlicher anhört.
    Die seltsamen Abkürzungen in Variablennamen zur Identifizierung von Typ und der gleichen stammen noch aus den alten C- und BASIC-Zeiten, sind aber in einer IDE wie Visual Studio kaum noch zu gebrauchen, da man alle enthaltenen Informationen viel schöner (und dadurch noch leichter) erhalten kann und den Namen deshalb alleine dem Zweck in einer klar lesbaren Form widmen kann. Als Basis gilt immer, möglichst logisches Englisch zu produzieren, wer sich (absichtlich) nicht dran hält macht es anderen, die es tun, unnötig schwer und stellt sich außerdem gegen die Erkenntnisse, die Microsoft-Experten auf diesem Gebiet (offensichtlicherweise) voraus haben.
    Und gegen das Argument, man würde die Elemente so schneller in Intellisense finden: nein, Intellisense findet ebenso Zeichenfolgen in der Mitte von Namen, aber das ist sowieso überflüssig, denn bei Beachtung der vorherigen Richtlinien kann man sowieso jedes gesuchte Element wieder eindeutig benennen und damit finden.
    @Artentus
    Ich muss dir widersprechen:

    Artentus schrieb:

    Die seltsamen Abkürzungen in Variablennamen zur Identifizierung von Typ

    Es geht hier nicht um Variablen generell, sondern um Variablen, die Controls beinhalten. Finde ich auch ein absolutes NoGo, wenn jemand BolIsEnabled (Wenn das dann ein Boolean ist) schreibt. Genauso unnötig finde ich es, wenn man das als IsEnabledBoolean schreibt. Man braucht das da schlichtweg nicht, weil der Name da schon einen Verweis drauf gibt.
    Ein paar Beispiele:
    file ist meistens eine FileInfo
    Is* ist meistens ein Boolean
    path ist meistens ein String
    usw. Da gehört nur ein bisschen logisches denken und IntelliSense dazu. Bei Controls ist das anders. Da kann man meistens nur ziemlich schlecht erkennen, was das ist. Außerdem hat man meistens 20+ Controls, was die Übersicht stark gefährdet. Hintendran Label zuschreiben finde ich keine wirkliche Alternative: Da verdoppelt/verdreifacht sich dann bei vielen Controls der Dateiname (man denke an lvEntries -> ListViewEntries), was wieder der Übersicht nicht gut tut und das ganze wesentlich aufwendiger macht. Okay, das Argument, dass man sowas besser in IntelliSense findet, ist durch den ganzen Namen auch gewährleistet.

    -> Soll jeder so machen, wie er will, dem Compiler am Schluss ist es egal


    Aber mit WPF fällt das ganze sowieso (fast) komplett weg, worüber ich auch recht glücklich bin :)
    Mfg
    Vincent

    Guten Tag liebe VBPC,

    ich wollte mal ein bisschen mein Code korrigieren lassen. Zur Idee mir reichte der nutzen der eig. input box vom Framework nicht aus:
    aufrufcode

    VB.NET-Quellcode

    1. Sub aufrufInputBox()
    2. If Not IO.Directory.Exists("C:\Program Files (x86)\Save_Path\other_diretory.txt") Then
    3. IO.Directory.Exists("C:\Program Files (x86)\Save_Path\other_diretory.txt")
    4. IO.Directory.Exists("C:\Program Files (x86)\Save_Path\other_diretory.txt")
    5. End If
    6. source_change_q = True
    7. input_box.Show()
    8. End sub


    Hauptcode

    VB.NET-Quellcode

    1. Imports System.IO
    2. Public Class input_box
    3. Dim diColl As New ObjectModel.Collection(Of String)
    4. Dim lw As New ObjectModel.Collection(Of String)
    5. Private Sub input_box_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    6. For Each drive As String In System.Environment.GetLogicalDrives() 'ermittelt die Laufwerke auf dem PC
    7. lw.Add(drive)
    8. Next
    9. For i As Integer = 0 To lw.Count - 1
    10. For Each di As DirectoryInfo In New DirectoryInfo(lw(i)).EnumerateDirectories() 'ermittelt die Oberordner in dem jelweiligen Laufwerk
    11. diColl.Add(di.FullName)
    12. Next
    13. For h As Integer = 0 To diColl.Count - 1 'filterung
    14. If diColl(h).StartsWith(lw(i) & "$R") Then
    15. diColl.RemoveAt(h)
    16. Exit For
    17. End If
    18. Next
    19. For h As Integer = 0 To diColl.Count - 1
    20. If diColl(h).StartsWith(lw(i) & "Boot") Then
    21. diColl.RemoveAt(h)
    22. Exit For
    23. End If
    24. Next
    25. Next
    26. For i As Integer = 0 To diColl.Count - 1 'fügt das ganze in eine Combobox
    27. cb_output.Items.Add(diColl(i))
    28. Next
    29. End Sub
    30. Private Sub but_accept_Click(sender As Object, e As EventArgs) Handles but_accept.Click
    31. Using sw As New StreamWriter("C:\Program Files (x86)\Save_Path\other_diretory.txt", False) 'schreibt in einene source den neuen Speicherort
    32. sw.WriteLine(cb_output.Text)
    33. End Using
    34. Me.Close()
    35. End Sub


    das oben soll die funktion meiner eigen Inputbox darstellen.
    LG
    Lord C

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Lord C“ ()