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);
}
}
最初にコントロールを削除してから列定義を削除していますが、なぜこれが起こっているのか理解できません。
前もって感謝します。