PDA

View Full Version : مشکل در اضافه کردن user control



hosseinghaheri
شنبه 02 مرداد 1395, 10:42 صبح
سلام!
من یک user control درست کردم که تقریبا شبیه یک تکست باکس عمل میکنه ولی و به اعضای هر خط یک تکست باکس می سازه.
حالا اگه اونو را داخل یه پروژه بسازم (Solution/myproject/add new item) جواب میده ولی فرمی که این کنترل را روش ادد کردم دگ باز نمیشه و ارور زیر را میگیره! ولی در ران تایم کنترل بدون مشکل اجرا میشه
http://s2.picofile.com/file/8260839892/1.png

message های زیر را هم میده

Message 3 Exception of type 'System.OutOfMemoryException' was thrown. 0 0
Message 4 The variable 'userControl11' is either undeclared or was never assigned. c:\users\hossein\documents\visual studio 2013\Projects\test\test\Form1.Designer.cs 47 0


حالا اگه این user control را از Home page به صورت New Project بسازم اصلا نمیتونم توی فرم اددش کنم. ارور زیر را میده.


http://s2.picofile.com/file/8260839926/2.png

ممنون میشم راهنمایی کنید.

اینم کد user control
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace UTextBox
{
public partial class UTextBox: UserControl
{
TextBox[] tb = new TextBox[99999999];
int i = 0;
public UTextBox()
{
InitializeComponent();
}
public void AddLine()
{
tb[i]=new TextBox();
tb[i].Location=new Point(1,(i*13)+1);
tb[i].Size = new Size(this.Size.Width-2, 13);
tb[i].BackColor = this.BackColor;
tb[i].BorderStyle = BorderStyle.None;
tb[i].ForeColor = ForeColor;
tb[i].TabIndex = i;
this.Controls.Add(tb[i]);
tb[i].KeyDown += new System.Windows.Forms.KeyEventHandler(this.addtb);
i++;

}
private void addtb(object sender, KeyEventArgs e)
{
if(e.KeyData==Keys.Enter)
{
AddLine();
SendKeys.Send("{TAB}");
}
}

private void UserControl1_Load(object sender, EventArgs e)
{
AddLine();
}



}
}

محمد آشتیانی
شنبه 02 مرداد 1395, 11:25 صبح
سلام
لطفا یک برنامه ساده که با اون این ارور رو میگیری اینجا پیوست کن
ضمن اینکه چه لزومی داشته که شما یک آرایه 100 میلیونی تکست باکس تعریف کردی؟ این ارور OutOfMemoryException به همین دلیل باید باشه

این کد رو تست کن (اگر تعریف اون آرایه کاربرد خاصی داره برات ، بگو تا این کد رو بر اساس اون نیاز تغییر بدم)

using System;
using System.Drawing;
using System.Windows.Forms;


namespace UlteraTextBox
{
public partial class UTextBox : UserControl
{


int i = 0;


public UTextBox()
{
InitializeComponent();
}
public void AddLine()
{
var textbox = new TextBox
{
Location = new Point(1, (i * 13) + 1),
Size = new Size(this.Width - 2, 13),
BackColor = Color.DarkSalmon,
BorderStyle = BorderStyle.None,
ForeColor = ForeColor,
TabIndex = i,
Visible = true,
};


Controls.Add(textbox);
textbox.KeyDown += new KeyEventHandler(addtb);
i++;


}
private void addtb(object sender, KeyEventArgs e)
{
if (e.KeyData == Keys.Enter)
{
AddLine();
SendKeys.Send("{TAB}");
}
}


private void UTextBox_Load(object sender, EventArgs e)
{
AddLine();
}
}
}

محمد آشتیانی
شنبه 02 مرداد 1395, 11:33 صبح
ضمنا ، این اسکرین شات ها رو بهشون دقت کنید ، یک حالت حاصل اجرای کد و یوزر کنترل شماست ، که 867 مگابایت حافظه رم رو اشغال کرده و حالت دیگه کدی که براتون قرار دادم که فقط 25 مگابایت حافظه اشغال شده (مقدار مصرف حافظه رو با فلش قرمز مشخص کردم)
حالا شما در نظر بگیرید چند عدد از این یوزر کنترل ها چه بلایی بر سر منابع سیستم شما میاره.

hosseinghaheri
شنبه 02 مرداد 1395, 14:25 عصر
:کف::کف::کف:
اوه اصن حواسم به این نبود.
الان درستش کردم مشکل حل شد.
واقعا تشکر!!:تشویق: