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

#C

توسط thearrow در 5 سال پیش
0 1.4k 8 5 سال پیش
thearrowreza-irdevcomodophp-secalideveloperdaniel
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

> واقعا ممنون خیلی توپه فقط دو سوال دیگه دارم اون 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]

0

> اون 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]
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

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

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

خوش آمدید

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

لطفا ابتدا لاگین کنید