2012-12-13 76 views
-1

我有一個checkedListBox,它包含我在SQL數據庫中的一些充電站的名稱。我已經將checkedListBox填入了電臺名稱,我希望如果您檢查了方框中的某個項目,帶有文本「Km to」+ itemsChecked.StationName的標籤將出現在checkedListbox下方,以及一個文本框,哪裏會進入到車站的公里。 它被用來創建一個新的充電站,而千米是到下一個電臺的邊緣成本。 我已經試過這樣的事情:從checkedListBox添加動態標籤和文本框

private void stationCheckedListBox_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     foreach (BetterServiceReference.Station itemsChecked in stationCheckedListBox.CheckedItems) 
     { 
      var lbl = new Label(); 
      lbl.Name = "lblAuto" + itemsChecked.StationId; 
      lbl.Text = "Km to " + itemsChecked.StationName; 
      lbl.AutoSize = true; 
      lbl.Location = new Point(33, 462); 
      lbl.Name = "label1"; 
      lbl.Size = new Size(35, 13); 
      tabPage7.Controls.Add(lbl); 
     } 

只有它實際上並沒有創建標籤。

+0

你確定你正在進入你的'foreach'循環嗎?我不知道「BetterServiceReference.Station」是什麼,但嘗試使用像'foreach(var testChecked in stationCheckedListBox.CheckedItems)''。另外,僅供參考,您將名稱值設置爲兩次... –

+0

我之前使用'foreach(objectChecked in stationCheckedListBox.CheckedItems)',結果相同。我也嘗試沒有雙重名稱值。 – catu

+0

我看到有人用WPF中的表格做它,但我找不到任何Win Forms解決方案 – catu

回答

0

我創建了一個示例程序,它似乎爲我工作的罰款:

public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void checkedListBox1_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      foreach (var item in checkedListBox1.CheckedItems) 
      { 
       Label lbl = new Label(); 
       lbl.Text = "Testing"; 
       lbl.Location = new Point(125, 125); 
       this.Controls.Add(lbl); 
      } 
     } 
    } 

有些事情要檢查/嘗試:

  • 確保您的標籤的位置並不落後一些其他的控制!
  • 使用var/object,而不是 「BetterServiceReference.Station」
  • tabPage7表單的名字嗎?嘗試使用this.Controls.Add(lbl);

我也會警告你,一旦一個項目是選中的功能將刪除標籤。此外,它只會創建一個標籤一個點檢查任何複選框。這將需要一些工作來實現你想要做的事情;正如其他答案所建議的那樣,您最好在可見/不可見之間切換控件。

但是,希望我的回答會幫助你動態地創建一個標籤,並且創建文本框將非常相似。

0

我認爲您需要在設計師中創建標籤,並將其設置爲Visible =「False」。然後在您的代碼中,根據需要將其設置爲Visible =「True」。與文本框相同。

+0

您可以在沒有設計人員的情況下添加控件。 – LarsTech

+0

我試過了。 'foreach(BetterServiceReference.Station itemsChecked in stationCheckedListBox.CheckedItems) { int i = 1; var lbl = new Label(); lbl.Name =「edgeLabel」+ i; lbl.Text =「Km til」+ itemsChecked.StationName; lbl.Visible = true; tabPage7.Controls。加入(LBL); i ++; } 設置爲Visible = False的標籤稱爲edgeLabel1(和2和3),但我在此處創建的新標籤顯示在頂部角落,並且不會替換我以前的標籤 – catu

+0

foreach(BetterServiceReference。 StationChecks in stationCheckedListBox.CheckedItems) { edgeLabel1.Text =「Km til」+ itemsChecked.StationName; edgeLabel1.Visible = true; edgeTextBox1.Visible = true; 這適用,但只適用於第一個標籤和文本框 – catu