PDA

View Full Version : سوال: دسترسی به Item های Listbox1 موجود در فرم x



aminpprog
یک شنبه 18 فروردین 1392, 19:59 عصر
سلام به دوستان گرامی :
می خواستم از طریق فرم 2 به Item های Listbox1 موجود در فرم 1 دسترسی پیدا کنم . چگونه ؟ :متفکر:

sgh_programer
یک شنبه 18 فروردین 1392, 20:04 عصر
بنام خدا
سلام
البته باید اطلاعات در اون لیست باکس باشد

اول خاصیت modifiers لیست باکس رو برابر public کن
102500
بعد در فرم دوم کد های زیر رو بنویس

Form1 f1 = new Form1();
f1.listBox1.Items.Add("ok");


موفق باشید

erfan_urchin
یک شنبه 18 فروردین 1392, 20:39 عصر
دوست عزیز شما اینجوری میتونی به آیتم های لیست باکس دسترسی داشته باشی
همونطور که sgh_programmer گفت میری تو پراپرتی listbox و پراپرتی modifier رو برابر public قرار میدی و در فرم 2 کد زیر رو مینویسی
private void button1_Click(object sender, EventArgs e)
{
Form1 f1 = new Form1();
for (int i = 0; i < f1.listBox1.Items.Count; i++)
textBox1.Text += f1.listBox1.Items[i].ToString() + "\t";
}
موفق باشی

ParsiPax
یک شنبه 18 فروردین 1392, 21:14 عصر
سلام.

با تشکر از aminpprog (http://barnamenevis.org/member.php?160906-aminpprog) عزیز بابت سوالشون (منم توی این مایه ها بود سوالم که دیگه نیاز نشد تاپیک بزنم :لبخند:)

همچنین ممنون از دوستان بابت پاسخ های خوبشون :لبخندساده:

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

Form1 F1 = new Form1();
F1.listbox.Items.Add("item");

و اگر اونو در هر فرم دیگه ای بکار ببرم کد رو قبول میکنه (از کد غلط املایی و... نمیگیره) اما با کلیک روی دکمه کد عمل نمیکنه!

ضمنا پراپرتی modifier رو برابر publicهم قرار دادم... حتی نمیتونم در Form2 با کمک دستور زیر خود Form2 رو ببندم! :

Form2 F2 = new Form2();
F2.Hide();


و مجبورم از ;()this.Hide استفاده کنم!

ممنون میشم راهنمایی کنید :)

sgh_programer
یک شنبه 18 فروردین 1392, 22:42 عصر
بنام خدا
سلام مجدد

دوست عزیز من که نفهمیدم چی گفتید

یه نگاه به این بنداز


موفق باشی

aminpprog
یک شنبه 18 فروردین 1392, 22:57 عصر
قربون مرامتون بشم !
نمیدونم چجوری تشکر کنم ؟ (البته بجز تشکر کلیکی !!! :چشمک:)

Mahmoud.Afrad
یک شنبه 18 فروردین 1392, 23:02 عصر
از پابلیک کردن شئ خودداری کنید چون تمام خصوصیات لیست باکس قابل تغییر خواهد شد.(پراپرتی یا متدی تعریف کنید تا فقط همان خصوصیت یا عمل را برای شما انجام دهد)
برای دسترسی به اطلاعات فرم های باز ، کافیه متدی برای عمل مورد نظر بنویسید و از طریق Application.OpenForms به فرم باز دسترسی داشته باشید.
برای اضافه کردن آیتم ، در فرم 1، متدی شبیه کد زیر بنویسید(ورودی متناسب با نوع آیتمهاست):

public void AddToListBox(string strItem)
{
this.listBox1.Items.Add(strItem);
}

در فرم دوم این متد را فراخوانی کنید:

foreach (Form f in Application.OpenForms)
{
if (f is Form1)
{
Form1 frm = f as Form1;
frm.AddToListBox("new item");
break;
}
}



