PDA

View Full Version : ترتیب اجرای event های یک کنترل



pd_ze62
چهارشنبه 22 اسفند 1386, 10:55 صبح
من یه تکست باکس دارم می خوام هر بار که یوزر یه دکمه ای رو فشار داد، یه تابع (مثلا f1) فراخوانی بشه و یه سری کارهایی رو روی متن تکست باکس انجام بده.برای این کار تابع f1 رو درون event KeyUp کست باکس قرار دادم


privatevoid textBox1_KeyUp(object sender, KeyEventArgs e)
{
this.f1();
}



اما مشکل اینجاست زمانی که یوزر یه کارکتر مثلا X رو وارد می کنه، قبل از این که این کارکتر به متن تکست باکس اضافه بشه، تابع f1 فراخوانی میشه و پساز اجرای اون کارکتر X به متن اضافه می شه.

چی کار باید بکنم که اول خود تابع KeyUp اجرابشه(و کارکتر X به متن اضافه شه)و بعد تابع f1 اجرا شه ؟

hassan razavi
چهارشنبه 22 اسفند 1386, 11:03 صبح
از رویداد TextChanged استفاده کنید

pd_ze62
چهارشنبه 22 اسفند 1386, 11:13 صبح
جناب رضوی برنامم یه جوریه که نمی تونم از textChanged استفاده کنم . توضیحش یه مقدار طولانیه. یعنی راه دیگه ای نداره ؟ eventای وجود نداره که بعد از فشار کلید ها و بعد از اجرای تابع KeyUp اجرا شه؟

hassan razavi
چهارشنبه 22 اسفند 1386, 11:45 صبح
Keypress رو هم تست کردید؟

pd_ze62
چهارشنبه 22 اسفند 1386, 12:00 عصر
بله امتحان کردم.
اول KeyDown اجرا میشه بعد KeyPress و بعد KeyUp .و بعد کارکتر چاپ می شود :افسرده:

sinpin
چهارشنبه 22 اسفند 1386, 12:07 عصر
بله امتحان کردم.
اول KeyDown اجرا میشه بعد KeyPress و بعد KeyUp .و بعد کارکتر چاپ می شود :افسرده:
اما نتیجه ای که من بدست آوردم اینطور نبود. ببینید‌:

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
//3
MessageBox.Show("down");
}

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
// 1
MessageBox.Show("press");
}

private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
// 4
MessageBox.Show("up");
}

private void textBox1_TextChanged(object sender, EventArgs e)
{
//2
MessageBox.Show("changed");
}

hassan razavi
چهارشنبه 22 اسفند 1386, 12:09 عصر
یک Componnent جدید از Textbox بسازید و یک Event جدید هم مثلا myOnTextChange بسازید و onTextChanched رو هم Override کنید و بعد از فراخوانی Base.OnTextChanged , رویداد جدید رو صدا بزنید.

hassan razavi
چهارشنبه 22 اسفند 1386, 12:13 عصر
فکر کنم دوستمون Event ای می خواد که با هر بار فشرده شدن کلید , در واقع با ایجاد هر تغیر در تکست , Rise بشه

sinpin
چهارشنبه 22 اسفند 1386, 12:27 عصر
[/ltr]اما مشکل اینجاست زمانی که یوزر یه کارکتر مثلا X رو وارد می کنه، قبل از این که این کارکتر به متن تکست باکس اضافه بشه، تابع f1 فراخوانی میشه و پساز اجرای اون کارکتر X به متن اضافه می شه.
چی کار باید بکنم که اول خود تابع KeyUp اجرابشه(و کارکتر X به متن اضافه شه)و بعد تابع f1 اجرا شه ؟

متاسفانه من متوجه اشکال نشدم، آخه دقیقا همینطوره که شما میخواین : اول کرکتر جدید اضافه میشه و بعد با رها کردن دکمه رویداد KeyUp اون Raise میشه.
شما این رو تست کنید :

private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
NotifyMe();
}

private void NotifyMe()
{
MessageBox.Show(textBox1.Text);
}

pd_ze62
چهارشنبه 22 اسفند 1386, 12:28 عصر
زمانی که خط به خط اجرا می کنم، اول KeyِDown اجرا میشه بعد KeyPress بعد KeyUp.
به هر حال مشکل اینجاست که کارکتر بعد از اجرای f1 چاپ میشه .(اگه شک دارید امتحان کنید)
من می خوام اول کارکتر به متن تکست باکس اضافه شه بعد f1 انجام شه.از textChanged هم نمی تونم استفاده کنم چون توی f1 متن رو یه عالمه تغییر میدم که باعث میشه دوباره و چند باره textchanged راخوانی شه و خلاصه اینکه توی لوپ میفته و یه سری مشکل جدید ایجاد میشه:گریه:

pd_ze62
چهارشنبه 22 اسفند 1386, 12:31 عصر
دوستان خیلی ممنون بابت پیگیریتون:خجالت:

hassan razavi
چهارشنبه 22 اسفند 1386, 12:44 عصر
پست شماره 7 رو جدی بگیرید

pd_ze62
چهارشنبه 22 اسفند 1386, 12:51 عصر
دوستان ممنون . حل شد مشکلم:بوس:
مشکل در کارهایی بود که توی تابع f1 انجام میدادم.(مثلا send کردن یه دکمه دیگه و insert کردن و...)
حق با جناب sinpin بود ، در حالت عادی اول کارکتر چاپ میشه و بعد KeyUp اجرا میشه.
یه دنیا تشکر :لبخندساده: