PDA

View Full Version : سوال: شبیه سازی mask در TextBox



eshaghrahimy
سه شنبه 18 تیر 1392, 18:32 عصر
سلام
میخوام برای تکست باکس کدی بنویسم که بتونه ماسکی شبیه تاریخ را در maskedtextbox درست کنه
لطفا راهنمایی کنید

khokhan
سه شنبه 18 تیر 1392, 19:02 عصر
سلام
میخوام برای تکست باکس کدی بنویسم که بتونه ماسکی شبیه تاریخ را در maskedtextbox درست کنه
لطفا راهنمایی کنید

عارضم خدمت باسعادت دوست بسیار محترم که یه دونه maskedTextBox1 و یه دونه tooltip توی فرمت بگذار :لبخند:

در رویداد load فرمتون مرقوم فرمائید :


private void Form_Load(object sender, EventArgs e)
{
maskedTextBox1.Mask = "00/00/0000";

maskedTextBox1.MaskInputRejected += new MaskInputRejectedEventHandler(maskedTextBox1_MaskI nputRejected);
maskedTextBox1.KeyDown += new KeyEventHandler(maskedTextBox1_KeyDown);
}

خوب حالا رویداد که MaskInputRejected رو اینطوری مقدار دهی فرمائید


private void maskedTextBox1_MaskInputRejected(object sender, MaskInputRejectedEventArgs e)
{
if (maskedTextBox1.MaskFull)
{
toolTip1.ToolTipTitle = "Input Rejected - Too Much Data";
toolTip1.Show("You cannot enter any more data into the date field. Delete some characters in order to insert more data.", maskedTextBox1, 0, -20, 5000);
}
else if (e.Position == maskedTextBox1.Mask.Length)
{
toolTip1.ToolTipTitle = "Input Rejected - End of Field";
toolTip1.Show("You cannot add extra characters to the end of this date field.", maskedTextBox1, 0, -20, 5000);
}
else
{
toolTip1.ToolTipTitle = "Input Rejected";
toolTip1.Show("You can only add numeric characters (0-9) into this date field.", maskedTextBox1, 0, -20, 5000);
}
}


ودر نهایت در رویداد KeyDown همون maskedTextBox اینطور مرقوم فرمائید :

private void maskedTextBox1_KeyDown(object sender, KeyEventArgs e)
{
toolTip1.Hide(maskedTextBox1);
}

ایدکم ا... بخیرا

eshaghrahimy
سه شنبه 18 تیر 1392, 21:53 عصر
ممنون دوست عزیز ولی فکر کنم من سوالمو بد گفتم منظورم این بود که بدون استفاده از maskedtextbox بتونم برای تکست باکس تابعی بنویسم که اون تابع بتونه این کارو انجام بده (میخوام داخل تکست باکس تاریخ رو بگیرم )

danialafshari
سه شنبه 18 تیر 1392, 22:39 عصر
ممنون دوست عزیز ولی فکر کنم من سوالمو بد گفتم منظورم این بود که بدون استفاده از maskedtextbox بتونم برای تکست باکس تابعی بنویسم که اون تابع بتونه این کارو انجام بده (میخوام داخل تکست باکس تاریخ رو بگیرم )

سلام
خب دلیلتون برای استفاده نکردن از Maskedtextbox چیه؟ این همه زحمت کشیدن کامپوننتی به این خوبی ساختن چرا استفاده نمی کنید تازه علاوه بر Mask ش از کپی غیر از format ش هم جلوگیری می کنه

mousa1992
چهارشنبه 19 تیر 1392, 00:18 صبح
ممنون دوست عزیز ولی فکر کنم من سوالمو بد گفتم منظورم این بود که بدون استفاده از maskedtextbox بتونم برای تکست باکس تابعی بنویسم که اون تابع بتونه این کارو انجام بده (میخوام داخل تکست باکس تاریخ رو بگیرم )