برای دریافت آیتم های لیست باکس از فرم دیگر هم به همینصورت یک متد در فرم1:

public ListBox.ObjectCollection GetListBoxItems()
{
return this.listBox1.Items;
}

و در فرم دوم:

foreach (Form f in Application.OpenForms)
{
if (f is Form1)
{
Form1 frm = f as Form1;
ListBox.ObjectCollection items = frm.GetListBoxItems();
foreach (var item in items)
{
//...
}
break;
}
}

Mahmoud.Afrad
یک شنبه 18 فروردین 1392, 23:04 عصر
Form1 F1 = new Form1();
F1.listbox.Items.Add("item");

Form2 F2 = new Form2();
F2.Hide();


و مجبورم از ;()this.Hide استفاده کنم!

ممنون میشم راهنمایی کنید :)
this به شئ کلاس فعلی اشاره میکنه و برای بستن فرمی که داخلش هستید باید از this.Close() استفاده کنید. new باعث میشه شئ جدیدی از فرم ایجاد بشه که با شئ ای از فرم که قبلا باز شده متفاوت هست.

linux
یک شنبه 18 فروردین 1392, 23:09 عصر
سلام به دوستان گرامی :
می خواستم از طریق فرم 2 به Item های Listbox1 موجود در فرم 1 دسترسی پیدا کنم . چگونه ؟ :متفکر:
هرکاری که دارید می‌کنید طراحیتون اشتباه هست

sgh_programer
یک شنبه 18 فروردین 1392, 23:13 عصر
بنام خدا

قربون مرامتون بشم !
نمیدونم چجوری تشکر کنم ؟ (البته بجز تشکر کلیکی !!! :چشمک:)

مرسی دوست عزیز کاری نکردم!


از پابلیک کردن کل شئ خودداری کنید ......


سلام خدمت شما دوست گرامی

شمار درست میگید نباید یک شی رو پابلیک کرد اما برای درک بهتر موضوع این کار رو کردم وگرنه برای این کار روش های بهتری هست نمونش روش خودتون

بحرحال مرسی از این که این موضوع را تذکر دادید

همگی موفق باشید

aboulfazl950
پنج شنبه 15 خرداد 1393, 17:44 عصر
دوستان کسی میدونه چطور میتوان به تمام آیتم های لیست باکس فرم 1 در فرم 2 دسترسی داشت؟

من خودم این کار رو کردم ولی خیلی به نظرم جالب نیست:

در Public partial Class فرم 1 نوشتم:
public static Form1 form;

و همچنین در فرم لود فرم 1:
form = this;

و به صورت زیر در فرم دوم استفاده می کنم:
Form1.form.ListBox1

Mahmoud.Afrad
پنج شنبه 15 خرداد 1393, 18:24 عصر
دوستان کسی میدونه چطور میتوان به تمام آیتم های لیست باکس فرم 1 در فرم 2 دسترسی داشت؟

من خودم این کار رو کردم ولی خیلی به نظرم جالب نیست:

در Public partial Class فرم 1 نوشتم:
public static Form1 form;

و همچنین در فرم لود فرم 1:
form = this;

و به صورت زیر در فرم دوم استفاده می کنم:
Form1.form.ListBox1

چیزی که نوشتی الگوی Singleton هست؛ سرچ بزنی متوجه میشی. در این حالت دیگه نیازی نیست از فرم شئ بسازی و این کار باید بصورت درونی انجام بشه. پس اشکالی در استفاده از این کد نیست.

partial class Form1 : Form
{
private static Form1 _instance;

internal static Form1 Instance
{
get
{
if (_instance == null)
{
_instance = new Form1();
}
return _instance;
}
private set { _instance = value; }
}
public Form1()
{
InitializeComponent();

Form1.Instance = this;
}




با متد ، پراپرتی و دلیگیت ها هم میتونی انجام بدی. در مورد انتقال اطلاعات بین فرمها جستجو کن.