Announcement

Collapse
No announcement yet.

Initialisierung abgeleiteter Controls - Laufzeitverhalten erklären

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Initialisierung abgeleiteter Controls - Laufzeitverhalten erklären

    Hallo Experten,

    um einem TreeView das Verhalten beizubringen, das mir vorschwebt, habe ich eine Klasse "Selector" von TreeView abgeleitet:[highlight=c#] class Selector : TreeView
    {
    #region Init

    public Selector()
    {
    InitSelector();
    }


    private void InitSelector()
    {
    if (this.ImageList == null)
    {
    ImageList = new ImageList();
    //tvTools.ImageList.Images.Add(Properties.Resources. Roller01);
    //tvTools.ImageList.Images.Add(Properties.Resources. Roller02);
    ImageList.Images.Add(new Icon("o:/vis/pix/Roller01_16.ico"));
    ImageList.Images.Add(new Icon("o:/vis/pix/Roller02_16.ico"));
    }

    //if (this.Nodes.Count <= 0)
    if(this.Nodes!=null)
    {
    Nodes.Add("Types", "Typen", 0, 0);
    Nodes[0].Nodes.Add("first", "first", 0, 0);
    Nodes[0].Nodes.Add("second", "second", 0, 0);
    Nodes[0].Nodes.Add("third", "third", 1, 1);
    Nodes[0].Nodes.Add("fourth", "fourth", 1, 1);
    Nodes.Add("Rollers", "Roller", 0, 0);
    //AddClassToToolbox(tvTools, typeof(Interroll.Roller));
    //AddClassToToolbox(tvTools, typeof(Interroll.DumbRoller));
    }

    ExpandAll();
    }

    #endregion
    }[/highlight]Der Code zur Initiierung wird offenbar ausgeführt, wenn ich den Selector zu meiner Form1 hinzufüge.

    Starte ich dann das Programm, erscheinen alle voreingestellten Nodes doppelt. Wie kann ich das verhindern?

    Ciao,


    luker

  • #2
    Hallo,

    setzt mal einen Breakpoint im Konstruktor und zieh den Selektor erneut auf die Form und führe das Programm aus. Dann siehst du was passiert und die Lösung sollte auf der hand liegen.


    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Werf mal einen Blick in die InitializeComponent Methode der Form auf den du den Selektor gezogen hast.

      Comment


      • #4
        Originally posted by gfoidl View Post
        setzt mal einen Breakpoint im Konstruktor und zieh den Selektor erneut auf die Form und führe das Programm aus.
        Das habe ich getan.

        Der Breakpoint springt nicht an, wenn ich den Selektor auf die Form ziehe, wohl aber beim Programmstart.

        Wird beim Ziehen auf die Form irgendein Cache benutzt?

        Comment


        • #5
          http://entwickler-forum.de/showpost....80&postcount=3

          Comment


          • #6
            Originally posted by Ralf Jansen View Post
            Werf mal einen Blick in die InitializeComponent Methode der Form auf den du den Selektor gezogen hast.
            Da werden die standardmäßig vorhandenen Nodes angelegt. Das ist gut, damit ich sie im Designer sehe. Damit sie aber zur Laufzeit nicht doppelt vorhanden sind, habe ich sie im Designer wieder gelöscht.

            Beim Programmstart werden die Standard-Nodes wieder korrekt erzeugt. Das geht fürs erste, aber grundsätzlich hätte ich schon gern, dass sich der Selektor im Designer _und_ zur Laufzeit korrekt verhält.

            Auch ein Nodes.Clear() zu Beginn der Initialisierung half hier nichts.

            Comment


            • #7
              Dann musst du in deiner InitSelector Funktion die DesignMode Property deines Controls abfragen. Und zwar so das die Nodes nur während der Designzeit angelegt werden oder nur zur Laufzeit. Ansonsten bekommst du wie du gesehen hast die Nodes zweimal eben einmal aus der Form und nochmal aus dem Control.

              Comment

              Working...
              X