2013-04-15 4 views
2

Winform 응용 프로그램 C# 및 VS 2010 Ultimate을 만들고 있습니다. 동적으로 생성 된 comboxes와 함께 flowlayoutpanel을 채우고 있습니다. 모두 동일한 바인딩 목록에 데이터 바인딩되어 있습니다. 응용 프로그램을 실행할 때 comboxes 올바르게 추가하지만 하나의 콤보 상자에서 항목을 선택하면 다른 모든 모든 동일한 항목으로 업데이트됩니다. 내가 뭘 잘못하고 있니? 도움을 주신 것에 대해 대단히 감사드립니다. J.는동적으로 생성 된 Winform 콤보 상자가 모두 동일한 값을 선택합니다.

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using System.IO; 

namespace TestCompleteForm 
{ 
public partial class Form1 : Form 
{ 
    private int comboBoxIndex = 0; 
    List<string> Existingfiles; 
    BindingList<string> ExistingSystemsList; 
    List<string> Selectedfiles; 
    BindingList<string> SelectedSystemsList; 
    BindingList<string> ListOfLanguages = new BindingList<string>(); 
    BindingList<string> ListOfSQLServers = new BindingList<string>(); 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     DirectoryInfo dinfo = new DirectoryInfo(@"C:\Hosts"); 
     FileInfo[] Files = dinfo.GetFiles("*.txt"); 
     Existingfiles = new List<string>(); 

     foreach (FileInfo file in Files) 
     { 
      Existingfiles.Add(Path.GetFileNameWithoutExtension(file.Name)); 
     } 
     ExistingSystemsList = new BindingList<string>(Existingfiles); 
     lbAvailableSystems.DataSource = ExistingSystemsList; 


     Selectedfiles = new List<string>(); 
     SelectedSystemsList = new BindingList<string>(Selectedfiles); 
     lbSelectedSystems.DataSource = SelectedSystemsList; 


     //Creat list of languages 
     var txtLanguages = File.ReadAllLines(@"C:\Languages\Languages.txt"); 
     foreach (var s in txtLanguages) ListOfLanguages.Add(s); 

     //Creat list of sql servers 
     var txtSqlServers = File.ReadAllLines(@"C:\SQL Servers\sql-servers.txt"); 
     foreach (var s in txtSqlServers) ListOfSQLServers.Add(s); 
    } 

    private void TabControl1_Click(object sender, EventArgs e) 
    { 
     if (tabControl1.SelectedTab.Name.ToString() == "page2") 
     { 
      while (flowLayoutPanel1.Controls.Count > 0) 
      { 
       var ControlToRemove = flowLayoutPanel1.Controls[0]; 
       flowLayoutPanel1.Controls.Remove(ControlToRemove); 
       ControlToRemove.Dispose(); 
      } 
      //flowLayoutPanel1.Controls.Clear(); 
      foreach (string StrSystem in SelectedSystemsList) 
      { 
       Label lNewSystem = new Label(); 
       lNewSystem.Text = StrSystem; 
       flowLayoutPanel1.Controls.Add(lNewSystem); 
       //Add combobox for languages 
       ComboBox cbLanguages = new ComboBox(); 
       cbLanguages.Name = "cbLanguages" + comboBoxIndex.ToString(); 
       cbLanguages.DataSource = ListOfLanguages; 
       flowLayoutPanel1.Controls.Add(cbLanguages); 
       //Add combobox for database servers 
       ComboBox cbSqlServers = new ComboBox(); 
       cbSqlServers.Name = "cbSqlServers" + comboBoxIndex.ToString(); 
       cbSqlServers.DataSource = ListOfSQLServers; 
       flowLayoutPanel1.Controls.Add(cbSqlServers); 
       comboBoxIndex++; 
      } 
     } 
    } 
+0

알아 냈어. 문제가되는 바인딩 목록이었습니다. 어떤 이유로 동적 컨트롤을 만들 때 바인딩 목록을 사용할 수 없습니다. 방금 목록을 반복하고 combobox.items.add()를 사용했는데 이제 작동합니다. – bearaman

답변

6

이는 바인딩을 무시하고 컨트롤에 항목을 추가하는 대신) ComboBox.Items.Add를 (사용합니다.

+0

고마워요! 너는 내 하루를 보냈다. –

+0

'String []'을 데이터 소스로 사용했기 때문에 으로 끝납니다.'cmbNew.DataSource = arr.ToArray(); –