PDA

View Full Version : سوال: چگونگی بستن فرم با کلید Escape



rainlover
پنج شنبه 26 شهریور 1388, 16:46 عصر
با سلام
من یه فرم دارم گه می خوام با کلید escape بسته بشه چی کار باید کنم؟
من تو فروم گشتم اما موضوع مرتبط با این مساله رو پیدا نکردم

tabatabaeefar
پنج شنبه 26 شهریور 1388, 17:23 عصر
سلام
شما ميتوني يه دكمه روي فرمت بگذاري و Visible اون رو False كني ،
در رويداد كليك دكمه عمل بسته شدن فرم رو بنويسي و
CancelButton فرم رو برابر دكمه مذكور قرار بدي.
موفق باشي

atryad
پنج شنبه 26 شهریور 1388, 17:51 عصر
با سلام
من یه فرم دارم گه می خوام با کلید escape بسته بشه چی کار باید کنم؟
من تو فروم گشتم اما موضوع مرتبط با این مساله رو پیدا نکردم
با سلام
دوست عزیز ابتدا یکی از کنترلهای روی فرم مثلا یه text box رو خاصیت key down اونو به این صورت بنویس




if (e.KeyCode == Keys.Escape)
Application.Exit();
بعدا تمام کنرلهای روی فرم رو خاصیت key down اونا رو برابر با خاصیت key down کنترل اول قرار بده
با این کار کاربر روی هر کنترل فرم که باشد با زدن دکمهEsc از فرم خارج میشه

Majid&Masoud
پنج شنبه 26 شهریور 1388, 18:45 عصر
سلام
یه راه راحت تر اینه که این کدو تو رویداد KeyDown فرم بنویسی


private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyData == Keys.Escape)
Application.Exit();
}

rainlover
پنج شنبه 26 شهریور 1388, 20:41 عصر
سلام
شما ميتوني يه دكمه روي فرمت بگذاري و Visible اون رو False كني ،
در رويداد كليك دكمه عمل بسته شدن فرم رو بنويسي و
CancelButton فرم رو برابر دكمه مذكور قرار بدي.
موفق باشي
این کار رو کردم اما جواب نداد یعنی عمل نکرد
شما خودتون از این راه استفاده کردین؟

zoofa
پنج شنبه 26 شهریور 1388, 20:47 عصر
سلام دوست عزيز
اول خاصيت keypreview فرم را برابر true قرار بده و سپس در رويداد keydown فرم كد زير را وارد كنيد.




if (e.KeyCode == Keys.Escape)
this.Close();

rainlover
پنج شنبه 26 شهریور 1388, 20:48 عصر
با سلام
دوست عزیز ابتدا یکی از کنترلهای روی فرم مثلا یه text box رو خاصیت key down اونو به این صورت بنویس




if (e.KeyCode == Keys.Escape)
Application.Exit();
بعدا تمام کنرلهای روی فرم رو خاصیت key down اونا رو برابر با خاصیت key down کنترل اول قرار بده
با این کار کاربر روی هر کنترل فرم که باشد با زدن دکمهEsc از فرم خارج میشه
با تشکر از شما این روش جواب داد ولی همونطور که می دونید این یه راه میانبره. چون اولا lable رو شامل نمیشه دوما شما فرض کنید چند تا فرم داریم که روی هر کدام چند کنترل مختلف هست. لذا باید برای هر یک متد اولی رو اختصاص داد که طبیعتا دور از برنامه نویسی حرفه ایست. بیشتر کار راه بندازه.
سوما تو بحث وراثت اگر بخوام کنترل های دیگه ای به فرم اضافه کنم باید دوباره برای اون فرم یه متد بنویسم و کنترل های جدید رو به اون متد وصل کنم. اما اگه بشه کل فرم والد رو با این کلید بست علاوه بر اینکه این کار رو یکبار و فقط برای فرم اولیه(و نه برای هر کنترل) انجام میدیم دیگه نگران مشتق شدن هم نیستیم.
با این اوصاف فعلا از روش پیشنهادی شما دارم استفاده می کنم. بازم ممنونم

rainlover
پنج شنبه 26 شهریور 1388, 20:50 عصر
سلام
یه راه راحت تر اینه که این کدو تو رویداد KeyDown فرم بنویسی


privatevoid Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyData == Keys.Escape)
Application.Exit();
}

این راهم امتحان کردم کاش جواب میداد چون راه کاملی بود و اشکالات پیشنهاد قبلی دوستمون رو پوشش میداد ولی جواب نداد. نمی دونم چرا؟

rainlover
پنج شنبه 26 شهریور 1388, 20:51 عصر
سلام
یه راه راحت تر اینه که این کدو تو رویداد KeyDown فرم بنویسی


privatevoid Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyData == Keys.Escape)
Application.Exit();
}

این روش هم جواب نداد. کاش جواب میداد. در اینصورت اشکالات روش پیشنهادی دوستمون در بالا رو هم پوشش میداد. ولی ...

rainlover
پنج شنبه 26 شهریور 1388, 21:06 عصر
سلام دوست عزيز
اول خاصيت keypreview فرم را برابر true قرار بده و سپس در رويداد keydown فرم كد زير را وارد كنيد.




if (e.KeyCode == Keys.Escape)
this.Close();



آقادست شما درد نکنه
این راهش بود میشه یه کم توضیح بدی این KeyPriview و KeyDown چیستند؟ به چه درد می خورن؟>
ممنون میشم

mahdi_7610
پنج شنبه 26 شهریور 1388, 21:06 عصر
مشکل پست #6 (http://barnamenevis.org/forum/showpost.php?p=808118&postcount=6) چیه که ازش استفاده نمی کنید ؟

zoofa
پنج شنبه 26 شهریور 1388, 21:15 عصر
keydown زماني اجرا مي شه كه كليدي فشار داده بشه
حالا وقتي در رويداد keydown فرم كدي رو بنويسيد وقتي focus روي فرم باشه رويدادش اجرا مي شه اما اگر روي كنترل ديگه اي باشه رويداد keydown اون كنترلي كه focus روشه اجرا مي شه
حالا ما بايد كاري كنيم كه هميشه اول رويداد keydown فرم قبل از همه رويدادهاي keydown ديگر كنترلها اجرا بشه كه keypreview اين كار را مي كنه
يعني وقتي keypreview برابر true باشه وقتي كليدي مي زنيد اول مي ره سراغ رويدادهاي فرم و بعد مي ره سراغ رويدادهاي كنترلهاي ديگه
اميدوارم درست بيان كرده باشم
موفق باشيد

rainlover
جمعه 27 شهریور 1388, 16:03 عصر
مشکل پست #6 (http://barnamenevis.org/forum/showpost.php?p=808118&postcount=6) چیه که ازش استفاده نمی کنید ؟
پست 6 مشکلی نداره و هم اکنون از اون استفاده میکنم