PDA

View Full Version : درباره MaskedTextBox تاریخ شمسی



nasimnastaran
شنبه 30 اردیبهشت 1385, 21:13 عصر
با سلام !
خواستم کاربر زمانی که تاریخ شمسی را در درون MaskedTextBox وارد کرد ، در صورت اشتباه بودن تاریخ شمسی ، پیام خطا به کاربر بدهد . کسی می تونه با یک مثال ما را راهنمایی کند .

ali_kolahdoozan
شنبه 30 اردیبهشت 1385, 22:11 عصر
برای این کار زحمت بکشید یک تابعی . کلاسی چیزی بنویسید

ESG_Esfahan
شنبه 30 اردیبهشت 1385, 23:15 عصر
سلام
می تونی این کار را با Validate انجام بدی. من خودم چیز زیادی از اون نمی دونم ولی تو CodeProject مثال زیاد داره می تونی ازش استفاده کنی .
فکر کنم چیزی که لازم داری را هم بتونی تو این سایت پیدا کنی .

linux
یک شنبه 31 اردیبهشت 1385, 10:18 صبح
برای این کار زحمت بکشید یک تابعی . کلاسی چیزی بنویسید
اگر بلد بود خوب می نوشت.

ali_kolahdoozan
یک شنبه 31 اردیبهشت 1385, 10:22 صبح
حالا این طور شد کامپوننت می کنم می زارم همینجا همه حالشو ببرن . 1 روز وقت بدید چون کار دارم

ali_kolahdoozan
یک شنبه 31 اردیبهشت 1385, 10:25 صبح
حالا این طور شد کامپوننت می کنم می زارم همینجا همه حالشو ببرن . 1 روز وقت بدید چون کار دارم فقط دیگه حال اینکه بخام بشینم حساب کنم کدوم ماه 31 است کدوم نه رو ندارم

من اینطوری میسازم

سال هر چی

ماهها فقط تا 12

روزها تا 31

اگه اینطوری بدرد می خوره بگید تا بسازم آپلود کنم

nasimnastaran
یک شنبه 31 اردیبهشت 1385, 18:50 عصر
با سلام به همه دوستان ، به خصوص ali_kolahdoozan
بسیار ممنون خواهم شد اگه به خاطر ثواب هم که شده این کار را انجام بدی ، هم در دنیا و هم در آخرت .
راستش برای تاریخ میلادی مشکلی نیست ، اما برای تاریخ شمسی ...؟
من یک چند تا dll تاریخ شمسی گرفتم ، اما هیچکدام از اینها بدرم من نخورد . در واقع من می خواستم مقدار آنها که توسط کاربر انتخاب می شود درون یک textbox قرار داده و سپس در یک table آن را ذخیره کنم . یک مثال نمونه برای این ( تاریخ میلادی ) گذاشتم . اما برای این dll های شمسی نتونستم کاری بکنم .
گفتم بهترینش همین MaskedTextBox است و الآن مشکل نحوه error دادن به کاربر است .
لطفا کمـــــــــــــــــــــــ ک کنید

ali_kolahdoozan
یک شنبه 31 اردیبهشت 1385, 20:13 عصر
دوست عزیز من به خاطر اینکه الان توی پروژه خودم هم به همین گیر کردم این کارو خواهم کرد .
maskedit خود دات نت به درد نمی خوره برای ما . من سعی خودم رو می کنم و نتیجه رو آپلود خواهم کرد فقط توضیح دادم کنترلی روی ماههای 31 روزه و 30 روزه نخواهم گذاشت همین

nasimnastaran
یک شنبه 31 اردیبهشت 1385, 21:56 عصر
جناب آقای ali_kolahdoozan
همین هم بسیار لطف کرده اید و اگر سورس آن را هم بذاری دو چندان لطف کرده ای . به هر حال منتظریم .

nasimnastaran
سه شنبه 02 خرداد 1385, 19:59 عصر
جناب آقای ali_kolahdoozan
این کامپوننت شما چه شد ؟

ali_kolahdoozan
سه شنبه 02 خرداد 1385, 21:45 عصر
درست شد . به صورت سورس است برای کامپوننت شدن باید یکم بهش ور برم . آخه از خود کلاس MASKEDIT استفاده نکردم و این یکم کار رو سخت کرد .

nasimnastaran
چهارشنبه 03 خرداد 1385, 18:43 عصر
آروزی توفیق داریم ، بهر حال منتظریم .

reza_rad
چهارشنبه 17 خرداد 1385, 14:10 عصر
آقای حسینی شما این رو دقیق تر باید معنا کنی:
در صورت اشتباه بودن تاریخ شمسی

یعنی آیا تاریخی مثله 1980/5/18 نمی تونه شمسی باشه یا می تونه؟

بعد می تونی کدش رو توی maskedTextBox1_Leave بنویسی

nasimnastaran
چهارشنبه 17 خرداد 1385, 21:22 عصر
جناب آقای راد !
تشکر می کنم از اینکه حوصله کردی و به این تاپیک آمدی .
راستش فرمت تاریخ میلادی به صورت mm/dd/yyyy است . و در واقع همانطوریکه که گفتید ، برای میلادی که ماه را در ابتدا فرمت فوق قرار می دهند ، بنابراین عدد 18 قابل قبول نیست و خطا می ده .
فرمتی که من برای تاریخ شمسی برای کنترل Mask می خوام در واقع yyyy/mm/dd است ( ضمن رعایت تعدادد روزها برای هر ماه ) .
راستش در باره این که در این مورد کدی بنویسم ، بهتره که بگویم چیزی نمی دونم .
متشکرم

