2014-07-15 88 views
0

我有一個用戶控件繼承自組合框控件。我想要在用戶控件的構造函數中綁定數據。但是當我添加它來形成並運行項目時,它會顯示重複的項目。Winforms組合框用戶控件綁定

當我將控件添加到我的winform中時,它將它添加到窗體的Designer文件中,當我運行項目時,它將再次添加到用戶控件的構造函數中。

public partial class CheckSeriesBox : ComboBox 
{ 
    private static List<string> CheckSeries; 

    public CheckSeriesBox() 
    { 
     InitializeComponent(); 

     CheckSeries = new List<string>(); 
     SetCheckSeries(); 

     this.Items.AddRange(CheckSeries.ToArray()); 
     this.SelectedIndex = 0; 
    } 

    public static List<string> SetCheckSeries() 
    { 
     CheckSeries.Add("A"); 
     CheckSeries.Add("B"); 
    } 
} 
+0

請放在多個行,如果(CheckSeries.Count> 0){CheckSeries.RemoveAll(); }在調用SetCheckSeries方法 –

+0

之前,不要再創建靜態變量。如果它符合您的目的,請使用公共財產。因爲由於靜態變化,可能會有一些地方可能會發生變化 –

+0

@AshokRathod當我將控件添加到我的winform中時,它會在窗體的Designer文件中添加項目,當我運行項目時,它會再次添加到用戶控件的構造函數中。 – ArMaN

回答

0

http://social.msdn.microsoft.com/forums/vstudio/en-US/3e35b534-7d3f-4832-8859-b5cb838bd62a/extended-combobox-adds-items-twice

public partial class CheckSeriesBox : ComboBox 
{ 
    private static List<string> CheckSeries; 

    public CheckSeriesBox() 
    { 
     InitializeComponent(); 

     CheckSeries = new List<string>(); 
     SetCheckSeries(); 

     if (DesignMode) 
     { 
      this.Items.AddRange(CheckSeries.ToArray()); 
     } 
    } 

    public static List<string> SetCheckSeries() 
    { 
     CheckSeries.Add("A"); 
     CheckSeries.Add("B"); 
    } 

    protected new bool DesignMode 
    { 
     get 
     { 
      if (base.DesignMode) 
      { 
       return true; 
      } 
      else 
      { 
       Control parent = this.Parent; 
       while ((parent != null)) 
       { 
        System.ComponentModel.ISite site = parent.Site; 
        if ((site != null) && site.DesignMode) 
        { 
         return true; 
        } 
        parent = parent.Parent; 
       } 
       return false; 
      } 
     } 
    } 

} 
相關問題