#C: اضافه کردن UserControl در زمان اجرا با داده های مختلف
#1
Note 
سلام
در حالت عادی که ما یوزر کنترل رو از toolbox اضافه میکنیم (مثلا 4 بار اضافه میکنیم) نمیشه که واسه هر کدوم تکست ها رو عوض کرد (شاید من بلد نباشم)
این پروژه رو دانلود کنید
Desktop

خب من میخوام با استفاده ار کدنویسی یوزر کنترل رو به پنل3 اضافه کنم (یعنی هر بار که اضافه میشه تکست و لیبل و زمان اضافه شدن فرق داشته باشه)
نمیدونم منظورمو فهمیدید یا نه
مثلا مثله پروژه ی چت !

ممنون

پاسخ
#2
Note 
برای اینکار باید ابتدا با استفاده از Set و Get برای کنترلهایی که باید مقدارشون تغییر کنه یه متد تعریف کنید که بعد بتونیم مقدار رو تنظیم کنیم:

پس این کدها رو به userControl اضافه میکنم:

[CSHARP]
public string title
{
get { return linkLabel1.Text; }
set { linkLabel1.Text = value; }
}
public string text
{
get { return MsgBody.Text; }
set { MsgBody.Text = value; }
}
public string UName
{
get { return labelName.Text; }
set { labelName.Text = value; }
}
public string Time
{
get { return labelTime.Text; }
set { labelTime.Text = value; }
}
[/CSHARP]

خوب حالا برای ضافه کردن کنترل کافیه به این شکل عمل کنید:

[CSHARP]
int i = 0;
int Ntop = 0;
private void button1_Click(object sender, EventArgs e)
{
UserControl1 uc1 = new UserControl1();
uc1.title = "title here";
uc1.text = "Message body here";
uc1.UName = "name here";
uc1.Time = DateTime.Now.ToString();
// set position
uc1.Top =Ntop+ 5;
uc1.Left = 6;
//set controls name
uc1.Name = "UserControl" + (++i);
// add to panel 3 and show it
panel3.Controls.Add(uc1);
// add value of Ntop variable for next control
Ntop += uc1.Height+5;
}
[/CSHARP]

اینم پروژه کامل

موفق باشید:happysmiley:

پاسخ
#3
Note 
واقعا ممنون
خیلی توپه فقط دو سوال دیگه دارم

اون richTextBox هست که توی فرمه ؟ میشه براش کدی نوشت که وقتی روی COPY KARDANE NAME VA MESSAGE کلیک شد ، محتویات اون یوزر کنترل رو توی richtextbox بنویسه ؟

چطوری یک picturebox هم بزارم که با get set که مثله بقیه متن ها به اون هم عکس از طریق اینترنت اضافه کرد؟
ممنون

پاسخ
#4
Note 
pashmak نوشته است:واقعا ممنون
خیلی توپه فقط دو سوال دیگه دارم

اون richTextBox هست که توی فرمه ؟ میشه براش کدی نوشت که وقتی روی COPY KARDANE NAME VA MESSAGE کلیک شد ، محتویات اون یوزر کنترل رو توی richtextbox بنویسه ؟

چطوری یک picturebox هم بزارم که با get set که مثله بقیه متن ها به اون هم عکس از طریق اینترنت اضافه کرد؟
ممنون

1-
[CSHARP]
Console.WriteLine(uc1.title);
[/CSHARP]

2-برای اینکار set و get نیاز نیست
[CSHARP]pictureBox1.Load("http://www.softafzar.net/images/smilies/Standard/yeah.gif");[/CSHARP]

پاسخ
#5
Note 
نقل قول: اون richTextBox هست که توی فرمه ؟ میشه براش کدی نوشت که وقتی روی COPY KARDANE NAME VA MESSAGE کلیک شد ، محتویات اون یوزر کنترل رو توی richtextbox بنویسه ؟
البته وقتی که یوزر کنترلو در runtime میسازی دیگه نمیتونی اونجا اسمشو بیاری
باید کنترلو مشخص کنی وپ یداش کنی و بعد نمایش بدی:
[CSHARP]
var c = panel3.Controls.OfType<UserControl1>().FirstOrDefault(b => b.Name == "UserControl1");
if (c == null) { return; }
Console.WriteLine(c.title);
[/CSHARP]

پاسخ
#6
Note 
ممنون و متشکر

اما راجع به تصویر ، من میدونم که چطوری میشه از اینترنت عکس گرفت و اون رو در picbox نمایش داد
واسه یوزر کنترل بالا چطوریه ؟ یعنی توی یوزر کنترلی که مثله بالا هربار که اضافه میشه ، تمامی اطلاعاتش عوض میشه چطوری میشه عکس واسه هربار اضافه شدن گذاشت؟
و یک سوال دیگه از جناب ادمین دارم
من کد شما رو به این عوض کردم :
[CSHARP]
UserControl1 uc1 = new UserControl1();
uc1.set_title = txttitle.Text;
uc1.set_text = txtmsg.Text;
uc1.set_Name = txtname.Text;
uc1.set_Time = DateTime.Now.ToString();
uc1.Name = "UserControl" + (++i);
uc1.Dock = DockStyle.Top;
panel3.Controls.Add(uc1);
uc1.Show();
[/CSHARP]

اما هربار که یوزر کنرل اضافه میشه بالا قرار میگره !
یعنی اگه من 3 بار اضافه کنم جای اینکه 1 و 2 و3 به ترتیب از بالا به پایین قرار بگیره ، از پایین به بالا قرار میگره یعنی 3 و 2 و1

چیکار باید کرد که از بالا به پایین به ترتیب اضافه شن؟
ممنون

پاسخ
#7
Note 
برای عکس هم باید همون کارو بکن:
[CSHARP]
public string img {
get { return pictureBox1.Image.ToString(); }
set { pictureBox1.Load(value); }
}
[/CSHARP]

Dock رو TOp کنی کار میکنه ولی بهتره اون کارو نکنی اگر میخوای هم عرض برنامه بذاری بجاش اینکارو بکن:
[CSHARP] uc1.Width = this.ClientRectangle.Width; [/CSHARP]

امیدوارم جوابت رو گرفته باشی.

I - YOU = FALSE
استاد ازم میپرسه چند تا وب سرور نام ببر میگم Apache,Lite speed,tomcat
استاد مینویسه: Apache,Light smith,tomcat
استاده داریم؟ :i'm_ok:
پاسخ
#8
Note 
ممنونم
اما وقتی که اون dock رو برداشتم و این رو گذاشتم :
[CSHARP]
uc1.Width = this.ClientRectangle.Width;
[/CSHARP]

اولی که اضافه شد دیگه بقیه رو نشون نمیده.

پاسخ
#9
Note 
pashmak نوشته است:ممنونم
اما وقتی که اون dock رو برداشتم و این رو گذاشتم :
[CSHARP]
uc1.Width = this.ClientRectangle.Width;
[/CSHARP]

اولی که اضافه شد دیگه بقیه رو نشون نمیده.

سلام
اینطوری همه کنترلها روی هم میفتن از همون کدی که مدیر نوشته باید استفاده کنی.

پاسخ
ایجاد موضوع جدید   پاسخ به موضوع  

موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
Note میزان استفاده از رم با UserControl The Arrow 4 952 20-11-2014 ساعت 20:58
آخرین ارسال: The Arrow
Note سوال در مورد ساخت UserControl برای تغییر شکل فرم در سی شارپ The Arrow 5 1,105 22-09-2013 ساعت 10:07
آخرین ارسال: SOFTAFZAR

کاربرانِ درحال بازدید از این موضوع:   1 مهمان