PDA

View Full Version : مشخص نمودن فرم خاص از بین سه فرم دیگر



Direlap
سه شنبه 10 مرداد 1391, 21:30 عصر
با سلام

اولش اینو بگم که جستجو کردم ولی یه اشکالی دارم که نمیتونم اونو حل کنم پس به همین خاطر پست زدم

یه دکمه دارم که چهار بار روش کلیک کردم و هربار کلیک هم تو رویداد کلیدش نوشتم که از Form1 نمونه سازی می کنه و بعد نمایش میده .

توی لود فرم هم نوشتم که متن فرم رو به عددی به صورت تصافی تغییر میده.

حالا سوال من اینه که از بین 4 فرمی که در حال نمایش هست چطوری حرکت کنم و خاصیت متن اون رو ببینم که چه مقداری داره ؟ مثلا اگه یک بود تو اون فرم به لیست باکسش چیزی اضافه کنم .

ممنونم از راهنماییهاتون

ali_habibi1384
سه شنبه 10 مرداد 1391, 21:56 عصر
با اين كد ميتوني توي يك حلقه for متن فرمها رو تك تك بخوني.و هر مقداري خواستي به هر كدوم پاس بدي:


for(int i=1 ...
.
.
Application.OpenForms[i].Text ...
.
.

Direlap
سه شنبه 10 مرداد 1391, 22:05 عصر
این همه فرم هارو چک می کنه ؟
اگه اینطور باشه من فقط میخواستم فرم هایی رو چک کنه که از نوع form1 ی که در برنامه تعریف شده رو جستجو کنه .

Mahmoud.Afrad
سه شنبه 10 مرداد 1391, 22:39 عصر
یک لیست تعریف کنید به صورت زیر
List<Form1> listOfForm1 = new List<Form1>();حالا برای بدست آوردن لیست نمونه های باز از فرم مورد نظر به این صورت عمل کنید
listOfForm1.Clear();
listOfForm1 = Application.OpenForms.OfType<Form1>().ToList();

/*
//Or
foreach (Form frm in Application.OpenForms)
{
if (frm is Form1)
listOfForm1.Add(frm as Form1);
}
*/منظور از Form1 نام کلاس فرم مورد نظر هست. حالا با اندیس میتونید listOfForm1 را پیمایش کنید و به خصوصیات و اشیاء داخلش دسترسی داشته باشید مثلا
listOfForm1[0].Text

Direlap
سه شنبه 10 مرداد 1391, 22:58 عصر
پس برای دسترسی به لیست باکس فرم مورد نظر هم باید اونو پابلیک تعریف کنم درسته ؟

کار دیگه ای که نمیخواد انجام بدم ؟

Mahmoud.Afrad
سه شنبه 10 مرداد 1391, 23:26 عصر
نه نیازی نیست پابلیک باشه همون private باشه جواب میده.

mmd2009
چهارشنبه 11 مرداد 1391, 11:36 صبح
با سلام


حالا سوال من اینه که از بین 4 فرمی که در حال نمایش هست چطوری حرکت کنم و خاصیت متن اون رو ببینم که چه مقداری داره ؟ مثلا اگه یک بود تو اون فرم به لیست باکسش چیزی اضافه کنم .

به اینجای سوالت که دقت می کنم متوجه نشدم منظورت لیست باکس فرم اصلی هست یا لیست باکس فرمهای نمونه!

اگر لیست باکس در فرم اصلی باشه که هیچی ولی اگر فرمهایی که show میکنی چندبار ( یک نمونه از فرم ، چند بار show شدن اون ) خب باید بگم شما به صورت مستقیم که نمیتونی به لیست باکس مربوطه دسترسی داشته باشی. اگر هم که Modifires کنترل رو هم public بکنی اصول شی گرایی رو میبری زیر سوال ( اگر همچین کاری بکنی و احیانا بری تو یک سایت خارجی این سوال رو بپرسی میگن برو vb 6 کار کن ) پس یک نتیجه میمونه اونم اینم که شما باید به صورت زیر حداقل عمل بکنی یعنی کپسوله کردن :

در فرمی که چندبار show میکنی باید به این صورت کد بنویسی :

public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
ListBox = listBox1;
}

