2017-12-22 10 views
-1

リストボックスの各項目にラベルを追加するメソッドを作成しようとしています。各項目には独自のラベルがあるので、後で制御することができます。私はいくつかの異なるトピックをここで試してみましたが、有用な結果をもたらさなかった他のサイトもいくつかありました。ラベル配列を作成する際の問題

フォーム負荷にトリガされるマイコード:

private Label [] lblData; 

    private void Create_Labels() 
    { 
     Panel InfoPanel = new Panel(); 
     InfoPanel.Location = new Point(922, 22); 
     InfoPanel.Size = new Size(200, 150); 
     InfoPanel.BackColor = Color.Azure; 
     this.Controls.Add(InfoPanel); 
     listBox1.SelectedIndex = 1; 
     lblData = new Label[255]; 
                //2 items we don't want, thrown out 
     for (int i = listBox1.SelectedIndex; i <= listBox1.Items.Count -2; i++) 
     { 
      lblData[i] = new Label(); 
      lblData[i].Location = new Point(5 * i, 5 * i); 
      InfoPanel.Controls.Add(lblData[i]); 
      lblData[i].Text = listBox1.SelectedItem.ToString(); 
      listBox1.SelectedIndex = listBox1.SelectedIndex + 1; 
     } 
    } 

これは、各項目ごとに通るが、唯一つのラベルが生成されます。

+0

あなたはあなたのリストにあるどのように多くの項目を1に設定され、選択したインデックス、であなたのループを始めていますか?また、なぜあなたは 'SelectedIndex' *をループ内で変更していますか? – Amy

+0

あなたのタイトルにエラーが表示されています。あなたはどんなエラーを出していますか? – Amy

+0

i = selectedindex(currentindex?)そして最大値を数えます。それが正しいと仮定します.. – StackUser77288

答えて

0

ラベルのサイズと位置によって、一方のラベルが他方のラベルを覆っているため、問題が発生していました。

private List<Label> lstLabels; 
    private void Create_Labels() 
    { 
     // Create panel to hold labels. 
     Panel InfoPanel = new Panel(); 
     InfoPanel.Size = new Size(200, 150); 
     InfoPanel.Location = new Point(50, 50); 
     InfoPanel.BackColor = Color.Pink; 
     this.Controls.Add(InfoPanel); 

     listBox1.SelectedIndex = 0; 
     lstLabels = new List<Label>(); 

     // Iterate through listbox items to create labels. 
     for (int i = 0; i < listBox1.Items.Count; i++) 
     { 
      // Set the label properties. 
      Label l = new Label(); 
      l.BackColor = Color.White; 
      l.Location = new Point(15 * i, 15 * i); // ***Distance adjusted between each label.*** 
      l.Text = listBox1.SelectedItem.ToString(); 
      setLabelSize(l); // ***The label size was covering the other label.*** 

      // Add label to Panel. 
      InfoPanel.Controls.Add(l); 

      // Add label to List for later use. 
      lstLabels.Add(l); 

      if (i < listBox1.Items.Count-1) 
       listBox1.SelectedIndex = listBox1.SelectedIndex + 1; 
     } 
    } 

    // Sets the size of the label. 
    private void setLabelSize(Label l) 
    { 
     using (Graphics g = CreateGraphics()) 
     { 
      SizeF size = g.MeasureString(l.Text, l.Font); 
      l.Height = (int)Math.Ceiling(size.Height); 
      l.Width = (int)Math.Ceiling(size.Width) + 5; 
     } 
    } 

パネルバックカラーとラベルバックカラーを追加して、何が起こっていたかを区別しました。

enter image description here

関連する問題