Laden...

Base-UserControl mit vordefinierten UserControls als Properties

Erstellt von Davaaron vor 4 Jahren Letzter Beitrag vor 4 Jahren 801 Views
D
Davaaron Themenstarter:in
106 Beiträge seit 2016
vor 4 Jahren
Base-UserControl mit vordefinierten UserControls als Properties

Hi,

ich räume etwas meinen alten Code auf und habe gesehen, dass viele Views mehr oder weniger viel duplizierten Code enthalten.
Nun dachte ich mir, dass ich eine BasisKlasse erstelle:


public class BaseUC : UserControl
{

   protected DateDropDown dateDropDown;

   protected string date;

}


public partial class FirstUC: BaseUC
{
     FirstUC(){ InitializeComponents(); }

}

public partial class FirstUC { //Designer Implementation }

Effektiv habe ich die private Deklaration aus der Designer-Datei entfernt. Die aktuelle Situation führt zu folgendem Fehler, wenn ich die Designer-Datei von FirstUC öffne:
The variable 'dateDropDown' is either undeclared or was never assigned.

Das Control 'dateDropDown' wird vom Designer der Klasse FirstUC erstellt und entsprechend konfiguriert (habe ich vor dem Refactoring in der Designer-Klasse gemacht);
Wieso erkennt der Designer nicht die Variable? Kann ich mein Vorhaben überhaupt umsetzen?

2.080 Beiträge seit 2012
vor 4 Jahren

Wenn ich dich richtig verstehe: Lass es bleiben 😄
Bei WinForms solltest Du dem Designer nicht in seiner Designer.cs herum pfuschen 😛

Besser wäre, wenn Du die einzelnen View-Bereich, die sich immer wieder widerholen, in ein eigenes unabhängiges Control verlagerst und dann nur noch dieses Control nutzt.

Nur eine Basisklasse einführen, um Schreibarbeit zu sparen, ist aber generell keine gute Idee.
Es gibt eigentlich keine stärkere Kopplung zwischen zwei Klassen, außer Basis- und Child-Klasse, die sollte gut überlegt sein.

Warum es die Felder nicht findet, kann ich dir aber nicht sagen. Ich tippe aber Mal darauf, dass es im Designer die Klasse nicht "normal" instanziiert, sondern den Code interpretiert und dann damit arbeitet und dabei Variablen der Basis-Klasse einfach nicht beachtet werden.

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.