Laden...

Wie erstelle ich eine eigene Formklasse und share sie auch über mehrere Projekte hinweg?

Erstellt von TigerCrow vor 3 Jahren Letzter Beitrag vor 3 Jahren 867 Views
T
TigerCrow Themenstarter:in
86 Beiträge seit 2017
vor 3 Jahren
Wie erstelle ich eine eigene Formklasse und share sie auch über mehrere Projekte hinweg?

Hallo Zusammen,

Ich hoffe das ich hier richtig bin 😃

Zum Thema:

Ich möchte gerne eine eigene Formklasse erstellen und dieses Form auch später für andere Projekte verwenden.

Meine Klasse sieht derzeit so aus, sie ist ganz einfach also nix komplexes, denke ich 😉


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace FormModern
{
    class Modern : Form
    {
        private Label Header;
        private PictureBox Rezise;

        private void InitializeComponent()
        {
            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Modern));
            this.Rezise = new System.Windows.Forms.PictureBox();
            this.Header = new System.Windows.Forms.Label();
            ((System.ComponentModel.ISupportInitialize)(this.Rezise)).BeginInit();
            this.SuspendLayout();
            // 
            // Rezise
            // 
            this.Rezise.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
            this.Rezise.BackColor = System.Drawing.Color.Transparent;
            this.Rezise.Cursor = System.Windows.Forms.Cursors.SizeNWSE;
            this.Rezise.Image = ((System.Drawing.Image)(resources.GetObject("Rezise.Image")));
            this.Rezise.Location = new System.Drawing.Point(461, 309);
            this.Rezise.Name = "Rezise";
            this.Rezise.Size = new System.Drawing.Size(20, 20);
            this.Rezise.TabIndex = 1;
            this.Rezise.TabStop = false;
            // 
            // Header
            // 
            this.Header.BackColor = System.Drawing.SystemColors.ActiveCaption;
            this.Header.Dock = System.Windows.Forms.DockStyle.Top;
            this.Header.Font = new System.Drawing.Font("Verdana", 18F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
            this.Header.Location = new System.Drawing.Point(0, 0);
            this.Header.Name = "Header";
            this.Header.Size = new System.Drawing.Size(481, 42);
            this.Header.TabIndex = 2;
            this.Header.Text = "Form";
            this.Header.TextAlign = System.Drawing.ContentAlignment.BottomLeft;
            // 
            // Modern
            // 
            this.ClientSize = new System.Drawing.Size(481, 329);
            this.Controls.Add(this.Header);
            this.Controls.Add(this.Rezise);
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
            this.Name = "Modern";
            ((System.ComponentModel.ISupportInitialize)(this.Rezise)).EndInit();
            this.ResumeLayout(false);

        }
    }
}

Wie kann ich das jetzt machen oder muss ich was bestimmtest beachten?

Dachte ja das ich das Kompiliere als dll ,einbinde die dll im neuen project dann einfach mit:


class Form1 : Modern

einbinde 😃 Nur tut das nicht

Haffo ich habe mich verständlich ausgedrückt

Lieben Gruß
TigerCrow

4.931 Beiträge seit 2008
vor 3 Jahren

Es fehlt der entscheidende Modifier:


public class Modern : Form
{
  // ...
}

Edit: Ohne Modifier ist der default internal (also nur innerhalb der eigenen Assembly sichtbar).

T
TigerCrow Themenstarter:in
86 Beiträge seit 2017
vor 3 Jahren

Ohhh man ich bin blind ... DANKE

T
TigerCrow Themenstarter:in
86 Beiträge seit 2017
vor 3 Jahren

Jetzt habe ich aber doch noch eine Frage ... SORRY

im Designer sieht mein Formular so aus, siehe Anhang

Aber wenn ich das Starte ist es leer 8o

Was feht da?

Habe versucht das auf public zu setzten bringt nix ... protected override void geht nicht

Wie bekomme ich jetzt die Picturebox und den label ins form wenn ich das form starte?

4.931 Beiträge seit 2008
vor 3 Jahren

Hast du die Form-Klasse manuell erstellt oder per Designer?
Rufst du auch im Basisform-Konstruktor InitializeComponent() auf?

