PDA

View Full Version : ایجاد یک رویداد برای همه textbox ها



hamed_goun
دوشنبه 23 اسفند 1395, 23:10 عصر
سلام من تعداد زیادی تکست باکس تو فرمم دارم و برای جدا کردن سه رقم سه رقم تو رویداد Text_change یکیشون از کد زیر استفاده کردم

if (txt1m.Text == "" || txt1m.Text == "0") return;
decimal price;
price = decimal.Parse(txt1m.Text, System.Globalization.NumberStyles.Currency);
txt1m.Text = price.ToString("#,#");
txt1m.SelectionStart = txt1m.Text.Length;
حالا اگه نخواسته باشم واسه تک تک تکست باکس ها این کد رو کپی نکنم چیکار باید کنم؟

hadiroosta
سه شنبه 24 اسفند 1395, 08:41 صبح
میتونید یک user control بسازین و از تکس باکس ارث بری کنید و این ایونت رو بهش اضافه کنید و در هر جا خواستیم استفاده کنید

BEHZADnr
سه شنبه 24 اسفند 1395, 09:45 صبح
سلام دوست گرامی

از کد زیر در زمان Form Load استفاده کن
فقط به جای کد textBox1_TextChanged ،رویداد تکست باکس مورد نظرت رو بنویس

foreach (Control ctrl in this.Controls)
{
if ((ctrl as TextBox) != null)
{
(ctrl as TextBox).TextChanged += textBox1_TextChanged;
}
}

یونس ابراهیمی
سه شنبه 24 اسفند 1395, 12:20 عصر
با سلام و اجازه دوستان،
شما حتما حتما این مطلب (http://www.w3-farsi.com/%da%a9%d9%86%d8%aa%d8%b1%d9%84-%da%a9%d9%86%d9%86%d8%af%d9%87-%d8%b1%d9%88%db%8c%d8%af%d8%a7%d8%af-event-handler-%d8%af%d8%b1-%d8%b3%db%8c-%d8%b4%d8%a7%d8%b1%d9%be/) رو بخونید
در ضمن این کد همونیه که شما میخواین


using System;
using System.Windows.Forms;

namespace WindowsFormsApplication13
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
foreach (Control ctrl in this.Controls)
{
if (ctrl is TextBox)
{
ctrl.TextChanged += textChange;
}
}
}

void textChange(object sender, EventArgs e)
{
var textBox = sender as TextBox;
Double value;
if (Double.TryParse(textBox.Text, out value))
textBox.Text = string.Format("{0:#,##0}", value);
else
textBox.Text = String.Empty;
}
}
}

hamed_goun
سه شنبه 24 اسفند 1395, 19:08 عصر
سلام
من کاری که شما گفتی رو انجام دادم ولی فقط واسه اون تکست باکسی که رویداد توش هست اعمال میشه باقی نه

private void Form1_Load(object sender, EventArgs e)
{
foreach (Control ctrl in this.Controls)
{
if ((ctrl as TextBox) != null)
{
(ctrl as TextBox).TextChanged += txt1m_TextChanged;
}
}
}
private void txt1m_TextChanged(object sender, EventArgs e)
{


if (txt1m.Text == "" || txt1m.Text == "0") return;
decimal price;
price = decimal.Parse(txt1m.Text, System.Globalization.NumberStyles.Currency);
txt1m.Text = price.ToString("#,#");
txt1m.SelectionStart = txt1m.Text.Length;
}




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

از کد زیر در زمان Form Load استفاده کن
فقط به جای کد textBox1_TextChanged ،رویداد تکست باکس مورد نظرت رو بنویس

foreach (Control ctrl in this.Controls)
{
if ((ctrl as TextBox) != null)
{
(ctrl as TextBox).TextChanged += textBox1_TextChanged;
}
}

یونس ابراهیمی
سه شنبه 24 اسفند 1395, 19:38 عصر
سلام، کد رو کامل تست کردم و گذاشتم، درسته
شما چند تا تکس باکس بذارین رو فرم و با زدن دکمه F7 به محیط کدنویسی برین و 17-11 و 28-20 رو تو جاهای مربوطه کپی کنید. البته کد بالا یه ایرادی داره و باعث میشه که همه تکس باکس ها سه رقم سه رقم اعدادشون از هم جدا بشه و اگر بخواین به جای عدد حرف وارد کنید اون موقع پیغام خطا میده برنامتون. کد زیر اصلاح شده کد بالاست و هر تکس باکسی که دوست داشته باشین می تونید بگین که ارقامش سه تا سه تا از هم جدا بشن



using System;
using System.Windows.Forms;

namespace WindowsFormsApp2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();

this.textBox1.TextChanged += new System.EventHandler(this.textChange);
this.textBox2.TextChanged += new System.EventHandler(this.textChange);

}

void textChange(object sender, EventArgs e)
{
var textBox = sender as TextBox;
Double value;
if (Double.TryParse(textBox.Text, out value))
textBox.Text = string.Format("{0:#,##0}", value);
else
textBox.Text = String.Empty;
}
}
}



مثلا در خط 12 به جای نام textBox1 بنویسین txtm1 یا بجای textbox2 اسم هر تکس باکسی که خودتون دارین رو بنویسین

hamed_goun
سه شنبه 24 اسفند 1395, 20:05 عصر
حالا من میخوام همه تکست باکس هایی که دارم وقتی عددش رو تایپ کرد و از اون خارج شد همه ش با هم جمع بشه و از کد زیر استفاده کردم اما همش صفر میشه امکانش هست اینم راهنمایی بفرمایید:
void SumTextBoxs(object sender, EventArgs e) {
sum = 0;
foreach (Control ctrl in this.Controls)
{
if (ctrl is TextBox)
{
TextBox t = ctrl as TextBox;
string sum1 = t.Text;
lblMablaq.Text = t.Text;
sum += Convert.ToInt32(sum1.Replace(",", string.Empty));
}
//lblMablaq.Text = sum.ToString();
}
}

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