PDA

View Full Version : ساخت ایونت برای کنترلهایی که به صورت آرایه تعریف شدند



slashslash2009
یک شنبه 20 بهمن 1387, 13:53 عصر
دوباره سلام . سرچ کرد چیزه به درد به خوری پیدا نکردم فقط تونستم این کدو پیدا کنم که نمیدونم به درد می خوره یا نه :


txt[i].Keydown += new System.EventHandler(this.textBox1_Keydown);

ولی نمیدونم حال چطوری ازش استفاده کنم چون اون فقط تعریفه یک ایونته. یعنی از کجا به برنامه بفهمونم که روی کدوم کنترل هستش فکر کنم باید از tag اسفاده کرد .

mostafaaa
یک شنبه 20 بهمن 1387, 17:40 عصر
سلام دوست من
اين Sample كوچيك رو نگاه كن ، فكر كنم كارت رو راه بندازه!

private void Form1_Load(object sender, EventArgs e)
{
List <Button > MyButtons=new List<Button>() ;
foreach (Control ctrl in this.Controls)
{
if (ctrl is Button)
{
MyButtons.Add((Button )ctrl );
}
}
foreach (Button btn in MyButtons)
{
btn.Click += ClickONButtons;
}
}
private void ClickONButtons(object sender, EventArgs e)
{
MessageBox.Show(((Button)sender).Text);
}
البته Handler هاشون رو ميتونستم توي همون حلقه اولي بهشون نصبت بدم ولي براي اينكه بهتر دركش كني جداگانه اين كار رو كردم
يا علي

slashslash2009
یک شنبه 20 بهمن 1387, 22:07 عصر
اینم شبیهشه فعلا بی خیالش شدم تا بعد . کلا می خواستم ببینم راه بهتری هم هست ولی نیست


ArrayList TxtAL = new ArrayList();
for (int i = 0; i < this.Controls.Count; i++)
{
if (this.Controls[i].GetType().ToString() == "System.Windows.Forms.TextBox")
TxtAL.Add(this.Controls[i]);
}
for (int i = 0; i < TxtAL.Count; i++)
MessageBox.Show(TxtAL[i].ToString());

helal92
دوشنبه 21 بهمن 1387, 00:09 صبح
دوست عزیز شما می خواین ایونت تعریف کنید یا کنترلهاتون رو به یه آرایه اضافه کنید.....
کلا در این مورد بهتره از Generic استفاده کنید و قبل از اینکه کنترل رو به لیست اضافه کنید ایونتش رو تعریف کنید........




this.Controls[i].GetType().ToString() == "System.Windows.Forms.TextBox"


چرا این همه ؟!!!...


this.Controls[i].GetType() == typeof(TextBox)

slashslash2009
دوشنبه 21 بهمن 1387, 11:39 صبح
فکر می کنم نمیشه واسه کنترلهای آرایه ای ایونت درست کرد واسه همین هم باید مقدار مثلا تکست باکسارو برزیم تو آرایه بعد هر بلایی خواستیم سرشون در بیاریم دوباره برزیم تو تکستباکسامون

mostafaaa
دوشنبه 21 بهمن 1387, 20:29 عصر
سلام دوست من

فکر می کنم نمیشه واسه کنترلهای آرایه ای ایونت درست کرد
چرا نميشه!!
اون مثالي كه برات گزاشتم پس چيكار كرده؟؟!!
توي آرگومان هاي يه Event Handler شي كه با نام Sender شناخته ميشه در واقع همون كنترلي كه اين Event رو فراخواني كرده .
يا علي

slashslash2009
سه شنبه 22 بهمن 1387, 00:00 صبح
دستت درد نکنه مرسی درود فراوان بر شما باد.خودمم یه چیزایی رو یاد گرفتم . این کدو موقع ساخته شدن کنترل می نویسیم :


txt[i].KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtkeydo wn);

و برای هندل کردن هم از کد دوستمون استفاده می کنیم یعنی :


private void txtkeydown(object sender, EventArgs e)
{

//MessageBox.Show(((TextBox)sender).Text);
((TextBox)sender).Text = "verygood";

}

من ایک کارو واسه ایونت keydown تمستباکسام انجام دادم واقعا مثله اینکه جواب میده تو تست اولیه اگه مشکلی پیدا کردم دوباره می گم . راستشو بخواین کلا اصلا sender نمیدونم چیه واسه همین فکر کنم تو قسمت

((TextBox)sender).Text
مشکل داشتم اگه میشه یه توضیحه محتصر بدین ممنون میشم

Sajjad.Aghapour
سه شنبه 22 بهمن 1387, 00:19 صبح
sender رو اگه بخوای ترجمه اش رو هم در اینجا به کار ببری یعنی فرستنده.یعنی در اصل sender همون شی ای هست که به این تابع ارسال میشه و از این جهت که هر چیزی میتونه باشه از نوع object تعریف میشه...
اگه رویداد شما مربوط یه یک textBox هست sender در اصل همون textBox هست که با casting اون رو به هویت واقعی خودش یعنی همون TextBox میشه تبدیل کرد....