public ListBox ListBox { get; set; }

private void Form2_Load(object sender, EventArgs e)
{
Text = new Random().Next(0, 10000).ToString();
}
}


در فرم اصلی برنامت هم که فرم دیگه رو چند بار show میکنی به این صورت کد بنویسی :

private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
{
f2.Show();
}
}

private void button2_Click(object sender, EventArgs e)
{
List<Form2> listOfForm1 =
Application.OpenForms.OfType<Form2>().Select(frm => frm).ToList();

foreach (Form2 form2 in listOfForm1.Where(form2 => int.Parse(form2.Text.ToString())>5000))
{
form2.ListBox.Items.Add("Good Number");
}
}

دکمه اول که مشخصه کارش چیه .

دکمه شماره دو هم لیست فرمهای باز رو ابتدا میگیره ( اونایی که از نوع Form2 هستن) و سپس فرضا من گفتم اگر مقدار text فرم بیش از 5000 بود به لیست باکسش Good Number رو اضافه بکنه

موفق باشید

Direlap
یک شنبه 29 مرداد 1391, 23:24 عصر
ممنون مدیر عزیز خوب منظورمو متوجه شدین .

قصد من یه برنامه چت هستش که میخواستم بدونم به کدوم فرمی که باز شده باید متن رو اضافه کنم تا کاربر متن مخصوص اونی رو ببینه که داره باهاش چت می کنه .

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

به نظر شما راه بهتری هم هست ؟ با این کارم راه میفته ولی اگه توصیه خاصی دارین ممنون میشم بشنوم .

behzad1986
دوشنبه 30 مرداد 1391, 09:41 صبح
سلام دوست عزیز
شما می توانید وقتی فرم رو می سازید از رخداد Activatedاستفاده کنید فکر می کنم راه ساده تری باشه

private void button1_Click(object sender, EventArgs e)
{
Form1 f = new Form1();
f.Activated += new EventHandler(f_Activated);
f.Show();
}

void f_Activated(object sender, EventArgs e)
{
listBox1.Items.Add(((Form)sender).Name);
}

mousa1992
دوشنبه 30 مرداد 1391, 10:46 صبح
به نظر شما راه بهتری هم هست ؟ با این کارم راه میفته ولی اگه توصیه خاصی دارین ممنون میشم بشنوم .
میشه به جای باز کردن چندین فرم و شلوغ شدن یک فرم داشته باشی وبرای هر کاربر که پیامی رو ارسال میکنه یک tab جدید باز کنی

Direlap
دوشنبه 30 مرداد 1391, 15:27 عصر
سلام دوست عزیز
شما می توانید وقتی فرم رو می سازید از رخداد Activatedاستفاده کنید فکر می کنم راه ساده تری باشه

private void button1_Click(object sender, EventArgs e)
{
Form1 f = new Form1();
f.Activated += new EventHandler(f_Activated);
f.Show();
}

void f_Activated(object sender, EventArgs e)
{
listBox1.Items.Add(((Form)sender).Name);
}


دوست عزیز فرق این نوع نشون دادن با نوع معمولی نشون دادن فرم چی هستش ؟

Direlap
دوشنبه 30 مرداد 1391, 15:29 عصر
میشه به جای باز کردن چندین فرم و شلوغ شدن یک فرم داشته باشی وبرای هر کاربر که پیامی رو ارسال میکنه یک tab جدید باز کنی


آره اینم خوبه مثل یاهوی جدید که تب باز می کنه .

ولی بازم یه مشکلی که پیش میاد اینه که یه نفر داره با چند نفر چت می کنه و بازم باید توی تب ها جستجو کرد و کد مخصوص خودشو میخواد . شما کدشو میدونین ؟