2014-07-02 34 views
-1

我用,所以當control產生有一個windows form app其中動態生成 tabpagescontrolsdatagridviews所有的events都dynimically GDI objectsUser objects不 乾淨,每次電流objects加上以前objects那Ÿ1次來我的應用程序將崩潰。我可以 dispose所有controlsclear所有controlsforcegarbage 集熱器,爲null OBJECTARRAY內存等等等等一切我能做的 但在我的塞納里奧一點兒也不乾淨GDI ObjectsUserObjects當工作 完成我與共享代碼üguyx PLX一些幫助我GDI如何清理對象和用戶對象

這裏是我的公共數組對象

public TabPage[] tab = new TabPage[20]; 
    public DataGridView[] rtb = new DataGridView[20]; 
    public TextBox[] txt = new TextBox[20]; 
    public TextBox[] txt1 = new TextBox[20]; 

    public TextBox[] aoid = new TextBox[20]; 
    public TextBox[] soid = new TextBox[20]; 

    public Button[] getar = new Button[20]; 
    public Button[] getsi = new Button[20]; 

    private TextBox[] txt2 = new TextBox[20]; 
    private TextBox[] txt3 = new TextBox[20]; 
    private Label[] lbl = new Label[20]; 
    private Label[] lbl1 = new Label[20]; 
    private Label[] lbl2 = new Label[20]; 
    private Label[] lbl3 = new Label[20]; 
    private Label[] pwl = new Label[20]; 
    private TextBox[] pwt = new TextBox[20]; 
    private TextBox[] txt4 = new TextBox[20]; 
    private Label[] pc_carton = new Label[20]; 
    private TextBox[] pcs_carton = new TextBox[20]; 
    private Label[] un = new Label[20]; 
    private TextBox[] units = new TextBox[20]; 
    private Label[] refno_l = new Label[20]; 
    private TextBox[] refno_t = new TextBox[20]; 

    private Label[] pro_l = new Label[20]; 
    private TextBox[] pro_t = new TextBox[20]; 

    private Label[] inlay_l = new Label[20]; 
    public TextBox[] inlay_t = new TextBox[20]; 
    public TextBox[] inlay_i = new TextBox[20]; 
    private Button[] getin = new Button[20]; 

    private Label[] yarn_l = new Label[20]; 
    public TextBox[] yarn_t = new TextBox[20]; 
    public TextBox[] yarn_i = new TextBox[20]; 
    private Button[] getyrn = new Button[20]; 
    private Label[] order_l = new Label[20]; 
    public TextBox[] order_t = new TextBox[20]; 
    //private Label[] inlayl = new Label[8]; 
    //private TextBox[] inlayt = new TextBox[8]; 


    public TextBox[] txt5 = new TextBox[6]; 
    public TextBox[] txt6 = new TextBox[6]; 

    private Label[] kd_l = new Label[20]; 
    public TextBox[] kd_t = new TextBox[20]; 

    private Label[] date_l = new Label[20]; 
    private DateTimePicker[] date_p = new DateTimePicker[20]; 

    private CheckBox[] checkb = new CheckBox[20]; 
    private TextBox[] checkt = new TextBox[20]; 
    private Label[] spec_l = new Label[20]; 
    public RichTextBox[] spec_t = new RichTextBox[20]; 

    private Label[] ean_l = new Label[20]; 
    public RichTextBox[] ean_t = new RichTextBox[20]; 

這裏是控制基於TEXTB牛值

