#C: اضافه کردن UserControl در زمان اجرا با داده های مختلف

بازدید22.3kپست ها8آخرین فعالیت10 سال پیش
0
0

سلام
در حالت عادی که ما یوزر کنترل رو از toolbox اضافه میکنیم (مثلا 4 بار اضافه میکنیم) نمیشه که واسه هر کدوم تکست ها رو عوض کرد (شاید من بلد نباشم)
این پروژه رو دانلود کنید
Desktop

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

ممنون

0

برای اینکار باید ابتدا با استفاده از 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]

اینم پروژه کامل
http://www.s1.softafzar.net/uploads/201310101381405137UsCnt.rar
موفق باشید:happysmiley:

0

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

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

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

0
<br> > واقعا ممنون خیلی توپه فقط دو سوال دیگه دارم اون richTextBox هست که توی فرمه ؟ میشه براش کدی نوشت که وقتی روی COPY KARDANE NAME VA MESSAGE کلیک شد ، محتویات اون یوزر کنترل رو توی richtextbox بنویسه ؟ چطوری یک picturebox هم بزارم که با get set که مثله بقیه متن ها به اون هم عکس از طریق اینترنت اضافه کرد؟ ممنون <br>

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

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

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

ممنون و متشکر

اما راجع به تصویر ، من میدونم که چطوری میشه از اینترنت عکس گرفت و اون رو در 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

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

0

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

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

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

0

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

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

0
<br> > ممنونم اما وقتی که اون dock رو برداشتم و این رو گذاشتم : [CSHARP] uc1.Width = this.ClientRectangle.Width; [/CSHARP] اولی که اضافه شد دیگه بقیه رو نشون نمیده. <br>

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

سوال برنامه نویسی دارید؟

ندونستن عیب نیست، نپرسیدن چرا!

خوش آمدید

برای طرح سوال، ایجاد بحث و فعالیت در سایت نیاز است ابتدا وارد حساب کاربری خود شوید. در صورتی که هنوز عضو سایت نیستید میتوانید در عرض تنها چند ثانیه ثبت نام کنید.