Autor Beitrag
Kasko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 111

Win 10
C# C++ (VS 2017/19), (Java, PHP)
BeitragVerfasst: Sa 10.10.20 18:30 
Wenn ich eine Standard User Control Erweitern möchte muss ich es bisher so machen:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
public class NoFocusCueButton : Button {
    protected override bool ShowFocusCues => false;
}

public class BringToFrontButton : NoFocusCueBotton {
    [EditorBrowsable(EditorBrowsableState.Always)]
    [Browsable(true)]
    [DefaultValue(null)]
    [Category("Behavior")]
    [Description("The target this button should bring to front.")]
    public Control Target { get; set; }

    public BringToFrontButton() {
        this.Click += delegate (object sender, EventArgs e) {
            Target.BringToFront();
        };
    }
}


Das Problem ist, dass ich so diese Buttons nicht über den Designer hinzufügen kann. Wenn ich jetzt jedoch eine User Control hinzufüge und keine Klasse kann ich sie über den Designer hinzufügen, aber sie ist ja dann kein Button. Ich müsste also einen komplett eigenen Button definieren und kann nicht einfach den bestehenden erweitern. Wenn ich die Vererbung von UserControl zu Button ändere ist es wieder nicht möglich.

Wie kann ich also eine Control erweitern und zusätzlich den Designer "erben" um diese Control auch über den Designer hinzufügen zu können.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20450
Erhaltene Danke: 2263

Win 10
C# (VS 2019)
BeitragVerfasst: Sa 10.10.20 20:49 
Hallo,

wenn ich Dich richtig verstanden habe, kann ich Dein Problem nicht reproduzieren.
Habe mal einen Screenshot von dem gemacht, was ich probiert habe: Designer mit Custom Button (PNG, 62.84 KB)

Zwei Klasse, die letzten Endes von Button erben und nach einmaligem Bauen des Projektes in der Toolbox erscheinen und benutzbar sind, wie jeder andere Button auch.

Ich verwende die Visual Studio 2019 (Version 16.7.5)

Ansonsten kann man mit Rechtsklick auf die Toolbox und dann "Choose Items ..." Elemente zur Toolbox hinzufügen. Dort kann man auch Assemblies wählen, in denen gesucht werden soll, dort könntest Du Dein gebautes Projekt auswählen.

Grüße
Christian
Einloggen, um Attachments anzusehen!
_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1209
Erhaltene Danke: 159

Windows 10 x64 Home Premium
C# (VS 2015 Enterprise)
BeitragVerfasst: Sa 10.10.20 21:35 
Zitat:
[...] nach einmaligem Bauen des Projektes [...]


Das dürfte der entscheidende Punkt sein - mach mal einen Rebuild, dann sollte es gefunden werden.
Ich könnte mir vorstellen, dass VisualStudio ohne vorherigen Build zwar die Dateien absucht, aber zu gunsten der Performance nur nach ein paar ausgewählten Basisklassen sucht und nicht alles analysiert. Mit einem fertigen Build sieht das natürlich anders aus, da funktioniert wieder Reflection, was weit performanter funktioniert, als Quellcode-Analyse.
Kasko Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 111

Win 10
C# C++ (VS 2017/19), (Java, PHP)
BeitragVerfasst: Sa 10.10.20 22:14 
Habe die Lösung schon über Stackoverflow gefunden. Das Problem habe ich aber immer nicht nicht verstanden. Natürlich habe ich nach dem Hinzufügen der Klassen und nach Änderungen an diesen einen Build bzw. Rebuild ausgeführt. Die Lösung war das Hinzufügen des ToolboxItem-Attributes (Constructor mit Type):

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
[ToolboxItem(typeof(NoFocusCueBotton))]
public class NoFocusCueBotton : Button {

}

[ToolboxItem(typeof(BringToFrontButton))]
public class BringToFrontButton : NoFocusCueBotton {

}


Warum dies jetzt notwendig war weiß ich aber immer noch nicht.

Wenn ihr es euch durchlesen wollt, hier der Stackoverflow-Beitrag: stackoverflow.com/qu...ser-control-designer

Edit:

Und zu allem Überfluss werden jetzt alle Controls gar nicht mehr in der Toolbox angezeigt, obwohl ich nichts am Projekt geändert habe. Auch nach hunderten Rebuilds, Neustart von VS, Zurücksetzen der Toolbox, etc. Und ja Automatically Populate Toolbox ist True. In einem neuen Projekt funktioniert die Toolbox aber es kann ja nicht sein, dass ich ständig ein neues Projekt erstllen muss, in welches ich den vorhandenen Code einfüge. Das ist ja auch nicht mit einem GitHub-Repo zu vereinbaren.