PDA

View Full Version : سوال: مشکل در کار با سلول های grid view



ehsan446
چهارشنبه 21 تیر 1391, 01:00 صبح
دوستان من میخوام وقتی تو یک سلول خاص از جدولم تایپ میکنم با هر کاراکتری که وارد میشه یه سری کد رو اون نوشته اجرا بشه
یعنی مثلا اگه زدم ac میخوام یه جا دیگ سرچ بشه با کلید ac
ولی نمیدونم از چه event ای استفاده کنم کنم که با تغییرات کاراکتر به کاراکتر یک سلول اجرا بشه
ممنون میشم کمک کنید؟

the king
چهارشنبه 21 تیر 1391, 02:06 صبح
دوستان من میخوام وقتی تو یک سلول خاص از جدولم تایپ میکنم با هر کاراکتری که وارد میشه یه سری کد رو اون نوشته اجرا بشه
یعنی مثلا اگه زدم ac میخوام یه جا دیگ سرچ بشه با کلید ac
ولی نمیدونم از چه event ای استفاده کنم کنم که با تغییرات کاراکتر به کاراکتر یک سلول اجرا بشه
ممنون میشم کمک کنید؟

اون کنترلی که دارید داخلش تایپ می کنید، EditingControl ئه اون DataGridView است.
از رخداد EditingControlShowing کمک بگیرید تا در اولین فرصت گیرش بندازید و رخداد TextChanged اش رو مدیریت کنید.

به عنوان نمونه یک TextBox روی فرم قرار دهید، زمانی که متن رو در dataGridView1 تایپ می کنید متن textBox1 فورا عوض میشه :

public Form1()
{
InitializeComponent();
this.dataGridView1.EditingControlShowing +=
new System.Windows.Forms.DataGridViewEditingControlSho wingEventHandler
(this.dataGridView1_EditingControlShowing);
}

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
TextBox txt = (TextBox)e.Control;
txt.TextChanged += new EventHandler(txt_TextChanged);
textBox1.Text = txt.Text;
}

void txt_TextChanged(object sender, EventArgs e)
{
textBox1.Text = ((TextBox)sender).Text;
}

Mahmoud.Afrad
چهارشنبه 21 تیر 1391, 05:20 صبح
کد شما خوبه ولی یک اشکال داره اونم اینه که به ازای هر سلولی که واردش بشیم یک تکست باکس میسازه. رویداد editingcontrolshowing رو به صورت زیر اصلاح کنید تا به ازای هر سلول یک تکست باکس ساخته نشه
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
((TextBox)e.Control).TextChanged += new EventHandler(Control_TextChanged);
}

void Control_TextChanged(object sender, EventArgs e)
{
textBox1.Text = ((TextBox)sender).Text;
}

the king
چهارشنبه 21 تیر 1391, 15:42 عصر
کد شما خوبه ولی یک اشکال داره اونم اینه که به ازای هر سلولی که واردش بشیم یک تکست باکس میسازه. رویداد editingcontrolshowing رو به صورت زیر اصلاح کنید تا به ازای هر سلول یک تکست باکس ساخته نشه
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
((TextBox)e.Control).TextChanged += new EventHandler(Control_TextChanged);
}

void Control_TextChanged(object sender, EventArgs e)
{
textBox1.Text = ((TextBox)sender).Text;
}

با تعریف کردن txt که TextBox جدیدی ساخته نمیشه، txt همون e.Control ئه، در تعریف txt نه از new استفاده شده و نه Clone.
صرفا جهت اینکه بار Type Casting مضاعف نشه متغیر txt ایجاد شده.

ehsan446
جمعه 23 تیر 1391, 12:22 عصر
دوستان ممنون از راهنماییتون
به یک مشکل دیگه خوردم
من یک تکست باکس دارم که اولین حرفی که در سلول جدول تایپ میشه را به تکست باکس ارسال میکنم(با راهنمایی شما) و focus رو میدم به textbox به این دلیل که از event هاش استفاده کنم
مشکل اینه که حرف اول که به این صورت به تکست باکس میفرستم با نوشتن حرف دوم پاک میشه و حرف دوم و جایگزینش میشه ولی ادامه ش چون focus رو تکست باکسه درسته
فقط راهنماییم کنید که حرف اول رو چطور بفرستم که بقیه تایپ کلمه این حرفو پاک نکنه و ادامه ش تایپ شه
ممنون