4

1 から 10 までの数字のコンボボックスがあり、ユーザーが選択した内容に応じて、フォームに多くのユーザー コントロールを表示する必要があります。フォームが最初にコンボ ボックスをロードすると、値は 1 になり、グリッドにはユーザー コントロール petdetails が 1 つしかありません。 (行は 1 つしかなく、変更が加えられると列が追加されます)。私のプログラムはこの範囲まで正常に動作していますが、ユーザーが何らかの理由でより高く追加して削減すると、列は削除されますが、最後の列でコントロールが重複しています。彼はコンボ ボックスの値を 3 に変更します。残っているのは 3 列だけですが、3 番目の列では、ユーザー コントロール 5、6 が重なり合っていることがわかります。コードをここに貼り付けています。

private void cmbNoOfPets_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {

        int i = Convert.ToInt32(((System.Windows.Controls.ContentControl)(cmbNoOfPets.SelectedValue)).Content);
        int grdCols=Convert.ToInt32(grdPetDetails .ColumnDefinitions .Count.ToString ()); 
        // check if the number of pets is more than the existing number in the grid if more start with adding at the next column
        // if less start from the last decreasing till the number of columns required
            if (i > grdCols)
            for (int j = grdCols+1 ; j <= i; j++)
            {

                ColumnDefinition c = new ColumnDefinition();
                c.Width = new GridLength(370, GridUnitType.Pixel);
                grdPetDetails.ColumnDefinitions.Add  (c);
                PetDetails petdetails = new PetDetails();
                petdetails.Name = "petDetails" + j ;
                string str="Pet Number " + j + ":";
                petdetails.lblPetNumber.Content = str;
                Grid.SetRow(petdetails, 1);
                Grid.SetColumn(petdetails, j - 1);
                grdPetDetails.Children.Add(petdetails);

           }
            else if (i < grdCols)

                for (int j = grdCols; j > i; j--)
                {

                    PetDetails petdetails = new PetDetails();
                    petdetails.Name = "petDetails" + j;
                    grdPetDetails.Children.Remove(petdetails);
                    grdPetDetails.ColumnDefinitions.RemoveAt(j - 1);


                } 

     }

最初にコントロールを削除してから列定義を削除していますが、なぜこれが起こっているのか理解できません。

前もって感謝します。

4

1 に答える 1

0

したがって、質問/要求を言い換えると、「コンボボックスの SelectedItem を変更すると、新しい SelectedIndex+1 個のコントロールがアプリケーションの別の場所に表示されるようになります。」イベント ハンドラーを SelectionChanged に接続し、そのイベント ハンドラーでコントロールを作成するだけです。http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.selector.selectionchanged.aspx

于 2012-11-18T19:41:43.053 に答える