VB.net - Grundcode ,,Grafische Klasse" mit Paint-Funktion

  • VB.NET
  • .NET (FX) 4.0

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

    VB.net - Grundcode ,,Grafische Klasse" mit Paint-Funktion

    8o Hey ihr,

    obwohl ich neu bin und das echt unverschämt ist, möchte ich hier gleich mal nach einem Beispielcode fragen.

    Ich würde von mir selbst sagen, dass ich in der erweiterten Eingewöhnungsphase in die grafische Programmierung mit VB.
    Ich hab schon Java-Befehlszeilen und HTML und PHP und JS und Teile MySQLs gelernt - weiß also über Klassen, Funktionen, Schleifen, Gültigkeitsbereiche von Variablen, Dateioperationen und so weiter ganz gut Bescheid.

    :whistling: Aber bei der grafischen Klassenprogrammierung setzte ich aus. :whistling:

    Ich habe schon anhand der Microsoft Dev Foren und einiger Tutorials (z.B.: VB-Paradise Link) mich in das Thema eingearbeitet.

    Es geht um schöner geschriebene/gestylte Steuerelemente für die VB-Toolbox (u.A. ProgressBar, ListView, ...).

    :?: :?: :?:
    Mein Problem ist: Wenn ich die ganzen GDI+ Funktionalitäten durch nen Inherits von ner PicBox oder so mache, habe ich alle anderen Properties die ich nicht will, mit vererbt. Und da man nicht einfach ne Property rauskicken kann und die ,,Shadows - BrowserDisable - Technik" bei den ganzen Properties auch sau aufwändig ist und den Code unübersichtlich macht, würd ich hier gerne mal nach einem Code-Beispiel für diese ganzen grundlegenden GDI Funktionen fragen.
    :?: :?: :?:

    Es geht nur um ne Graphics Eigenschaft und ne Reaktionsmöglichkeit auf Resize oder Layout Change, wobei halt immer neu das Paint-Event aufgerufen wird.

    Wenns fertig ist, stell ich die ganzen Steuerelemente auch gerne in den ShowRoom - :!: möglichst nicht repetitiv gecoded :!: - sodass es auch die Profis unter euch wenns schnell gehen muss, verwenden können ohne dass ihnen die augen ausfallen ^^

    LG und hoffe auf eine Antwort :)
    mixing_guy
    also ich weiß jetzt nix anneres, als die Controls halt zu beerben.
    Eine allgemeine grafische Klasse, mit der man alle Controls gestalten kann, kann ich mir nicht vorstellen.
    Und auch das Beerben wird ziemlich mangelhafte Ergebnisse zeigen.

    Etwa eine TextBox selbst zu malen dürfte ziemlich schwierig werden, da den Cursor genau zu positionieren und blinken lassen, die Text-Selection richtig anzeigen etc.
    Und das auch Multiline und auch mit Scrollbars und Zeilenumbruch - na viel spass!

    Und auch bei Listview kriegst du leicht einen Vogel, wenn du das selbst malen willst - immerhin gibt es glaub 4 verschiedene View-Modi.
    Und auch Listview hat einen Edit-Modus, den musst du auch gestalten.

    Und wie gesagt: Ich sehe keinerlei Gemeinsamkeiten zw. ListView und TextBox, da muss jeweils das Rad neu erfunden werden.
    Und NumericUpdown, Datetimepicker, Listbox, Combobox habich noch garnet erwähnt.
    In dem Fall würde eine Render/Paint-Methode (Public) zur Verfügung stellen und da ein Graphicsobjekt reingeben. So kannst du im Paintevent der Form oder eines Controls die Methode aufrufen und bekommst deinen Content gerendert.

    ErfinderDesRades schrieb:

    Etwa eine TextBox selbst zu malen dürfte ziemlich schwierig werden, da den Cursor genau zu positionieren und blinken lassen, die Text-Selection richtig anzeigen etc.
    Und das auch Multiline und auch mit Scrollbars und Zeilenumbruch - na viel spass!

    Darum gehts ihm glaub ich garnicht. Wobei ich das sogar schonmal gemacht hab, mit Erfolg. So schwer ist das nicht ;) Hat übrigens den Vorteil, dass man solch Controls dann transformieren kann und mit Transparenz etc herumspielen kann.


    aha - und worum geht's ihm?

    Und "nicht so schwierig" ist ja auch relativ. Also du hast eine eigene TextBox gecodet, die kann man aus der Toolbox aufs Form ziehen, BackColor, SelectionColor, BorderColor, Tranzparenz etc im Designer einstellen, und auch Databinding dranmachen?
    Und kann Scrollen und Zeilumbruch?
    Nur so als gröbsten Richtwert - wg "nicht so schwierig": Wie viele Zeilen benötigst du denn dafür?
    Sry ich hab seinen letzten Satz gekonnt überlesen. Die Textbox ist in meinem aktuellen Projekt. Zwar in C++, lässt sich aber 1 zu 1 in VB.Net umsetzen, da das einfach nur GDI+ ist. Wenn man da erstmal eine Basisklasse (ála HandlelessControl) hat, was etwas dauert, dann braucht man für eine Textbox bzw. ich habe 720 Zeilen. BackColor, SelectionColor, Transparenz etc sind ja kein Problem. DataBinding natürlich auch nicht. Passt sich sogar der Systemsprache an ^^ . Das einzige und ziemlich blöde Problem ist, dass man soetwas nicht im Designer verwenden kann. Das machts für WinForms auch absolut unpraktikabel, geht auch schon in Richtung WPF. Ich verstehe auch nicht ganz wo das Problem ist einfach von Control zu erben.
    Danke erstmal für die schnellen Antworten!

    @Gonger96
    Das Problem liegt in der unübersichtlichkeit des Objekts dieser Klasse sobald ich vererbe!

    Bsp.: Ich erbe von der Control Klasse
    -> Allein im Designer kommen bei der Umsetzung gut 20 Eigenschaften - noch keine Funktionen - die ich nicht brauche!

    ich brauch ja nur ne .Paint Event / Methode, also ne Graphics Property, Value, Min, Max, Padding, Margin, Size, Position, BackColor, ForeColor, Font, BorderSize, BorderRadius, BorderColor und sonst nix

    ALSO KEIN data-binding oder Barrierefreiheit oder sonst irgendein Tab mist den keiner braucht!

    Drum wäre halt ne einfache Lösung schön!
    Alle Controls erben von Component. Wieso erbst Du nicht von dieser. Da sind - so weit ich weiß - keine Properties drin, aber alles, was Du brauchst, um die grafische Komponente hinzuzufügen
    "Nichts ist unendlich, bis auf die menschliche Dummheit" - Albert Einstein
    "Man sollte nicht alles vertrauen, was im Netz steht" - Abraham Lincoln
    @BeatsleigherXDA:
    Nein, wenn man einfach ne neue Klasse macht und von component erbt und die in den Designer zieht, so wird das wie der filebrowserdialog unten angezeigt! - schlecht so!

    Und auch sonst im Editor bin ich niwo auf Grafik-Funktionen gestoßen!

    @Gonger96:
    Ja verdammt! - Ich hab nur keine Basisklasse, die mir in nem Paint Event ein Grafik-Objekt zur Verfügung stellt, auf das ich dann zeichnen kann und das dann automatisch als neues Aussehen speichert!
    Und genau darum geht es!

    Leerre Klasse ohne Properties aber mit Graphics Object!

    LG
    mixing_guy
    Okay - ich geb auf!

    Es gibt keine einfache Möglichkeit Properties aus ner Vererbten Klasse rauszukicken ohne 5 Codezeilen pro Property zu haben und es gibt keine Möglichkeit ein Control zu erstellen, welches nur die grundlegendsten grafischen Operationen unterstützt!

    (Ironie ein)Danke fürs Gespräch! (Ironie aus)

    Also gut
    mixing_guy

    An Mods: Thread can be closed!
    Das ist ja Sinn der Vererbung. Du vererbst alle Member. Was C# und VB leider nicht können, ist den Zugriffsmodifier von virtuellen Funktionen zu ändern. Da die Properties aber sowieso nicht virtuell sind, hilfts auch nicht. D.h. möchte man etwas nicht mit vererben, erbt man garnicht.

    Ausserdem versuchen dir hier Leute zu helfen. Mit so einem Verhalten, wird das in Zukunft keiner mehr tun.