PDA

View Full Version : سوال: اعمال یک دستور برای تمام کنترلها



alimahdifar
جمعه 11 بهمن 1392, 21:11 عصر
سلام
من با دستور زیر به تمام کنترلهایی که از نوع تکس باکس هستند دسترسی پیدا می کنم

foreach (cotrol ctr in this.controls)
if (ctr.text.substring(0.3)=="txt")
حالا می خوام در رویداد TextChangedاین تکس باکس ها یکسسری محدودیتها عمومی ایجاد کنم.کدهای بالا و کدهای محدودیتی خودم را در رویداد TextChanged و KeyDown فرم قرار دادم ولی این محدودیتها ویا این دستورات اجرا نشد.
سوال اینه که برای انجام یک سری محدودیتها برای تمامی تکس باکس ها چه کنم؟ویا اینکه دستورات فوق را در چه رویدادی از فرم فراخوانی کنم که برای تمام تکس باکس ها اعمال شود .؟ ویا روش اصولی و حرفه ای برای این چنین مواقع چیست؟

امیر مهرشاد
جمعه 11 بهمن 1392, 21:15 عصر
تا جایی که متوجه شدم شما اگه کد هاتون زیاده یا به دفعات زیادی میخوایید استفاده کنید کداتونو توی یه کلاس پیاده کنید و فقط با نیم خط اونو صدا بزنید اگر منظورتون چیز دیگه ای هست لطفا بگید تا راهنمایی کنم

alimahdifar
جمعه 11 بهمن 1392, 21:28 عصر
با یکسری کد چک میکنم که داده های ورودی داده های دلخواه من باشند مثلا عدد یا حروف باشند ، از آنجایی که تعداد تکس باکس ها زیاد است نمی خوام با کپی پیست اینکارو بکنم چون هم فنی نیست و هم شلوغ میشه. اینکه گفتید کلاس پیاده سازی کنم لازمه که بازهم برای هر تکس باکس تابع آن کلاس را فراخوانی کنم . چطوری بایک بار نوشتن برای همیشه توی برنامه کارسازی بشه. مشکل می اینجاست.

Mahmoud.Afrad
جمعه 11 بهمن 1392, 22:10 عصر
میتونید برای همه تکست باکس ها رویداد مورد نظر رو روی رویدادگردان مورد نظر تنظیم کنید.

راه حل بهتر اینه که کلاسی از textbox مشتق کنید و کدهاتون رو در اون پیاده سازی کنید و هر جا نیاز داشتید از این کلاس استفاده کنید.

alimahdifar
جمعه 11 بهمن 1392, 22:55 عصر
راه حل بهتر اینه که کلاسی از textbox مشتق کنید و کدهاتون رو در اون پیاده سازی کنید و هر جا نیاز داشتید از این کلاس استفاده کنید.
چطوری کلاس مشتق میکنند؟فرض کنیم می خواهیم با کلیک روی هر تکس باکس تابع f1();اجرا بشه این کار رو چطوری باید انجام داد؟تو سایت درباره مبحث مشتق جستجو کردم فقط مشتق (ریاضی و حسابان !!!!!!!!) پیدا شد.

Mahmoud.Afrad
جمعه 11 بهمن 1392, 23:02 عصر
منظورم ارث بری بود.

class CustomTextBox : TextBox
{
protected override void OnClick(EventArgs e)
{
base.OnClick(e);

// your code here
f1();
}

private void f1()
{
MessageBox.Show("");
}
}

alimahdifar
شنبه 12 بهمن 1392, 19:19 عصر
سلام
فرض کنیم میخواهیم با تایپ متن در تکس باکس مثلا پیغامی مبنی بر نام تکس باکس و رنگ زمینه آن نمایش داده شود ویا اتفاقاتی دیگه بیفته.
1- چگونه این کلاس نام کنترل هایی که در کلاس Form برنامه هستند را شناسایی میکنه؟ دستور this.Controls به کلاس TextBox اشاره داره نه به کلاس Form
2- آیا کدهای زیر نیازی به فراخوانی ویا استفاده در رویداد TextChangedدارند یا نه ؟اگه نیاز به استفاده در این رویداد باشه ، یه جورایی زیاده کاری هستش
3- من نمی خوام برای تک تک تکس باکس ها رویداد TextChanged را ایجاد کنم .کدهای زیر با چه دستوراتی تکمیل میشه؟
public class CustomTextBox : TextBox
{

protected override void OnTextChanged(EventArgs e)
{
base.OnTextChanged(e);
MessageBox.Show("");
}

}

alimahdifar
شنبه 12 بهمن 1392, 21:25 عصر
سلام خواهشاًقبل از اینکه این تاپیک به صفحه های بعدی انتقال پیدا کنه (بعلت کثرت تاپیک ها) راهنمایی کنید ممنون