Drawing und Select Case

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 33 Antworten in diesem Thema. Der letzte Beitrag () ist von Dksksm.

    @VaporiZed What :?: C&P-Fehler habe ich gepachtet :!: ;)

    Amelie schrieb:

    VB.NET-Quellcode

    1. Public Sub DrawCanvasContent(_fform As Form, g As Graphics)
    Wenn Du statt der Form deren Size übergibst, ist das ganze sicherer und verständlicher.
    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!
    @VaporiZed
    OK nochgmal deutlich anders. Das mit dem Disposen muss ich nochmal nachlesen.
    Hier nun meine Draw-Class wo ich auch meine Labels "aufhübsche". Kann man bestimmt auch noch verbessern?
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class drawClass
    2. Private ReadOnly Pen1 As New Pen(Color.FromArgb(255, 10, 10, 10), 6)
    3. Private ReadOnly Pen2 As New Pen(Color.FromArgb(255, 90, 90, 90), 20)
    4. Private ReadOnly Pen3 As New Pen(Color.FromArgb(255, 90, 90, 90), 10)
    5. Private ReadOnly Pen4 As New Pen(Color.FromArgb(255, 130, 130, 130), 2)
    6. #Region "Retangle Draw Form"
    7. Public Sub DrawCanvasContent(_fform As Form, g As Graphics)
    8. g.DrawRectangle(Pen1, New Rectangle(New Point(0, 0), New Size(_fform.Width, _fform.Height)))
    9. g.DrawLine(Pen2, 10, 22, _fform.Width - 7, 22)
    10. g.DrawRectangle(Pen3, New Rectangle(New Point(7, 7), New Size(_fform.Width - 14, _fform.Height - 14)))
    11. g.DrawRectangle(Pen4, New Rectangle(New Point(13, 31), New Size(_fform.Width - 26, _fform.Height - 44)))
    12. End Sub
    13. Friend Sub CleanUp()
    14. Pen1.Dispose()
    15. Pen2.Dispose()
    16. Pen3.Dispose()
    17. Pen4.Dispose()
    18. End Sub
    19. #End Region
    20. #Region "Menue-Labels AS Button"
    21. Sub lblLoad(Obj As Control)
    22. For Each lbl As Control In frm_main.PN_topmenu.Controls()
    23. If TypeOf lbl Is Label Then
    24. Dim lblb As Label = DirectCast(lbl, Label)
    25. lblb.ForeColor = Color.Peru
    26. lblb.BackColor = Drawing.Color.FromArgb(35, 35, 35)
    27. 'lbl.Height = 15 : lbl.Width = 85
    28. End If
    29. Next
    30. End Sub
    31. Sub AddEvent(Obj As Control)
    32. For Each Ctrl In frm_main.PN_topmenu.Controls
    33. If TypeOf Ctrl Is Label Then
    34. Dim lbl As Label = DirectCast(Ctrl, Label)
    35. AddHandler lbl.MouseEnter, AddressOf Mouse_ENTER
    36. AddHandler lbl.MouseLeave, AddressOf Mouse_LEAVE
    37. Else
    38. For Each SubCtrl In frm_main.PN_topmenu.Controls
    39. AddEvent(CType(SubCtrl, Control))
    40. Next
    41. End If
    42. Next
    43. End Sub
    44. Sub Mouse_ENTER(sender As Object, e As EventArgs)
    45. Dim lbl As Label = DirectCast(sender, Label)
    46. lbl.ForeColor = Color.WhiteSmoke
    47. lbl.BackColor = Color.DodgerBlue
    48. End Sub
    49. Sub Mouse_LEAVE(sender As Object, e As EventArgs)
    50. Dim lbl As Label = DirectCast(sender, Label)
    51. lbl.ForeColor = Color.Peru
    52. lbl.BackColor = Color.Transparent
    53. End Sub
    54. #End Region

    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

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

    Amelie schrieb:

    Kann man bestimmt auch noch verbessern?
    Ja.

    RodFromGermany schrieb:

    Wenn Du statt der Form deren Size übergibst, ist das ganze sicherer und verständlicher.

    VB.NET-Quellcode

    1. Public Sub DrawCanvasContent(_size As Size, g As Graphics)
    2. g.DrawRectangle(Pen1, New Rectangle(New Point(0, 0), New Size(_size.Width, _size.Height)))
    3. g.DrawLine(Pen2, 10, 22, _size.Width - 7, 22)
    4. g.DrawRectangle(Pen3, New Rectangle(New Point(7, 7), New Size(_size.Width - 14, _size.Height - 14)))
    5. g.DrawRectangle(Pen4, New Rectangle(New Point(13, 31), New Size(_size.Width - 26, _size.Height - 44)))
    6. End Sub
    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!

    Amelie schrieb:

    For Each Ctrl In frm_main.PN_topmenu.Controls
    :cursing:
    Deaktivier mal die Möglichkeit, sowas überhaupt schreiben zu können. Wie das geht, steht in einem meiner Threads.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed
    Deaktivier mal die Möglichkeit, sowas überhaupt schreiben zu können.


    Ich habe ja schon den Namespace "Microsoft VisualBasic" rausgeschmissen.
    Wollte eh nochmal nachfragen, was von den automatisch generierten Verweisen braucht man eigentlich zwingend und was kann raus?
    Woher weiß ich wann ich welchen Namespace importieren muß??

    Hier der Code von meiner frm_main: Welche läuft.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class frm_main
    2. Dim MyApp As New MyApp
    3. Dim drawClass As New drawClass
    4. Public Sub New()
    5. InitializeComponent()
    6. End Sub
    7. ' Das hier sind die Labels welche ich aufgehübscht habe!!
    8. #Region "Menu_top"
    9. Private Sub llbl_Datei_Click(sender As Object, e As EventArgs) Handles llbl_Datei.Click
    10. Application.Exit()
    11. End Sub
    12. Private Sub llbl_sets_Click(sender As Object, e As EventArgs) Handles llbl_sets.Click
    13. Using frm As New frm_settings()
    14. frm.ShowDialog(Me)
    15. End Using
    16. End Sub
    17. Private Sub frm_main_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
    18. drawClass.DrawCanvasContent(Me, e.Graphics)
    19. End Sub
    20. #End Region
    21. Private Sub frm_main_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    22. drawClass.AddEvent(Me) : drawClass.lblLoad(Me)
    23. End Sub

    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

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

    Amelie schrieb:

    Woher weiß ich wann ich welchen Namespace importieren muß??
    Normalerweise wird Dir das vom IntelliSense vorgeschlagen, sofern auf die entsprechende DLL verwiesen ist.
    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!
    @RodFromGermany
    @VaporiZed

    Also ich habe nun mal ein Neues Project gestartet und das alles ist standardmäßig geladen.

    Was kann (muss) weg, was brauche ich unabdingbar....
    Woher weiß ich dann was ich wann noch benötige. Bei den etlichen Einträgen die es dort gibt ???? hmmmmm

    z.B. brauche ich das : " System.Net.Mail " wenn ich emails versenden möchte.
    Bilder
    • dfault-1.jpg

      478,77 kB, 1.112×598, 21 mal angesehen
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    Ich täte diese globalen Importe empfehlen.

    Je nach Aufgabe einer Code-Datei kann lokal was hinzugenommen werden.
    ZB In Dateien, wo du viele Controls deklarierst brauchste Imports System.Windows.Forms über die Datei zu schreiben.
    ZB In Dateien, wo du zeichnest, brauchste Imports System.Drawing.

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

    Bei den Verweisen (oben) lass ich standardmäßig nur erstmal System, System.Windows.Forms und System.Drawing drin.
    Bei den importierten Namespaces (unten) nur System, System.Collections.Generic, System.Drawing, System.Windows.Forms und System.LINQ
    Als ich schrieb: Deaktivier mal die Möglichkeit, sowas überhaupt schreiben zu können, da hab ich absichtlich einen Link eingefügt. Da steht drin, wie man das macht. Von Haus aus kannst Du das nämlich nirgends einstellen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed
    Bin das so gut ich verstanden habe durchgegangen. Form1 usw benenne ich ja schon eh immer um.
    ​Die etwas versteckte und automatisch angelegte Einstiegsprozedur
    ???
    Da rebelliert bei mir jetzt nichts. hmmm?? Hab auch alles was Ihr vorgeschlagen hab an Verweisen / NameSpace rausgeschmissen.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class frm_main
    2. Dim MyApp As New MyApp
    3. Dim drawClass As New drawClass
    4. Public Shared Function CreateInstance() As frm_main
    5. Return New frm_main
    6. End Function
    7. Public Sub New()
    8. InitializeComponent()
    9. End Sub
    10. #Region "Menu_top"
    11. Private Sub llbl_Datei_Click(sender As Object, e As EventArgs) Handles llbl_Datei.Click
    12. Application.Exit()
    13. End Sub
    14. Private Sub llbl_sets_Click(sender As Object, e As EventArgs) Handles llbl_sets.Click
    15. Using frm As New frm_settings()
    16. frm.ShowDialog(Me)
    17. End Using
    18. End Sub
    19. Private Sub frm_main_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
    20. drawClass.DrawCanvasContent(Me, e.Graphics)
    21. End Sub
    22. #End Region
    23. Private Sub frm_main_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    24. drawClass.AddEvent(Me) : drawClass.lblLoad(Me)
    25. End Sub

    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

    Amelie schrieb:

    z.B. brauche ich das : " System.Net.Mail " wenn ich emails versenden möchte.
    Das sind lediglich Verweise, die DLL dazu wird ja vom Framework bereit gestellt.
    Du musst da eigentlich außer dem VB6-Dingens nix rausnehmen.
    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!
    hmm - da habich wohl andere Prinzipien.
    Ich betrachte globale(!!) Importe weniger als etwas, wo man unappetitliches herausnimmt, sondern als etwas, was grundsätzlich leer sein sollte, und wo man dann bewusst Dinge hineintut, die man absehbar in wohl über 50% aller Code-Dateien des Projekts braucht - global eben.
    Etwa System.Collections ist auch ein Namespace mit einigem an Müll drin, und verleitet Anfänger, die olle untypisierte ArrayList einzubauen, anstatt den Stand der Technick List(of T).
    Oder was soll ich mit System.Threading.Tasks? Async/Await ist zwar dolle, aber in neun von zehn meiner Anwendungen taucht Nebenläufigkeit überhaupt nicht auf - in keiner Datei!
    Da wäre ich doch bescheuert, wenn ich diesen Namespace global importiert hätte.

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

    OK, VB.
    Ich arbeite mit C#, da gibt es solch nicht.
    Da kommt natürlich nur das rein, was benötigt wird.
    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!