عفت بزرگه
چهارشنبه 17 خرداد 1385, 21:57 عصر
این رو ببین


http://rapidshare.de/files/22477383/DatePickerComponent.zip.html (http://rapidshare.de/files/22477383/DatePickerComponent.zip.html)

nasimnastaran
پنج شنبه 18 خرداد 1385, 09:16 صبح
با تشکر
اما چه طوری میشه مقدارش را گرفت و در یک table ذخیره کرد ؟
مثلا برای گرفتن مقدار dateTimePicker و ذخیره مقدار آن در یک table داریم :


dateTimePicker1.Value.ToShortDateString();

اما من در رویداد ذیل برای این کنترل ( dateBox ) که می خواستم مقدارش را در یک table ذخیره کنم ، نتونستم مقدار آن را بگیرم :


private void btnSave_Click(object sender, EventArgs e)
{
SqlConnection cnSQL;
SqlCommand cmSQL;
try
{

string strSQL = "update MyDate set selectdate='" + dateBox1.DateText.ToString()+"'";
...
}

البته فعلا بحث ما روی mask است با این حال اگه توضیح در این باره بدبد ، ممنون میشم .

reza_rad
شنبه 20 خرداد 1385, 12:17 عصر
خواهش می کنم حسینی جان لطف داری.



فرمتی که من برای تاریخ شمسی برای کنترل Mask می خوام در واقع yyyy/mm/dd است ( ضمن رعایت تعدادد روزها برای هر ماه ) .

خوب توی فرمت که مشکلی نداری. داری؟
چون اینها رو می تونی توی همون Mask تنظیم کنی.

اما در مورد اینکه اگه اشتباه بود error بده.
باید توی همون تابعی که گفتم maskedTextBox1_Leave چک کنی ببینی می تونی تاریخ شمسی که وارد شده به میلادی تبدیل کنی یا نه. اگه شد پس درسته.
من این لینک رو پیدا کردم:
http://www.planet-source-code.com/URLSEO/vb/scripts/ShowCode!asp/txtCodeId!4220/lngWid!10/anyname.htm

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

nasimnastaran
شنبه 20 خرداد 1385, 15:21 عصر
جناب آقای راد عزیز !
یه چیز هایی داره دستگیرم میشه ، هر چند کدش توی VB است . باید کمی روش کار کنم .
:موفق:

reza_rad
شنبه 20 خرداد 1385, 15:27 عصر
خوشحالم که مشکلت داره حل میشه.(البته من کاری نکردم همه اش همت خودته)
بازم اگه مشکلی پیش اومد بگو.
موفق باشی

nasimnastaran
شنبه 20 خرداد 1385, 20:48 عصر
متشکرم ،
ضمنا یک کنترل آقای امین بهزادی در سایت کد پروژه درست کرد که تاریخ را درست نشان میده ، فقط تنها مشکلش روز سی ام سالهای کبیسه ( مثلا سال 1387 ) را نشان نمیده ، منتها کنترلش درست کار می کنه . ایشان از یک ComboBox استفاده کرده . می توانی اینجا (http://codeproject.com/useritems/WinPersianDateTimePicker.asp) کلیک کنی .
البته من روی همین کنترل ( Mask ) دارم کار می کنم و در صورت مشکل ، مزاحمتان خواهم شد .
با آرزوی توفیق

reza_rad
یک شنبه 21 خرداد 1385, 09:50 صبح
ممنون آقای حسینی.
کنترل بدرد خوری گذاشتی اینجا.
موفق باشی

nasimnastaran
یک شنبه 21 خرداد 1385, 21:00 عصر
خواهش می کنم !
اینجا (http://www.codeproject.com/useritems/FarsiLibrary.asp?df=100&forumid=287863&mpp=50&select=1526357&msg=1526357) را نیز کلیک کن ، مال آقای H. Eskandari است فقط حوصله می خواد که تمام کدهایش را آدم نگاه کنه . این کد DateTimePicker میلادی را به دو کنترل عربی و فارسی تبدیل می کند . راستش من حوصله نکردم کدهایش را بررسی کنم .ضمنا Dll آن کمی مشکل دارد . می تونی بررسی کنی ؟ منتها فایل Exe آن درست کار کرده و خیلی جالب است .
من همان کنترل قبلی فعلا کارم را راه انداخته .
:موفق:

reza_rad
دوشنبه 22 خرداد 1385, 07:35 صبح
بازم ممنون :)

sajjadrazmi
پنج شنبه 19 مرداد 1385, 14:49 عصر
nasimnastaran: من تابع زیر رو در vb6 نوشته ام. لطفا خودتان تبدیلش کنید به سی شارپ.


Public Function IsDateValid(ByVal strDate As String) As Boolean


Dim Year, Month, Day As Integer


If strDate = "____/__/__" Then
IsDateValid = True
Exit Function
End If
IsDateValid = False
For iii = 1 To Len(strDate)
If Mid(strDate, iii, 1) = "_" Then Exit Function
Next iii
Year = Val(Mid(strDate, 1, 4))
If Len(strDate) <> 10 Then IsDateValid = False
If (Year < 1300) Then Exit Function
If (Year > 1400) Then Exit Function
Month = Val(Mid(strDate, 6, 2))
If Not (0 < Month And Month <= 12) Then Exit Function
Day = Val(Mid(strDate, 9, 2))
If Day < 1 Or Day > 31 Then Exit Function
If (Month > 6 And Month < 12) And Day = 31 Then Exit Function
If Month = 12 And Day > 29 Then Exit Function
If (Mid(strDate, 5, 1) <> "/" Or Mid(strDate, 8, 1) <> "/") Then Exit Function
IsDateValid = True


End Function