PDA

View Full Version : سوال: مشکل با ساختن کامپوننت



kh1387
چهارشنبه 22 مهر 1388, 11:26 صبح
سلام بر دوستان خوبم
من یک کامپوننت textBox ساختم که این کد رو داخلش نوشتم:


protected override void OnKeyDown(KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter) SendKeys.Send("{TAB}");
base.OnKeyDown(e);
}

حالا در قسمتی از برنامه که از این جعبه متن استفاده می کنم، این دستور رو نوشتم:


private void txtDriverCode_KeyDown(object sender, KeyEventArgs e)
{
if (txtDriverCode.Text.Trim() != string.Empty)
{
if (e.KeyCode == Keys.Enter)
{
if (ag.existDriverCodeInDB(Int16.Parse(txtDriverCode. Text)))
{
addDriverToListBox(Int16.Parse(txtDriverCode.Text) );
txtDriverCode.Clear();
listBoxWaitingDriver.SelectedIndex = 0;
txtDriverCode.ResetText();
txtDriverCode.Focus();
}
else
{
MessageBox.Show(".راننده ای با این کد وجود ندارد");
txtDriverCode.ResetText();
}
}
}
}

ولی وقتی اینتر رو می زنم، به کنترل بعدی میره.
میخوام طوری باشه که دستور پروتکتدی که در اصل کامپوننت نوشتم، اینجا نتونه دخالتی داشته باشه.
چه کنم؟

kh1387
چهارشنبه 22 مهر 1388, 14:14 عصر
کسی نیست کمکم کنه؟:افسرده:
نیاز فوری دارم
خواهش می کنم اگه کسی می دونه راهنمایی کنه
متشکرم

Amir Oveisi
چهارشنبه 22 مهر 1388, 15:34 عصر
خوب وقتی اینجوری نوشتین باید هم همین اتفاق بیفته، چرا از TextBox معمولی استفاده نمی کنید؟

kh1387
چهارشنبه 22 مهر 1388, 16:09 عصر
خوب وقتی اینجوری نوشتین باید هم همین اتفاق بیفته، چرا از TextBox معمولی استفاده نمی کنید؟
اولا متشکرم که پاسخ دادید.
ببین دوست عزیز من تکست باکسهای خاصی برای خودم ساختم و میخوام این کدها هم داخلشون باشه.
حالا نمی دونم در پنجره اصلی چرا این کد کار نمی کنه؟:متفکر:


txtDriverCode.Focus();

باید در قسمت کامپوننت اصلی یه سری تغییرات بدم. فکر کنم در مورد base حالا نمی دونم چه تغییراتی.
لطفا اگه بلدید بهم بگید
متشکرم

اَرژنگ
چهارشنبه 22 مهر 1388, 16:30 عصر
اولا متشکرم که پاسخ دادید.
ببین دوست عزیز من تکست باکسهای خاصی برای خودم ساختم و میخوام این کدها هم داخلشون باشه.
حالا نمی دونم در پنجره اصلی چرا این کد کار نمی کنه؟:متفکر:


txtDriverCode.Focus();

باید در قسمت کامپوننت اصلی یه سری تغییرات بدم. فکر کنم در مورد base حالا نمی دونم چه تغییراتی.
لطفا اگه بلدید بهم بگید
متشکرم

دوست عزیز،
۲ روش مختلف میتونم پیشنهاد بدم
۱.اگر در زندگی با فلسفه و منطق پیش بریم، سوالی که پیش میاد اینکه که کمپوننتی که طراحی کردید دقیقاً برعکس جایی که استفاده‌اش میکنید. همانطوری که شما یک میخ چوبی را بر در آهنی نمیکوبید، چرا این تکست باکس که ذاتش و طراحیش اینه که وقته که دگمه Enter را به Tab تعبییر کند را جایی که برعکس ذاتش باید کار کند استفاده میکنید؟
چیزی که برمودا سعی کرد بگه این بود که، از یک چیزه دیگر استفاده کن، ولی شما میگید که از یک خاصیت دیگرش را لام دارید، پس تنها نتیجه‌ای که میماند شما باید یک چیز را کد باید ضدونقیض ِعمل میکند را مدیریت کنید. مثل اینکه یک دزد را در یک جواهر سازی استخدام کنید و مداوم مواظب کارش باشید. شاید دزده یک خصوصیات خوبی هم دارد که لازم دارید، مثلا شیشه خوب تمیز میکنه، ولی این ۲ تا خصوصیت را با هم در یکجا نگه داشتن مشکل ایجاد میکند، پس راه حل چی میشه؟ یک نفر درست استخدام میکنید که فروشندگی کند و از این دزد هم برایه پاک کردن شیشه فقط استخدامش میکنید.
در مورد این کمپوننت هم لازم نیست همه چی را یکجا داشته باشید، چیزی را که نقض جایی که باید استفاده بشد نیست نگه دارید و بقیه را در یک کموننت دیگر پیاده کنید. به این شکل واقعا یک کمپوننت سفارشی دارید نه یک کمپوننت که سعی میکند به هر سازی برقصد و یک معموِر دیگر هم بر شرائط رقص مدیریت کند.
۲.روش دیگر که با منطق، فلسفه ، و حتی اصول زندگی هم مغایرت دارد این است که: دورو ورش را if بکارید، بالاخره یکجوری این موجود بدخت (تکست باکس را میگم)، وادار کنید که برعکس این چیزی که هستش عمل کند، بعدش هم تعجب کنید که چرا این همه کد برایه یک کاره ساده مینویسید.
به شما اشکال نمیگرم، ولی منبع مشکلات شما معلمانی بودند که برنامه‌نویسی را بدانه منطق و فلسفه به شما تدریس کردند. اگر طرز فکرتان را عوض کنید همه درهایه بسته را مانند یک اتوبان میبینید.