如何清理GDI对象和用户对象
本文关键字:对象 用户 GDI 何清理 | 更新日期: 2023-09-27 18:10:59
我有一个动态生成的windows form app
tabpages
、controls
、datagridviews
和所有的events
都是动态的当control
生成GDI objects
而User objects
不生成时使用so每次清理当前的objects
加上之前的objects
,那一次我的应用程序将崩溃。我可以dispose
全部controls
、clear
全部controls
、force
至garbage
收集器、空OBJECT
ARRAY
内存等我能做的一切但在我看来,工作时不清洁GDI Objects
和UserObjects
完成我正在与u guyx plx共享代码一些帮助我
这是我的公共数组对象
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];
这是基于文本框值的控件生成
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);
}
当您将事件与任何控件绑定时,它不会被释放,除非父控件在删除do-=之前也这样做。若可以创建块,也可以使用关键字using来创建每个创建对象的范围。