T
TigerCrow Themenstarter:in
86 Beiträge seit 2017
vor 3 Jahren

Habe ich manuell erstellt

wenn ich diese methode einfüge macht er es im aktuellen projekt


protected override void OnActivated(EventArgs e)
        {
            base.OnActivated(e);
            InitializeComponent();
        }

Ist die eventuell falsch ?

aber im neuen projekt bekommen ich eine normale form, nur beim starten habe ich das neue 😦

T
TigerCrow Themenstarter:in
86 Beiträge seit 2017
vor 3 Jahren

Habe jetzt dieses noch hinzugefügt und es geht 😃

Aber ist das auch richtig?


 protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            InitializeComponent();
        }

Lieben Gruß

4.931 Beiträge seit 2008
vor 3 Jahren

Nein, beide komplett falsch! InitializeComponent() nur einmalig im Konstruktor aufrufen:


Modern()
{
    InitializeComponent();
}

Warum hast du die Basisform nicht mit dem Designer erstellt (denn der erzeugt doch den richtigen Code)?

PS: Die Form-Klasse würde ich ModernForm nennen.

T
TigerCrow Themenstarter:in
86 Beiträge seit 2017
vor 3 Jahren

Danke Th69

hat alles geklappt 😃

Warum hast du die Basisform nicht mit dem Designer erstellt (denn der erzeugt doch den richtigen Code)?

Hatte ich zuerst, nur da es nicht ging habe ich es mit der Klasse gemacht. Jetzt geht es aber in beiden Versionen 😃

Danke nochmals, war gestern blind 😦

T
TigerCrow Themenstarter:in
86 Beiträge seit 2017
vor 3 Jahren

Jetzt habe ich noch eine Frage, habe gesucht aber leider nichts gefunden 😦

Wenn ich jetzt dieses Formular in andere Projekte einsetze habe ich an meinen Controls ein Schloss.
Gibt es eine Möglichkeit das man das Schloss ausblendet?
Oder anders gefragt, wie ist es möglich das man in anderen Projekten die controls nicht anwählen kann ?

Siehe Anhang dann weißt Du was ich meine

Lieben Gruß
TigerCrow

463 Beiträge seit 2009
vor 3 Jahren

Das Schloss sagt aus, dass die Form geerbt ist - dieses ist zur Laufzeit nicht sichtbar.

4.931 Beiträge seit 2008
vor 3 Jahren

Sorry, hatte deine letzte Frage nicht gelesen gehabt.

Das dient als Hinweis, daß man die Elemente der geerbten Form nicht löschen, sondern nur neue Controls hinzufügen kann.

PS: Sehe ich jetzt erst: es heißt "Resize" (nicht "Rezise" 😉.

5.299 Beiträge seit 2008
vor 3 Jahren

Ich hab mich vor langem mal an so wiederverwertbaren Forms versucht - unds dann gelassen.

Wenn du das Form in ein anderes Projekt einbindest - kannst du dann dort im Designer Controls hinzufügen? Das war bei mir damals problematisch.

Der frühe Apfel fängt den Wurm.

T
TigerCrow Themenstarter:in
86 Beiträge seit 2017
vor 3 Jahren

Ich hab mich vor langem mal an so wiederverwertbaren Forms versucht - unds dann gelassen.

Wenn du das Form in ein anderes Projekt einbindest - kannst du dann dort im Designer Controls hinzufügen? Das war bei mir damals problematisch.

Ja das kann ich 😃 mich stören halt nur die Schlösser im neuen Projekt
und was die Schlösser bedeuten is mir auch klar 😉
Sorry, Rezise war schriebfehler ...

Vielleicht finde ich ja irgendwann was im Netz 😉 oder aus zufall finde ich was 😃

Auf jedenfall funktioniert es 😃 bis jetzt

Lieben Gruß
TigerCrow

463 Beiträge seit 2009
vor 3 Jahren

Was stört dich an den Schlössern denn? Sie zeigen dir genau dass, was Sache ist - die vererbte Form ist für Veränderungen gesperrt.