اگه میخوای برنامه نویس بشی من توصیه میکنم خودت بسازیش و کار همچی ساده ای هم نیست و زمان میبره - البته کدهای اماده هم هست ولی طرفش نرو که وسوسه میشی بدون بررسی و تحلیل کد ازش استفاده کنی

موفق باشی

eshaghrahimy
چهارشنبه 19 تیر 1392, 15:28 عصر
دوستان کسی نمیتونه راهنمایی کنه

CsharpNevisi
چهارشنبه 19 تیر 1392, 18:33 عصر
دوستان کسی نمیتونه راهنمایی کنه

چرا میخوایی الکی کدهای برنامه تو زیاد کنی ؟؟؟
این روش بهینه ای نیستا .... !!!!!
ولی حتما یه چیزی هست که نمیخوایی از maskedtextbox استفاده کنی ... !!!
میشه بگی maskedtextbox مشکلش چیه ؟؟؟؟

eshaghrahimy
چهارشنبه 19 تیر 1392, 21:37 عصر
من تو برنامم از devcomponent استفاده کردم ولی maskedtextbox اون مشکل داره و keypress و keydown هندل نمیشه در ضمن نمیخوام از ماسک خود ویژوال استدویو استفاده کنم چون اسکین عوض می کنم ماسک ویژوال استدیو نمیتونه با اسکین عوض بشه بنابراین میخوام تکست باکس خود devcomponent را overload کنم و حداقل بتونم یه ماسک تاریخ واسش بنویسم تا مشکلم حل بشه

mousa1992
چهارشنبه 19 تیر 1392, 21:47 عصر
شما شروع کن به نوشتن راهنمایی خواستی دوستان هستن کمک میکنن
کد اماده کسی نمیذاره واسه کپی پیست

CsharpNevisi
چهارشنبه 19 تیر 1392, 22:48 عصر
خب یه راه راحت به ذهنم میرسه که نیازی هم به ماسک نیست ... !!!
سه تا تکست باکس بزار و ماکس لنشونو برار 4 برای سال 2 برای ماه و 2 هم برا روز بعدش لابه لاشون لیبل بزار و علامت "/" توش بزار بعد تو رویداد " کی آپ " فیلد سال چک کن که اگه لنش به 4 رسید فوکوس بره رو فیلد ماه .... ماه هم همینطور.. !!
فک کنم این راه راحتی باشه .... !!!
به قول استاد خوخان
ایدکم ا... بخیرا

eshaghrahimy
پنج شنبه 20 تیر 1392, 07:20 صبح
ممنونم از دوستان منم دنبال کد آماده نیستم ولی هرچی فکر کردم و جستجو کردم تا الان به هیچ نتیجه ای نرسیدم در ضمن این راه حل شما هم به ذهنم رسیده ولی می خواهم اصولی باشه

mousa1992
پنج شنبه 20 تیر 1392, 18:30 عصر
خب راستش من چنین کاری رو انجام دادم و یکم کار میبره
از رویداد های keypress و text_changed میتونی استفاده کنی
مثلا برای فیلتر کردن تکست باکس برای ورود فقط عدد همچین چیزی رو میتونی استفاده کنی


if (!char.IsDigit(e.KeyChar) && e.KeyChar != 8)
e.Handled = true;

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

eshaghrahimy
پنج شنبه 20 تیر 1392, 19:02 عصر
ممنون از لطفتون ولی مشکل من، فقط عدد وارد کردن نیست من برای دریافت تاریخ با / مشکل دارم که چطوری کاربر وقتی خواست تاریخ وارد کنه کاراکتر / سرجاش بمونه و تکست باکس پر بشه طوری که کاربر فقط عدد وارد کند و چیزی که تکست باکس نشون میده مثلا 1392/02/02 باشه (دقیقا مثل وقتی که ماسک maskedtextbox را برای تاریخ تنظیم میکنیم ) بازم تاکید می کنم مشکل من فقط دوتا کاراکتر / است

13601360
پنج شنبه 20 تیر 1392, 19:34 عصر
این نمونه شاید کمکتون کنه
http://www.codeproject.com/Articles/1534/Masked-C-TextBox-Control