سلام دوستان
فرض کنید من برای رویداد textBox1_TextChanged یک کدی نوشته ام
و قصد دارم یک کد دیگر بنویسم از قضا که این کد هم باید در رویداد textBox1_TextChanged نوشته شود
اما من قصد دارم هر کدام در یک TextChanged جدا باشد
چطور میشه این کار رو کرد؟
سلام دوستان
فرض کنید من برای رویداد textBox1_TextChanged یک کدی نوشته ام
و قصد دارم یک کد دیگر بنویسم از قضا که این کد هم باید در رویداد textBox1_TextChanged نوشته شود
اما من قصد دارم هر کدام در یک TextChanged جدا باشد
چطور میشه این کار رو کرد؟
سلام،اگه منظورتون رو واضح تر بیان کنید،شاید بهتر بتونم کمک کنم...
سلام،
به صورت زیر این کار امکان پذیر است:
private void Form1_Load(object sender, EventArgs e)
{
textBox1.TextChanged += new EventHandler(textBox1_TextChanged1);
textBox1.TextChanged += new EventHandler(textBox1_TextChanged2);
}
private void textBox1_TextChanged1(object sender, EventArgs e)
{
MessageBox.Show("دستورات بخش اول");
}
private void textBox1_TextChanged2(object sender, EventArgs e)
{
MessageBox.Show("دستورات بخش دوم");
}
سوالتون چندان واضح نیست. اگر درست متوجه شده باشم شما قصد اجرای دو بخش کد رو در رویداد TextChanged دارید. در این صورت کافیه دو متد جداگانه برای این دو بخش تعریف کنید و سپس هر دوی این متدها رو در هندلر مربوط به رویداد TextChanged صدا بزنید.
به لحاط فنی Attach کردن چند Handler به یک رویداد امکان پذیر است اما دو مورد رو باید در نظر داشت:
1- تضمینی به اجرای Handler ها به همان ترتیبی که Attach شده اند وجود ندارد و مهمتر از آن اینکه احتمال اجرای هم زمان وجود دارد.
2- هندل کردن خطاهای احتمالی و در کل نگهداری کد سخت می شود. چندان عرف نیست که در برای یک رویداد در یک فرم چندین Handler وجود داشته باشد.
بله با نظر آقای gwbasic موافقم. از این زاویه قضیه رو ندیده بودم!
پس با این تفاسیر این کار رو به صورت زیر انجام بدید بهتره:
private void textBox1_TextChanged(object sender, EventArgs e)
{
this.commands1();
this.commands2();
}
private void commands1()
{
MessageBox.Show("دستورات بخش اول");
}
private void commands2)
{
MessageBox.Show("دستورات بخش دوم");
}
سلام
1- قصد داشتم خالی بودن TextBox ها را چک کنم . خب این کار رو با رویداد TextChanged مربوط به تکست باکس 1 انجام دادم
2- قصد داشتم کاربر فقط عدد در تکست باکس 1 بتونه وارد کنه . بنابراین باید کدها را در رویداد TextChanged مربوط به تکست باکس 1 قرار بدم.
از طرفی احتمال وجود مشکلاتی که gwbasic فرمودند وجود داشت.
بنابراین توی کلاس Designer.cs مربوط به فرم، همون قسمتی که خود ویژوال استادیو کدها را Generate می کنه یک رویداد جدید به نام textBox1_TextChanged1 ایجاد کردم .
textBox1.TextChanged += new EventHandler(textBox1_TextChanged1);
اما همچنان مشکل وجود داشت .
بنابراین مجبور شدم برای هر کدام یک روال جداگانه تعریف کنم .
ببینید هرچی سوالتون رو کاملتر و جامع تر مطرح کنید سریعتر به نتیجه مطلوب می رسید.
ج1- نمی دونم هدفتون از چک کردن خالی بودن TextBox ها در رویداد TextChanged یک TextBox دیگه چیه؟ معمولا خالی بودن رو هنگام ذخیره تغییرات و Validation نهایی انجام می دن البته سناریو بسیار زیاد هست واستثنا وجود داره در هر صورت منطقتون رو در یک یا چند متد می تونید پیاده سازی کنید تا اصل Dry رو رعایت کرده باشید و کد تکراری ننویسید.
ج2- برای این منظور هم کافیه یک Inherited control از روی TextBox بسازید با نام NumericTextBox تا فقط عدد وارد شود و باز منطق رو یکبار وفقط در این کنترل بنویسید و بارها ازش استفاده کنید. نمونه برای NumericTextBox زیاد هست نیاز به نوشتن هم نیست می تونید جستجو کنید و کنترلی مناسب نیازتون پیدا کنید