try 
     { 
      if (e.KeyCode == Keys.Enter) 
      { 
       k = 0; 
       //s = 0; 
       tabControl2.TabPages.Clear(); 
       k = Convert.ToInt32(textBox9.Text); 
       k1 = k - tabControl2.TabPages.Count; 
       //cc = Convert.ToInt32(textBox9.Text); 
       if (k > 20) 
       { 
        MessageBox.Show("You Exceed Limit"); 
       } 
       else 
       { 

        for (int i = 0; i < k; i++) 
        { 
         tab[i] = new TabPage(); 

         //tab[i] = new TabPage(); 
         rtb[i] = new DataGridView(); 
         //Start Gridview 
         rtb[i] = new System.Windows.Forms.DataGridView(); 
         rtb[i].Location = new System.Drawing.Point(0, 110); 
         rtb[i].Anchor = AnchorStyles.Right | AnchorStyles.Left | AnchorStyles.Top; 
         rtb[i].Size = new System.Drawing.Size(1020, 230); 
         rtb[i].AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells; 

         foreach (DataGridViewColumn dcol in rtb[i].Columns) 
         { 
          dcol.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; 
         } 



         //ID Column 
         rtb[i].Columns.Add("tr_id", "ID"); 
         rtb[i].Columns["tr_id"].ReadOnly = true; 
         rtb[i].Columns["tr_id"].Width = 1; 
         rtb[i].Columns["tr_id"].Visible = false; 
         //rtb[i].Columns["tr_id"].ReadOnly = true; 

         rtb[i].Columns.Add("Counter", "SNo"); 
         rtb[i].Columns["Counter"].ReadOnly = true; 

         //rtb[i].Columns["tr_id"].ReadOnly = true; 
         //rtb[i].Columns["tr_id"].Width = 10; 
         rtb[i].Columns.Add("color_id", "id"); 

         rtb[i].Columns["color_id"].Visible = false; 
         // Color Column 
         rtb[i].Columns.Add("color_name", "Color Name"); 
         rtb[i].Columns["color_name"].ReadOnly = true; 
         rtb[i].Columns.Add("color_no", "Pantone No."); 
         rtb[i].Columns["color_no"].ReadOnly = true; 
         //Quantity Column 
         rtb[i].Columns.Add("quantity", "Quantity"); 

         //Piece Weight Column 
         //rtb[i].Columns.Add("piece_weight", "Piece Weight"); 
         //Total Weight Carton 
         rtb[i].Columns.Add("total_weight", "Total Weight"); 
         rtb[i].Columns["total_weight"].ReadOnly = true; 
         //Piece in Carton Column 
         //rtb[i].Columns.Add("pcs_carton", "Pcs/Carton"); 
         //No Of Carton Column 
         rtb[i].Columns.Add("no_of_carton", "Total Cartons"); 
         //rtb[i].Columns["no_of_carton"].ReadOnly = true; 
         //Unit Name Column 
         //rtb[i].Columns.Add("unit_name", "Unit Name"); 
         //Rate Column 
         rtb[i].Columns.Add("rate", "Rate"); 
         //Amount Column 
         rtb[i].Columns.Add("amount", "Amount"); 
         rtb[i].Columns["amount"].ReadOnly = true; 
         //Ship Qty Column 
         rtb[i].Columns.Add("ship_qty", "Ship Qty."); 
         //kdnr column 
         // rtb[i].Columns.Add("kdnr", "KDNR"); 
         //reference No Column 
         rtb[i].Columns.Add("ref_no", "Reference No./Ean No"); 

         //Article No/Product No 
         //rtb[i].Columns.Add("artno", "Art. No./Prd. No."); 

         DataGridViewCheckBoxColumn checkColumn = new DataGridViewCheckBoxColumn(); 
         checkColumn.Name = "deleterow"; 
         checkColumn.HeaderText = "Delete Row"; 
         checkColumn.Width = 50; 
         checkColumn.ReadOnly = false; 
         checkColumn.FillWeight = 10; //if the datagridview is resized (on form resize) the checkbox won't take up too much; value is relative to the other columns' fill values 
         checkColumn.Visible = false; 
         rtb[i].Columns.Add(checkColumn); 

         //DataGridViewButtonColumn btcol2 = new DataGridViewButtonColumn(); 

         //btcol2.HeaderText = "Delete"; 
         //btcol2.Name = "delete"; 
         //btcol2.Text = "Delete"; 
         //btcol2.Width = 50; 
         //btcol2.UseColumnTextForButtonValue = true; 

         //rtb[i].Columns.Add(btcol2); 


         //End Gridview 

         rtb[i].AllowUserToAddRows = false; 

         //Start txt0 
         txt[i] = new TextBox(); 
         txt[i].Location = new System.Drawing.Point(70, 0); 
         txt[i].Size = new System.Drawing.Size(169, 20); 
         txt[i].Enabled = false; 
         //End txt0 

         getar[i] = new Button(); 
         getar[i].Location = new System.Drawing.Point(241, 0); 
         getar[i].Size = new System.Drawing.Size(35, 20); 
         getar[i].Text = "Get"; 

         aoid[i] = new TextBox(); 
         aoid[i].Location = new System.Drawing.Point(70, 0); 
         aoid[i].Size = new System.Drawing.Size(10, 20); 
         aoid[i].Visible = false; 
         //Start Label0 
         lbl[i] = new Label(); 
         lbl[i].Location = new System.Drawing.Point(0, 0); 
         lbl[i].Text = "Article Name:"; 
         lbl[i].Size = new System.Drawing.Size(70, 20); 
         //End Label0 

         //Start Label1 
         lbl1[i] = new Label(); 
         lbl1[i].Location = new System.Drawing.Point(280, 0); 
         lbl1[i].Text = "Size:"; 
         lbl1[i].Size = new System.Drawing.Size(30, 20); 
         //End 
         soid[i] = new TextBox(); 
         soid[i].Location = new System.Drawing.Point(320, 0); 
         soid[i].Size = new System.Drawing.Size(10, 20); 
         soid[i].Visible = false; 
         //start txt1 
         txt1[i] = new TextBox(); 
         txt1[i].Location = new System.Drawing.Point(320, 0); 
         txt1[i].Size = new System.Drawing.Size(169, 20); 
         txt1[i].ReadOnly = true; 
         //txt1[i].Text = "asdf"; 
         //end txt1 
         getsi[i] = new Button(); 
         getsi[i].Location = new System.Drawing.Point(489, 0); 
         getsi[i].Size = new System.Drawing.Size(35, 20); 
         getsi[i].Text = "Get"; 
         ////Start Label2 
         //lbl2[i] = new Label(); 
         //lbl2[i].Location = new System.Drawing.Point(320, 0); 
         //lbl2[i].Text = "Special Instruction:"; 
         //lbl2[i].Size = new System.Drawing.Size(100, 20); 
         ////End Label2 

         ////start txt2 
         //txt2[i] = new TextBox(); 
         //txt2[i].Location = new System.Drawing.Point(420, 0); 
         //txt2[i].Size = new System.Drawing.Size(250, 50); 
         //txt2[i].Multiline = true; 
         ////end txt2 

         ////start lbl3 
         lbl3[i] = new Label(); 
         lbl3[i].Location = new System.Drawing.Point(530, 0); 
         lbl3[i].Text = "Packs :"; 
         lbl3[i].Size = new System.Drawing.Size(50, 20); 
         ////end lbl3 

         ////start txt3 
         txt3[i] = new TextBox(); 
         txt3[i].Location = new System.Drawing.Point(580, 0); 
         txt3[i].Text = "1"; 
         ////end txt3 

         ////start lbl3 
         pwl[i] = new Label(); 
         pwl[i].Location = new System.Drawing.Point(690, 0); 
         pwl[i].Text = "Piece Weight"; 
         pwl[i].Size = new System.Drawing.Size(75, 20); 
         ////end lbl3 

         ////start txt3 
         pwt[i] = new TextBox(); 
         pwt[i].Location = new System.Drawing.Point(770, 0); 
         pwt[i].Size = new System.Drawing.Size(50, 20); 
         //pwt[i].Text = "1"; 
         ////end txt3 

         ////start lbl3 
         pc_carton[i] = new Label(); 
         pc_carton[i].Location = new System.Drawing.Point(820, 0); 
         pc_carton[i].Text = "Pcs Carton"; 
         pc_carton[i].Size = new System.Drawing.Size(60, 20); 
         ////end lbl3 

         ////start txt3 
         pcs_carton[i] = new TextBox(); 
         pcs_carton[i].Location = new System.Drawing.Point(890, 0); 
         pcs_carton[i].Size = new System.Drawing.Size(50, 20); 
         //pwt[i].Text = "1"; 
         ////end txt3 

         ////start lbl3 
         un[i] = new Label(); 
         un[i].Location = new System.Drawing.Point(940, 0); 
         un[i].Text = "Unit Name"; 
         un[i].Size = new System.Drawing.Size(60, 20); 
         ////end lbl3 


         ////start lbl3 
         pro_l[i] = new Label(); 
         pro_l[i].Location = new System.Drawing.Point(0, 30); 
         pro_l[i].Text = "Program No.:"; 
         pro_l[i].Size = new System.Drawing.Size(70, 20); 

         ////end lbl3 

         ////start txt3 
         pro_t[i] = new TextBox(); 
         pro_t[i].Location = new System.Drawing.Point(70, 30); 
         pro_t[i].Size = new System.Drawing.Size(30, 20); 
         pro_t[i].MaxLength = 1; 
         //pro_t[i].Text = "1"; 
         ////end txt3 

         //Start txt0 
         inlay_t[i] = new TextBox(); 
         inlay_t[i].Location = new System.Drawing.Point(137, 30); 
         inlay_t[i].Size = new System.Drawing.Size(169, 20); 
         inlay_t[i].Enabled = false; 
         //End txt0 

         getin[i] = new Button(); 
         getin[i].Location = new System.Drawing.Point(306, 30); 
         getin[i].Size = new System.Drawing.Size(35, 20); 
         getin[i].Text = "Get"; 

         inlay_i[i] = new TextBox(); 
         inlay_i[i].Location = new System.Drawing.Point(137, 30); 
         inlay_i[i].Size = new System.Drawing.Size(10, 20); 
         inlay_i[i].Visible = false; 
         //Start Label0 
         inlay_l[i] = new Label(); 
         inlay_l[i].Location = new System.Drawing.Point(105, 30); 
         inlay_l[i].Text = "Inlay:"; 
         inlay_l[i].Size = new System.Drawing.Size(32, 20); 
         //End Label0 

         //Start Label1 
         yarn_l[i] = new Label(); 
         yarn_l[i].Location = new System.Drawing.Point(346, 30); 
         yarn_l[i].Text = "Yarn:"; 
         yarn_l[i].Size = new System.Drawing.Size(32, 20); 
         //End 
         yarn_i[i] = new TextBox(); 
         yarn_i[i].Location = new System.Drawing.Point(378, 30); 
         yarn_i[i].Size = new System.Drawing.Size(10, 20); 
         yarn_i[i].Visible = false; 
         //start txt1 
         yarn_t[i] = new TextBox(); 
         yarn_t[i].Location = new System.Drawing.Point(378, 30); 
         yarn_t[i].Size = new System.Drawing.Size(169, 20); 
         yarn_t[i].ReadOnly = true; 
         //txt1[i].Text = "asdf"; 


         //end txt1 
         getyrn[i] = new Button(); 
         getyrn[i].Location = new System.Drawing.Point(547, 30); 
         getyrn[i].Size = new System.Drawing.Size(35, 20); 
         getyrn[i].Text = "Get"; 

         order_l[i] = new Label(); 
         order_l[i].Location = new System.Drawing.Point(580, 30); 
         order_l[i].Text = "Order No."; 
         order_l[i].Size = new System.Drawing.Size(70, 20); 



         order_t[i] = new TextBox(); 
         order_t[i].Location = new System.Drawing.Point(650, 30); 
         order_t[i].Size = new System.Drawing.Size(129, 20); 
         // order_t[i].ReadOnly = true; 
         //////start txt3 
         //refno_t[i] = new TextBox(); 
         kd_l[i] = new Label(); 
         kd_l[i].Location = new System.Drawing.Point(785, 30); 
         kd_l[i].Text = "KDNR"; 
         kd_l[i].Size = new System.Drawing.Size(40, 20); 



         kd_t[i] = new TextBox(); 
         kd_t[i].Location = new System.Drawing.Point(825, 30); 
         kd_t[i].Size = new System.Drawing.Size(129, 20); 

         //refno_t[i].Location = new System.Drawing.Point(990, 0); 
         //refno_t[i].Size = new System.Drawing.Size(300, 40); 

         date_l[i] = new Label(); 
         date_l[i].Location = new System.Drawing.Point(955, 30); 
         date_l[i].Text = "Ship. Date"; 
         date_l[i].Size = new System.Drawing.Size(60, 20); 

         //refno_t[i].Multiline = true; 
         ////pwt[i].Text = "1"; 
         date_p[i] = new DateTimePicker(); 
         // date_p[i].Name = "DyanmicDateTimePicker"; 

         date_p[i].Location = new System.Drawing.Point(1020, 30); 
         date_p[i].Size = new System.Drawing.Size(90, 25); 
         date_p[i].Format = DateTimePickerFormat.Short; 
         date_p[i].Text = dateTimePicker_shipmentdate.Text; 
         ////end txt3 
         checkb[i] = new CheckBox(); 
         checkb[i].Location = new Point(1115, 30); 
         checkb[i].Text = ""; 
         checkb[i].Size = new System.Drawing.Size(20, 20); 

         ////start txt4 
         checkt[i] = new TextBox(); 
         checkt[i].Location = new System.Drawing.Point(1140, 30); 
         checkt[i].Size = new System.Drawing.Size(30, 25); 
         checkt[i].ReadOnly = true; 
         checkt[i].Text = "1"; 
         //txt3[i].Text = "1"; 
         ////end txt4 

         spec_l[i] = new Label(); 
         spec_l[i].Location = new System.Drawing.Point(0, 60); 
         spec_l[i].Text = "Special Instruction:"; 
         spec_l[i].Size = new System.Drawing.Size(100, 20); 

         spec_t[i] = new RichTextBox(); 
         spec_t[i].Location = new Point(101, 60); 
         spec_t[i].Size = new System.Drawing.Size(200, 50); 


         ean_l[i] = new Label(); 
         ean_l[i].Location = new System.Drawing.Point(365, 60); 
         ean_l[i].Text = "Ean Codes:"; 
         ean_l[i].Size = new System.Drawing.Size(80, 20); 

         ean_t[i] = new RichTextBox(); 
         ean_t[i].Location = new Point(445, 60); 
         ean_t[i].Size = new System.Drawing.Size(200, 50); 


         ////start txt4 
         txt4[i] = new TextBox(); 
         txt4[i].Location = new System.Drawing.Point(1050, 30); 
         txt4[i].Size = new System.Drawing.Size(1, 1); 
         //txt3[i].Text = "1"; 
         ////end txt4 

         tab[i].Controls.Add(lbl[i]); 
         tab[i].Controls.Add(txt[i]); 
         tab[i].Controls.Add(lbl1[i]); 
         tab[i].Controls.Add(txt1[i]); 
         tab[i].Controls.Add(lbl2[i]); 
         tab[i].Controls.Add(txt2[i]); 
         tab[i].Controls.Add(lbl3[i]); 
         tab[i].Controls.Add(txt3[i]); 
         tab[i].Controls.Add(pwl[i]); 
         tab[i].Controls.Add(pwt[i]); 
         tab[i].Controls.Add(pc_carton[i]); 
         tab[i].Controls.Add(pcs_carton[i]); 
         tab[i].Controls.Add(un[i]); 
         tab[i].Controls.Add(units[i]); 
         tab[i].Controls.Add(txt4[i]); 
         tab[i].Controls.Add(getar[i]); 
         tab[i].Controls.Add(getsi[i]); 
         tab[i].Controls.Add(aoid[i]); 
         tab[i].Controls.Add(soid[i]); 
         tab[i].Controls.Add(pro_l[i]); 
         tab[i].Controls.Add(pro_t[i]); 
         tab[i].Controls.Add(inlay_l[i]); 
         tab[i].Controls.Add(inlay_t[i]); 
         tab[i].Controls.Add(inlay_i[i]); 
         tab[i].Controls.Add(getin[i]); 
         tab[i].Controls.Add(yarn_l[i]); 
         tab[i].Controls.Add(yarn_t[i]); 
         tab[i].Controls.Add(yarn_i[i]); 
         tab[i].Controls.Add(getyrn[i]); 
         tab[i].Controls.Add(order_l[i]); 
         tab[i].Controls.Add(order_t[i]); 

         tab[i].Controls.Add(kd_l[i]); 
         tab[i].Controls.Add(kd_t[i]); 
         tab[i].Controls.Add(date_l[i]); 
         tab[i].Controls.Add(date_p[i]); 
         tab[i].Controls.Add(checkb[i]); 
         tab[i].Controls.Add(checkt[i]); 
         tab[i].Controls.Add(spec_l[i]); 
         tab[i].Controls.Add(spec_t[i]); 
         tab[i].Controls.Add(ean_l[i]); 
         tab[i].Controls.Add(ean_t[i]); 
         //tab[i].Controls.Add(refno_l[i]); 
         //tab[i].Controls.Add(refno_t[i]); 
         //tab[i].Controls.Add(lbl5[i]); 
         //tab[i].Text = txt1[i].Text; 

         tab[i].Controls.Add(rtb[i]); 
         tab[i].Location = new System.Drawing.Point(4, 22); 
         tab[i].Name = "tab" + i.ToString(); 
         tab[i].Padding = new System.Windows.Forms.Padding(3); 
         tab[i].Size = new System.Drawing.Size(400, 242); 
         tab[i].Text = "Article" + i.ToString(); 
         tab[i].UseVisualStyleBackColor = true; 
         tabControl2.TabPages.Add(tab[i]); 

         #region Auto Complete For Unit Name 

         try 
         { 

          //TextBox te = e.Control as TextBox; 
          units[i].AutoCompleteMode = AutoCompleteMode.SuggestAppend; 
          units[i].AutoCompleteCustomSource.AddRange(new string[] { "Piece", "Packs", "Mtr", "Kg." }); 
          units[i].AutoCompleteSource = AutoCompleteSource.CustomSource; 
          //txt[i].AutoCompleteMode = AutoCompleteMode.SuggestAppend; 
          //txt[i].AutoCompleteSource = AutoCompleteSource.CustomSource; 
          //txt[i].AutoCompleteCustomSource = namesCollection1; 

         } 
         catch (Exception aa) { MessageBox.Show(aa.Message); } 

         #endregion 
         rtb[i].RowContextMenuStripNeeded += new System.Windows.Forms.DataGridViewRowContextMenuStripNeededEventHandler(this.dataGridView_RowContextMenuStripNeeded); 
         this.deleteRowToolStripMenuItem.Click += new System.EventHandler(this.deleteRowToolStripMenuItem_Click1); 
         //MessageBox.Show(""+tab[i].Text); 
         rtb[i].KeyDown += new KeyEventHandler(rtb_KeyDown); 
         rtb[i].RowEnter += new System.Windows.Forms.DataGridViewCellEventHandler(dataGridView_RowEnter); 
         rtb[i].KeyDown += new KeyEventHandler(rtb_KeyDown); 
         rtb[i].EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(dataGridView1_EditingControlShowing); 
         txt1[i].Leave += new System.EventHandler(txt1_Leave); 
         rtb[i].CellEndEdit += new System.Windows.Forms.DataGridViewCellEventHandler(dataGridView_CellEndEdit); 
         getar[i].Click += new EventHandler(getarticle_Click); 
         getsi[i].Click += new EventHandler(getsize_Click); 
         this.pro_t[i].KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.textch_KeyPress); 
         getyrn[i].Click += new EventHandler(getyarn_Click); 
         getin[i].Click += new EventHandler(getinlay_Click); 
         checkb[i].CheckedChanged += new System.EventHandler(CheckBoxChanged); 
         //this.rtb[i].DefaultValuesNeeded += new System.Windows.Forms.DataGridViewRowEventHandler(this.dataGridView_DefaultValuesNeeded); 
        } 


       } 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
+0

爲什麼你在控件中使用數組類型?例如,您已將「pro_l」聲明爲「Label [] pro_l = new Label [20]」,但您在上面的代碼中將它用作非數組類型:「pro_l = new Label()」。你想做什麼? –

+0

如果您使用'Dispose',GDI資源將被清理 - 並且在1年之後(真的?)垃圾收集器**將**刪除了每個未使用的資源 - 因此您在某處保留它們 - 但是說實話:在這混亂中不可能找到。我建議使用內存分析器來查找有問題的行/對象。 – Carsten

+0

我更新我的問題#sujaysharma – user3796280

回答

0

當你用任何控件綁定一個事件時,它不會被處置,除非父母在刪除do - =之前這樣做。 此外,如果您可以創建塊,請使用關鍵字使用來創建每個創建的對象的範圍。

+0

我正在刪除事件也像 - =但沒有任何變化 – user3796280