Announcement

Collapse
No announcement yet.

wpf Stackpanel

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

  • wpf Stackpanel

    Hallo, ich will gerade eine einfache anwendung schreiben wo ich mit einem button eine Checkbox in einem Stackpanel erstellen kann. bei jedem Klick eine weitere. Nun habe ich das Problem das ich nicht weis wie ich auf diese Boxen zugreifen kann die im Stackpanel liegen?

    hier mal den Code des button für die erstellung der Checkbox:

    public int i=1;

    public void btnCheck_click(object sender, RoutedEventArgs e)
    {
    CheckBox C = new CheckBox();
    C.Content = "HALLO " + i;
    C.Name = "cmd"+i;
    stackPanel1.Children.Add(C);

    i++;
    }

    Das wpf Formular beinhaltet das Stackpanel stackPanel1 und den Button.

    Nun will ich mit einem 2.Button prüfen welche der erstellten Checkboxen selektiert sind?

    Kennt jemand die lösung bzw. meinen denkfehler?

  • #2
    Hallo,

    Du kannst die Checkboxen / Controls zum Beispiel mittels 'FindName' anhand des Namens finden. 'FindName' gibt dir eine Referenz retour, welche du dann entsprechend casten und weiterverwenden kannst.

    HTH
    *-- robert.oh. --*

    Comment


    • #3
      Kannst du mir ein beispiel machen, ich bekomme es nicht hin

      object OBJ= new object()
      OBJ=stackpanel1.FindName("cmd1");

      Aber was muß ich jetzt Casten (Checkbox) ???

      Comment


      • #4
        Wenn man deinen Code (obige zwei Zeilen) weiterstrickt, wuerde es in etwa so ausschauen:

        Code:
        if (OBJ != null)
        {
            CheckBox cb = OBJ as CheckBox;
            if (cb.Checked)
            { /* mach was */ }
        }
        *-- robert.oh. --*

        Comment


        • #5
          Ich habe das jetzt so aber das OBJ ist nach findName immer null???

          public void btnCheck_click(object sender, RoutedEventArgs e)
          {
          CheckBox C = new CheckBox();
          C.Content = "HALLO " + i;
          C.Name = "cmd"+i;
          stackPanel1.Children.Add(C);

          i++;
          }
          public void btnCheck2_click(object sender, RoutedEventArgs e)
          {
          object OBJ = new object();
          OBJ=stackPanel1.FindName("cmd1");

          if (OBJ != null)
          {
          CheckBox cb = OBJ as CheckBox;
          }



          }

          Comment


          • #6
            Mache ich mit "stackPanel1.Children.Add(C);" eigendlich eine Kopie vom object oder legt es eine Referenz zum object an?

            Comment


            • #7
              Genau, vor dem Problem stand ich auch schon mal, wenn du im Code Controls hinzufuegst und diese dann auch wieder verwenden moechtest, so wie in deinem Fall, musst du die Namen / Controls mit 'RegisterName(...)' sozusagen am FrontEnd registrieren.

              Fuehre mal nachdem du das Control mit '...Children.Add(...)' den Command 'this.RegisterName(...)' aus; danach muesstest du mit '...FindName(...)' die Controls finden koennen.
              *-- robert.oh. --*

              Comment


              • #8
                Vielen dank ! das war das was gefehlt hat . dann mußte ich auch noch cb.checked in cb.IsChecked ändern.
                Vielen dank

                Comment


                • #9
                  Ach ja, 'Checked' ist .NET 2.0 und 'IsChecked' ist .NET 3.0 ... sorry
                  *-- robert.oh. --*

                  Comment

                  Working...
                  X