PDA

View Full Version : ایجاد اشیا و رویداد های انها هنگام اجرا



mousa1992
سه شنبه 13 تیر 1391, 20:55 عصر
سلام خدمت دوستان عزیز
یه برنامه دارم که میخوام توی اون کاربر بتونه به تعداد دلخواه اشیائی رو اضافه کنه و رویدادهای اون اشیا از قبل مشخص و با اضافه شدن توی دیتابیس ذخیره میشه و میخوام با لود شدن برنامه اشیا اضافه شده توسط کابر ایجاد بشه و رویدادهاشون
اشیا اسماشون مث همه و فقط یه اندیس به اخرشون اضافه میشه
نمیدونم چجوری رویدادها و اشیا رو ایجاد کنم!!
(ایده ای که تو ذهنمه اینه که توی رویداد فرم لود بگم تعداد رکورد ها رو بگیر و قرار بدم توی حلقه و به تعدادشون اشیا و رویداد رو ایجاد کنم ) درسته این روش ؟
متشرکم

mousa1992
سه شنبه 13 تیر 1391, 21:29 عصر
هر بار که کاربر اد رو بزنه باید چنتا تایمر اضافه بشه و باتن ها و لیبل و ... و رویدادها برا همه یکسانه جز اندیس هایی که برا انجام عملیات بر دیتابیس که همون اندیس حلقه هست

the king
سه شنبه 13 تیر 1391, 21:42 عصر
سلام خدمت دوستان عزیز
یه برنامه دارم که میخوام توی اون کاربر بتونه به تعداد دلخواه اشیائی رو اضافه کنه و رویدادهای اون اشیا از قبل مشخص و با اضافه شدن توی دیتابیس ذخیره میشه و میخوام با لود شدن برنامه اشیا اضافه شده توسط کابر ایجاد بشه و رویدادهاشون
اشیا اسماشون مث همه و فقط یه اندیس به اخرشون اضافه میشه
نمیدونم چجوری رویدادها و اشیا رو ایجاد کنم!!
(ایده ای که تو ذهنمه اینه که توی رویداد فرم لود بگم تعداد رکورد ها رو بگیر و قرار بدم توی حلقه و به تعدادشون اشیا و رویداد رو ایجاد کنم ) درسته این روش ؟
متشرکم

من جای شما باشم برای هر نوع کنترلی که قرار بشه ایجاد کرد یک رکورد به بانک اطلاعاتی اضافه می کنم که
فرضا [نوع کنترل فلان]-[موقعیت x, y فلان]-[ابعاد w,h فلان]-[سایر مشخصات لازم]
اگر دیدید مشخصات های لازم هر نوع کنترلی با بقیه خیلی فرق داره فیلد نوع کنترل رو حذف کنید اما بجای اون برای هر کدوم از انواع یک جدول جداگانه بسازید.
بعد موقعی که دونه دونه این رکورد ها رو از بانک اطلاعاتی می خونم بر اساس نوع کنترل اول یک شی جدید می سازم، فرضا ()Button b = new Button
بعد مشخصات اش رو تنظیم می کنم، رخداد هایش رو به یکسری روتین متصل می کنم، فرضا رخداد Click کردن (b.Click += new EventHandler(b_Click
و بعد به فرم اضافه اش می کنم (Controls.Add(b

mousa1992
سه شنبه 13 تیر 1391, 21:56 عصر
من جای شما باشم برای هر نوع کنترلی که قرار بشه ایجاد کرد یک رکورد به بانک اطلاعاتی اضافه می کنم که


متشکرم از پاسختون
ولی به نظرم بانکو از این اطلاعات پر نکنم بهتره اخه توی برنامه میشه همه ی اینا رو تنظیم کرد که کدوم کجا باشه ( کنترل هارو میذارم توی پنل و مکانشونو توی پنل مشخص میکنم که برا همشون یکیه و مکان پنل ها رو توی فرم لود مشخص میکنم )

Mahmoud.Afrad
سه شنبه 13 تیر 1391, 22:56 عصر
اگر اسم کنترل ها رو ذخیره کنید به این صورت میتونید عمل کنید
private static List<string> arrayOfButtonsName = new List<string>();
private void button15_Click(object sender, EventArgs e)
{
// get button name from user and add to arrayOfButtonsName
createButtons(arrayOfButtonsName, panel1);

arrayOfButtonsName.Clear();
}

private void createButtons(List<string> buttons, Control c)
{
foreach (string button in buttons)
{
Button btn = new Button();
btn.Name = button;
btn.Text = button;
btn.Click += new EventHandler(btn_Click);
//btn.Location = ....
c.Controls.Add(btn);
}
}

void btn_Click(object sender, EventArgs e)
{
// your code
}

اگر هم فقط تعداد رو از کاربر میگیرید به این صورت
private void button15_Click(object sender, EventArgs e)
{
// get button name from user and add to arrayOfButtonsName
createButtons(5, panel1);

arrayOfButtonsName.Clear();
}

private void createButtons(int count, Control c)
{
for ( int i = 1 ; i<= count ; i++)
{
Button btn = new Button();
btn.Name = "button" + i;
btn.Text = "button" + i;
btn.Click += new EventHandler(btn_Click);
//btn.Location = ....
c.Controls.Add(btn);
}
}

void btn_Click(object sender, EventArgs e)
{
// your code
}
برای هر نوع کنترلی بایستی یک تابع برای ایجاد بنویسید یا اون نوع کنترل رو هم ذخیره کنید و در تابع ایجاد کنترل چک کنید اگر نوع رو باتن تعیین کرده بود به تعداد مورد نیاز باتن ایجاد کنید.

m0hammad_01
یک شنبه 29 مرداد 1391, 16:48 عصر
از همه دوستان ممنونم

من تو ساختن کنترل ها زمان اجرا اصلا مشکل ندارم. تا اینجا درست.
حالا مثلا من 10 تا دکمه رو فرم تو زمان اجرا ایجاد کردم.هر کدومش هم اسم خاصی داره مثل کدی که دوستمون بالا گزاشته (btn1,btn2,...). حالا میخوام بدونم که چطوری کنترل کنم که چه دکمه ای کلیک شده؟ (مثلا بتونه اسم کنترل رو برگردونه تا من بتونم از شمارهای که بهش دادم واسه کار خودم ازش استفاده کنم)

خیلی ممنون میشم کمک کنید

Mahmoud.Afrad
یک شنبه 29 مرداد 1391, 17:07 عصر
(sender as Button).Text
به جای text هر خصوصیتی از دکمه فشرده شده رو میتونید بدست بیارید. توی رویداد btn_Click ازش استفاده کنید.

m0hammad_01
سه شنبه 31 مرداد 1391, 23:15 عصر
(sender as Button).Text
به جای text هر خصوصیتی از دکمه فشرده شده رو میتونید بدست بیارید. توی رویداد btn_Click ازش استفاده کنید.
بابت پاسخ سریع و دقیقتون خیلی ممنون.کارم راه افتاد
لطف کردین واقعا