Laden...

Fokus im Entwurfsdesigner

Erstellt von Phaiax vor 17 Jahren Letzter Beitrag vor 17 Jahren 1.461 Views
P
Phaiax Themenstarter:in
56 Beiträge seit 2006
vor 17 Jahren
Fokus im Entwurfsdesigner

Hallo

Meine Frage lautet: Wie kann man im Entwurfsdesigner (damit meine ich den Bereich, auf dem man mit der Toolbox Komponenten plazieren kann) den Fokus verändern.
Mit Fokus meine ich nicht den Fokus, den man mit diesem Befehl ändert:

Textbox a = new Textbox();
this.Controls.Add(a);
a.Focus();
this.ParentForm.Focus();

sondern den Rahmen, der im Entwurfsmodus um die Komponenten herum angezeigt wird.

Konkret habe ich ein selbsterstelltes Benutzersteuerelement (abgel. von UserControl bzw Panel), das ich mit dem ParentControlDesigner in einen Container verwandelt habe (->hat dann die selbe Funktionalität wie ein Panel). In dieser Komponente werden dynamisch DSplitcontainer(s) hinzugefügt. Der DSplitcontainer ist von dem Windows.Forms.Splitcontainer abgeleitet. Im Ganzen betrachtet habe ich eine Komponente, in der verschachtelt durch DSplitcontainer mehrere Komponenten der DContainer-Klasse liegen.
Das sieht dann so aus:


|------------------------------------------------------------------------------------|
|   DMainControl1                                                                    |
|  |------------------------------------------------+-------------------------|      |
|  |          DSplitContainer1                      ~                         |      |
|  |      |------------------+------------------|   ~    |------------------| |      |
|  |      |DSplitContainer2  ~                  |   ~    |   DContainer3    | |      |
|  |      |  |-------------| ~ |-------------|  |   ~    |                  | |      |
|  |      |  | DContainer1 | ~ | DContainer2 |  |   ~    |                  | |      |
|  |      |  |             | ~ |             |  |   ~    |                  | |      |
|  |      |  |             | ~ |             |  |   ~    |                  | |      |
|  |      |  |             | ~ |             |  |   ~    |                  | |      |
|  |      |  |             | ~ |             |  |   ~    |                  | |      |
|  |      |  |             | ~ |             |  |   ~    |                  | |      |
|  |      |  |             | ~ |             |  |   ~    |                  | |      |
|  |      |  |             | ~ |             |  |   ~    |                  | |      |
|  |      |  |-------------| ~ |-------------|  |   ~    |                  | |      |
|  |      |                  ~                  |   ~    |                  | |      |
|  |      |-----------Panel1-+-Panel2-----------|   ~    |------------------| |      |
|  |-----------------------------------------Panel1-+-Panel2------------------|      |
|                                                                                    |
|------------------------------------------------------------------------------------|

Nun wird z.B. der DContainer1 per Designer und der Entfernen-Taste gelöscht. Sobald dies geschieht, wird der DSplitcontainer2 per Code ebenfalls gelöscht, und der DContainer2 an die ehemalige Position des DSpllitcontainer2 verschoben.
Danach hat der oben angesprochene Fokus im Designer entweder garnichts oder eine Nichtinstanz des Typs Windows.Forms.Splitcontainer im Visier. Mit Nichtinstanz meine ich hier, dass in der Eigenschaftsseite kein Name angegeben ist, und die "fokussierte" Komponente auch nicht in der Form1.Designer.cs-Datei auftaucht.
Jedenfalls stürzt dann immer die gesamte IDE (VS 2005 EE) ab, wenn ich dann auf die Form direkt oder auf die weiße Fläche neben der Form1 klicke. Wenn ich aber z.B. auf den DContainer3 klicke, ist alles in Ordnung, und der Fokus wechselt ordnungsgemäß.

Vielleicht hilft das ja weiter, wenn es keine Möglichkeit gibt, Fokus per Code zu ändern.

P
Phaiax Themenstarter:in
56 Beiträge seit 2006
vor 17 Jahren

Wenn jemand das Projekt zum anschauen haben will, melde er sich bitte bei mir.
Sonst würd mir helfen, wenn mir jemand per Remote Zugriff auf sein Visualstudio geben würde^^ Mit der Express Edition kann ich das was da passiert nämlich nicht debuggen. Schade^^ 😁

P
Phaiax Themenstarter:in
56 Beiträge seit 2006
vor 17 Jahren

ok, ich hab das problem mal gestutzt


    public partial class Test : UserControl
    {
        public Test()
        {
            InitializeComponent();
        }

        public bool MyProperty
        {
            get { return false; }
            set { this.Parent = null; }
        }

    }

Das Problem ist, dass der System.Windows.Forms.Design.BehaviourService nach einem Parent des Testobjekts sucht. Die Parenteigenschaft ist leider null, weshalb der Fokus nicht weitergegeben werden kann. Geht das nicht vielleicht, dass man die Parent bzw ParentInternal-Eigenschaft überschreibt und z.B nur für die nächste Abfrage das zwischengespeicherte, aber alte Parentobject zurückgibt?
Die Eigenschaft Control.ParentInternal gibt es zwar, aber ich kann sie nicht überschreiben. Heist dass, ein Control kann sich zur Entwurfszeit nicht selbst löschen?