Controls während der Laufzeit Stylen

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

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Controls während der Laufzeit Stylen

    Edit Hat sich Erledigt...

    Hier Für denen die sowas suchen.

    Dynamische Groupbox Während der Laufzeit Stylen.


    'Groupbox Herstellen

    VB.NET-Quellcode

    1. Dim GroupBoxBordercolor As Color
    2. If Das= "....." Then
    3. GroupBoxBordercolor = Color.Green
    4. End If
    5. GroupBoxes(IdCount) = New MyGroupBox With { 'IdCounter Ist Die Nummerierung der Groupboxen
    6. .Name = "GroupBox" & IdCount,
    7. .Left = 10 + 1 * 360,
    8. .Top = 1 + 1 * 2,
    9. .Size = New Size(350, 200),
    10. .Text = Username,
    11. .BorderColor = GroupBoxBordercolor,
    12. .ForeColor = Color.Black
    13. }
    14. GroupBoxes(IdCount).BackColor = Color.Transparent ' Transparentes Hintergrund
    15. Form1.Tabpage1.Controls.Add(GroupBoxes(IdCount))



    Neue Groupbox Classe Herstellen

    VB.NET-Quellcode

    1. Public Class MyGroupBox
    2. Inherits GroupBox
    3. 'Create the Property backing fields
    4. Private _BorderPen As Pen
    5. Private _BackgroundBrush As SolidBrush
    6. Private _TextBrush As SolidBrush
    7. 'In the constructor set the default colors you want to the brushes and pens of the property backing feilds
    8. Public Sub New()
    9. MyBase.ForeColor = Color.Red 'set forecolor to red
    10. _BorderPen = New Pen(Color.Blue)
    11. _BackgroundBrush = New SolidBrush(Me.BackColor)
    12. _TextBrush = New SolidBrush(Me.ForeColor)
    13. End Sub
    14. Public Property BorderColor() As Color
    15. Get
    16. Return _BorderPen.Color
    17. End Get
    18. Set(ByVal value As Color)
    19. _BorderPen.Color = value
    20. Me.Refresh()
    21. End Set
    22. End Property
    23. Public Overrides Property ForeColor() As System.Drawing.Color
    24. Get
    25. Return MyBase.ForeColor
    26. End Get
    27. Set(ByVal value As System.Drawing.Color)
    28. MyBase.ForeColor = value
    29. _TextBrush.Color = value
    30. End Set
    31. End Property
    32. Public Overrides Property BackColor() As System.Drawing.Color
    33. Get
    34. Return MyBase.BackColor
    35. End Get
    36. Set(ByVal value As System.Drawing.Color)
    37. MyBase.BackColor = value
    38. _BackgroundBrush.Color = value
    39. End Set
    40. End Property
    41. Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
    42. Dim strSize As SizeF = e.Graphics.MeasureString(Me.Text, Me.Font)
    43. Dim rect As New Rectangle(0, CInt(CInt(strSize.Height) \ 2), Me.Width - 1, Me.Height - CInt(CInt(strSize.Height) \ 2) - 1)
    44. ' Clear text and border
    45. e.Graphics.FillRectangle(_BackgroundBrush, 0, 0, Me.Width, Me.Height)
    46. ' Draw text
    47. e.Graphics.DrawString(Me.Text, Me.Font, _TextBrush, Me.Padding.Left, 0)
    48. ' Drawing Border
    49. 'Left
    50. e.Graphics.DrawLine(_BorderPen, rect.Location, New Point(rect.X, rect.Y + rect.Height))
    51. 'Right
    52. e.Graphics.DrawLine(_BorderPen, New Point(rect.X + rect.Width, rect.Y), New Point(rect.X + rect.Width, rect.Y + rect.Height))
    53. 'Bottom
    54. e.Graphics.DrawLine(_BorderPen, New Point(rect.X, rect.Y + rect.Height), New Point(rect.X + rect.Width, rect.Y + rect.Height))
    55. 'Top1
    56. e.Graphics.DrawLine(_BorderPen, New Point(rect.X, rect.Y), New Point(rect.X + Me.Padding.Left, rect.Y))
    57. 'Top2
    58. e.Graphics.DrawLine(_BorderPen, New Point(rect.X + Me.Padding.Left + CInt(strSize.Width), rect.Y), New Point(rect.X + rect.Width, rect.Y))
    59. End Sub
    60. Protected Overrides Sub Dispose(ByVal disposing As Boolean)
    61. 'Dispose of the New brushes and pens that where created for the property backing feilds
    62. _BorderPen.Dispose()
    63. _BackgroundBrush.Dispose()
    64. _TextBrush.Dispose()
    65. MyBase.Dispose(disposing)
    66. End Sub
    67. End Class


    *Topic verschoben*

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Marcus Gräfe“ ()

    seby1302 schrieb:

    VB.NET-Quellcode

    1. Form1.Tabpage1.Controls.Add(GroupBoxes(IdCount))
    Ist Form1 die Instanz einer Klasse oder ist Form1 der Name der Klasse und somit die sch... mist ranz uralt Kompatibikitätsinstanz?
    Dialoge: Instanziierung von Forms und Aufruf von Dialogen
    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!

    seby1302 schrieb:

    Werde das da jetzt auch ins Form1 packen
    Du hast diese Frage nicht beantwortet:

    RodFromGermany schrieb:

    Ist Form1 die Instanz einer Klasse oder ist Form1 der Name der Klasse und somit die sch... mist ranz uralt Kompatibikitätsinstanz?
    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!
    Uh oh … dann scheinst Du das Problem auch nicht zu (er)kennen. Wenn Du immer so arbeitest: Form1.Controls.Add(), dann weißt Du (anscheinend) nicht, dass Du da mit etwas arbeitest, von dem Du gar nicht genau weißt, was es ist. Gegenbeispiel: Wenn Du das hier hast:

    VB.NET-Quellcode

    1. Public Class Auto
    2. Property Name As String
    3. End Class
    was würde passieren, wenn Du im Code schreibst: Auto.Name = "VW"? Versuche die Frage aus Deinem Wissen heraus zu beantworten, also ohne Visual Studio.

    ##########

    @seby1302
    Ich erweitere mal die Frage. Du hast mit Form1 und Form2 zwei Form-Klassen. Dazu noch die o.g. Auto-Klasse. Form1 hat ein Label namens Label1.
    In Form2 schreibst Du in einer Methode

    VB.NET-Quellcode

    1. Form1.Label1.Text = "bla"
    2. Auto.Name = "VW"
    Was passiert?
    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.

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

    Vollzitat eines Vorposts durch Anredefunktion ersetzt ~VaporiZed
    @VaporiZed

    Der Label ändert sein Text zur VW und der String Name wird auch VW.
    Frage ist nur wieso sollte ich das machen, wenn ich nur den Labeltext ändern will
    Und die Frage ist dann immer noch, wie ich z.b aus dem Form2 sagen kann Form1 Füge Label1 Bei dir rein?
    Oder eben anders Herum, Form 1 Solls Form2 Mitteilen das Auf Form2 ein Label1 aufstellen soll...??

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

    seby1302 schrieb:

    Der Label ändert sein Text zur VW und der String Name wird auch VW.
    Hast Du den Code von @VaporiZed im Studio in einem Projekt eingefügt?
    Warum nicht?
    Bist Du lernbefreit :?:
    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!

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

    seby1302 schrieb:

    Der Label ändert sein Text zur VW
    Nein, zu bla, aber es ist richtig, es wird geändert.

    seby1302 schrieb:

    und der String Name wird auch VW.
    Falsch. Das Programm kompiliert an der Stelle nämlich gar nicht. Weil Auto eine Klasse ist. Man kann von einer Klasse an sich eine Sache wie eine Stringvariable nicht ändern. Denn Auto ist ein Bauplan. Von einem Bauplan/einer Klasse namens Haus kann man die Fassade auch nicht klinkern oder rot anstreichen. Eben weil es ein Bauplan ist. Probier es aus. Der Compiler wird meckern, dass eine Instanz gebraucht wird. Man muss also z.B. schreiben

    VB.NET-Quellcode

    1. Dim MeinAuto As New Auto
    2. MeinAuto.Name = "VW"

    Denn dann ist MeinAuto ein "echtes" Objekt, welches nach dem Bauplan Auto erstellt wurde. Und bei diesem Objekt kann man den Namen, die Farbe, sonstewas ändern.

    Aber die Tatsache, dass das bei normalen Klassen wie Auto nicht geht, aber bei der Spezialklasse Form1 schon, ist eben genau das Problem, worum es hier seit Post#2 geht. Eben das Verständnis darüber. Und das ist bei vielen leider noch nicht da. Sie wissen, dass sowas mit Form1 geht. Aber nicht warum. Und das wird auf Dauer zum Problem.
    Siehe nochmals:
    Dialoge richtig instanziieren
    und
    Warum »Form1.Show« und Co. einem irgendwann ins Bein schießen


    @RodFromGermany: Langsam bitte. Daher hatte ich ja geschrieben:

    VaporiZed schrieb:

    Versuche die Frage aus Deinem Wissen heraus zu beantworten, also ohne Visual Studio.

    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 schrieb:

    also ohne Visual Studio
    Das ist für Anfänger offensichtlich nicht lösbar.
    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!
    Ich frag mich Ohne Visual Studio Wie es Gemeint ist ?(
    Ich verstehe hier nur Bahnhof, soll ich mit Paint Programmieren oder was?
    Ein Bespiel Wäre da Verständlicher gewesen...

    Aber wenn ich es jetzt immer noch nicht falsch Verstanden habe...
    Aus den Oberen Links, die ihr mehrmals Gepostet habt und ich immer noch glaube NIX verstanden zu haben...
    Soll ich im Form1 einem Sub Herstellen mit dem ganzen Labels Buttons etc..
    Und dann Aus Form2 Diese Abrufen?

    Nur dann total Umständlich und irre führend, abgesehen davon das ich noch nie Probleme damit hatte.
    Solange OptionStrict sich nicht Beschwert.

    Mein DarkOrbit (Falsch Game) Pixelboot/ScryptBoot Lief Jahren lang, Fehler frei.
    Um Eine Mausfreie und minimierbare Applikation herzustellen, hatte ich im Form2 ein Browser der außerhalb des Bildschirm Koordinaten lief.
    Im Form1 Hatte ich dann eine PictureBox, was Form2 Spiegelte, so das wenn ich im PictureBox(Form1) Geklickt habe, die Klicks Auf dem Browser(Form2) landeten, an exakt x,y...
    Ins gesamt war das für bis zu 4 Accounts Aufgebaut(*Bis* wegen je nach Rechner Leistung)...
    Wegen Antibann, waren dort Counter eingebaut(Uman break, so das der bot sich wie ein Mensch verhält, x Minuten pause x Minuten sammeln x Minuten Logout... alles im Random ).
    Der hat auch eigenständig, beim Spiel update die SWF´s Einpackt ausgewertet und sich Selbst aktualisiert.
    Da die BonusBoxen, doppelt gab.. 1x sichtbar und 1x so genannter HoneyBoxes dessen code sich beim update Geändert hat, und nur Bots sammeln Konnten, da diese unsichtbar und nicht anklickbar waren für normale Spiele.
    Und das Teil Lief und lief Jahren lang..
    So konnte man Jedenfalls Den Boot Minimieren und sein Rechner Frei Nutze, auch andre spiele oder filme im Fullscreen liefen nebenbei ohne Probleme.
    Der Boot hat auch nur soviel Gleichzeitige Accounts zugelassen, wie Cpu/Gpu Und Ram Vorhanden war...

    Ich frag mich Also Wieso, oder was das ganze jetzt soll.
    Meine Frage war ursprünglich **Controls während der Laufzeit Stylen**
    Und nicht, Passt es euch wenn ich mein Code in ein Modul habe und per Form1.Ladediescheißebeidir, das dort lade.
    Und WENN das gut Gemeint sein soll, dann hilft das so die Usern Überhaupt NIX wen sie nix verstehen.
    Dann könntet ihr ein Bespiel machen, aber Mir vorzustellen zu Programmieren ohne Visual Studio sagt mir Genau Null..
    Und aus den Oberen Links werde ich auch nicht schlau, weil ich das so nie Gemacht habe.

    VB.NET-Quellcode

    1. Form1.Show
    Lief ja bei Mir Jahren lang und Fehler frei, Wie oben Beschrieben.
    Und nicht nur bei mir, anscheinend auch bei den Mietern des Boot.
    Glaube nicht das so viele ein Programm mieten der Ständig abschmiert. :huh:

    P.s Bevor es heißt dann lief das Programm nicht lange genug...
    Der Boot lief teilweiße bis zu 3 Wochen non Stop durch.
    Da meine Accounts auf Verschiedene Servern waren, Leif teils* der eine Account von 4 Weiter währen die andern Upgedatet wurden....


    Ausschnitt aus dem LoginForm

    VB.NET-Quellcode

    1. If PremiumOrNotPremiumAcc1 = "IsPremiumTrow" Then
    2. DarkorbitForm.BuyPremiumAcc1.Visible = False
    3. SevaSettingsUserDataAcc1()
    4. DarkorbitForm.Show()
    5. Me.Hide()

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „seby1302“ ()

    seby1302 schrieb:

    Ich frag mich Also Wieso, oder was das ganze jetzt soll.

    seby1302 schrieb:

    Und nicht, Passt es euch wenn ich mein Code in ein Modul habe und per Form1.Ladediescheißebeidir, das dort lade.
    Und WENN das gut Gemeint sein soll, dann hilft das so die Usern Überhaupt NIX wen sie nix verstehen.

    Sollte Dir unsere Diskussion zu unzielführend erscheinen, nehm ich das zur Kenntnis und lass Dich in Ruhe.

    seby1302 schrieb:

    Dann könntet ihr ein Bespiel machen, aber Mir vorzustellen zu Programmieren ohne Visual Studio sagt mir Genau Null..
    Mit »ohne Visual Studio« war von mir gemeint: Selber überlegen und antworten, nicht in Visual Studio eingeben und das Studio für Dich denken lassen. Denn es hätte Dir zwar die richtige Antwort gegeben, Aber es geht ja darum, dass Du selber weißt, ob solch ein Beispiel klappt oder nicht. Gut, Du hast ohne Visual Studio Dir Gedanken gemacht, wie drum gebeten. Deine Antwort hatte ich schon ausgewertet.
    Ein Beispiel hatte ich gebracht. Darauf hattest Du ja auch reagiert.

    seby1302 schrieb:

    das ich noch nie Probleme damit hatte.

    seby1302 schrieb:

    Mein DarkOrbit (Falsch Game) Pixelboot/ScryptBoot Lief Jahren lang, Fehler frei.

    seby1302 schrieb:

    Und das Teil Lief und lief Jahren lang..

    seby1302 schrieb:

    Lief ja bei Mir Jahren lang und Fehler frei, Wie oben Beschrieben.
    Und nicht nur bei mir, anscheinend auch bei den Mietern des Boot.

    Das sind genau die Aussagen, die wir alle leider schon zu oft gehört haben: »Ich hab das immer schon so gemacht.«, »Das hab ich so bei youtube gesehen.« oder »Was habt Ihr denn? Läuft doch bisher.«
    Macht die Sache nicht besser. Weil es die Unwissenheit zementiert. Aber das muss jeder für sich entscheiden.

    Alles, was hier gesagt werden wollte, war:
    Klasse = Bauplan; kein Objekt, was man zur Laufzeit verändern kann
    Klasseninstanz = Objekt, erstellt nach einem Bauplan; kann man zur Laufzeit verändern
    Form-Klassen sind Ausnahmen jener Regeln, die viele nicht als Ausnahmen erkennen und trotzdem damit arbeiten, als ob es Objekte wären; die Unwissenheit über diesen Fakt ist Gegenstand dieser hier langwierigen Diskussion. Aber das sollte erstmal genügen. Ich verabschiede mich hier, weil ich offensichtlich zu schlecht diese Sache rüberbringen kann.
    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.

    seby1302 schrieb:

    Ich frag mich Ohne Visual Studio Wie es Gemeint ist
    Codeanalyse durch Hinsehen. 8o

    VB.NET-Quellcode

    1. Form1.Show
    ist VB6-Code.
    Kann es sein, dass Du Dein Projekt von VB6 auf VB.NET umstellst?
    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!
    Vollzitat des direkten Vorposts an dieser Stelle entfernt ~VaporiZed

    Nein Ich hab Mit Vb.net schon immer programmiert, und erst damit angefangen.
    Sollte ich das mal Brauchen, werde ich die alternative zu Form1.Show ausprobieren, also das ShowDialog.

    Für den Rest weiß ich leider noch immer nicht was die alternative wäre, also wie man es richtig macht :S


    Es wird hier viel gesagt aber Kaum was erklärt, es bringt mir nix wen ich überlege es anders zu machen wenn ich es nicht anders kenne.
    Deshalb kann ich es mir ohne Visual Studio Auch nicht vorstellen, b.p.w Kann ich es mir nur falschrum Vorstellen, und bin genau da wo ich angefangen habe.

    z.b Was wäre den nun die alternative zum.?

    VB.NET-Quellcode

    1. Form1.Tabpage1.Controls.Add(GroupBoxes(IdCount))


    Klar könnte ich alles im Form1 packen dem Voll knallen und von dort aus dann..

    VB.NET-Quellcode

    1. Tabpage1.Controls.Add(GroupBoxes(IdCount))


    Was aber wen ich diesem In einem Modul habe?

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

    Ähm - ich hab in diesem Thread jetzt gar keinen Plan, was eigentlich gefragt ist.
    Ich würd vorschlagen, von vorne anzufangen, oder den Thread zu schliessen.

    Also wenn du ein Problem hast, dessen Lösung du wünschst:
    • Wie sieht dein Code aus, der das Problem verursacht?
    • Was soll er tun?
    • Was macht er stattdessen?

    seby1302 schrieb:

    werde ich die alternative zu Form1.Show ausprobieren, also das ShowDialog.
    In diesem Kontext ist ShowDialog() nicht die Alternative zu Show().
    Das Problem liegt hier.
    VB6:

    Visual Basic-Quellcode

    1. Form2.Show() ' hier wird die besagte Kompatibilitäts-Instanz angezeigt

    Alternativ dazu die VB.NET-Variante:

    VB.NET-Quellcode

    1. Dim dlg = New Form2() ' hier wird der Dialog instanziiert
    2. dlg.Show()
    .ShowDialog() ruft einen modalen Dialog auf (Du kannst das Parent nicht bedienen),
    .Show() ruft einen nicht modalen Dialog auf (Du kannst das Parent weiterhin bedienen),

    Gugst Du Dialoge: Instanziierung von Forms und Aufruf von Dialogen

    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!