PDA

View Full Version : بازهم مشکل همیشگی تایپ تاریخ در تکس بکس



forozeshfard
سه شنبه 26 دی 1385, 17:16 عصر
سلام خدمت دوستان
مشکل من این است هنگامی که در تکس باکس تاریخ تایپ می کنم درست تایپ نمی شود بهنوان مثال تایپ می کنم 24/12/52 نشان می دهد 52/12/24
لازم بذکر است قبل از مطرح کردن این سئوال در تمام قسمتها سرچ کرده ام و همه گفته اند که فونت را فارسی کن و right to left را برابر true قرار بده - همه این کار ها را کرده ام ولی باز نشد خواهشمندم در صورت امکان راهنمایی دقیق وکامل نمایید .

ali_kolahdoozan
سه شنبه 26 دی 1385, 19:10 عصر
یک کامپوننت برای رفع مشگل خود بنویسید یا از آماده ها استفاده کنید

Neeloofar
سه شنبه 26 دی 1385, 20:57 عصر
سلام خدمت دوستان
مشکل من این است هنگامی که در تکس باکس تاریخ تایپ می کنم درست تایپ نمی شود بهنوان مثال تایپ می کنم 24/12/52 نشان می دهد 52/12/24
لازم بذکر است قبل از مطرح کردن این سئوال در تمام قسمتها سرچ کرده ام و همه گفته اند که فونت را فارسی کن و right to left را برابر true قرار بده - همه این کار ها را کرده ام ولی باز نشد خواهشمندم در صورت امکان راهنمایی دقیق وکامل نمایید .

چنین مشکلی نباید وجود داشته باشد.

اگه نمیشه از MaskedEdit استفاده کن.

programmermp
سه شنبه 26 دی 1385, 21:06 عصر
متاسفانه وجود داره

و یکی از راه هاش اینه که برعکس بنویسی تا در ست نشون داده بشه

یعنی به جای اینکه بنویسی 12/02/85 بنویسی 85/02/12 تا مثل اولی نشون بده

که اصلا راه خوبی نیست


به نظر من هم از همن maskededit استفاده کنید

mostafa_leman
چهارشنبه 27 دی 1385, 00:03 صبح
من قبلا یک dll توی سایت گذاشته بودم به نام MaskBox که اگه یک سرچ کوچیک بزنی پیداش میکنی .

meh_secure
چهارشنبه 27 دی 1385, 00:20 صبح
از 3 تا textbox استفاده کنید. کنترل خیلی راحت میشه. تبدیلات شمسی و میلادی (البته مربوط به ورژن 2005) بسیار آسان میشه. اولی روز - دومی ماه - سومی سال

Sub Zero
چهارشنبه 27 دی 1385, 01:12 صبح
این فایل رو به Refrence پروژت اضافه کن و ازش استفاده کن آخرشه

komail_sh
چهارشنبه 27 دی 1385, 09:12 صبح
اگر از maskedtextboxاستفاده کنی مشکال حل میشه

Neeloofar
چهارشنبه 27 دی 1385, 09:37 صبح
متاسفانه وجود داره

و یکی از راه هاش اینه که برعکس بنویسی تا در ست نشون داده بشه

یعنی به جای اینکه بنویسی 12/02/85 بنویسی 85/02/12 تا مثل اولی نشون بده

که اصلا راه خوبی نیست


به نظر من هم از همن maskededit استفاده کنید

نکنه شما ابتدا میخوای 12 سپس 02 سپس 85 رو تایپ کنی! خب اینطوری برعکس میشه. باید ابتدا 85 و سپس 02 و بعد 12 رو تایپ کنی!

Neeloofar
چهارشنبه 27 دی 1385, 12:57 عصر
منظور بنده هم همین بود عزیز دل
به نظر من هم از همن maskededit استفاده کنید

با maskededit میتونید یک نمونه بگذارید که ابتدا روز سپس ماه و بعد سال درج شود؟

Neeloofar
چهارشنبه 27 دی 1385, 19:00 عصر
-- به بحث در مورد موضوع تاپیک ادامه بدید --

ولی برای حل مشکل تاریخ 2 راه وجود داره:
1) یک کامپوننت بنویسید که هر طور میخواید ثبت بشه. (که وقت گیر است)
2) مثل تمامی پروژه های فارسی نوشتن رو از سال به سمت روز ادامه بدهید. من پروژه ای از هیچ شرکتی ندیدم که روز به سمت سال بنویسد. (غیر از یکی دو مورد پروژه های تحت داس)
و من هم بلد نیستم چنین کاری بکنم.

فقط این راهنمایی رو خدمتتون میگم:
بهتر است از یک MaskedTextBox استفاده کنید که کاربر نیاز به تایپ علامت "/" نداشته باشد. کافیست در Property کنترل مربوطه در قسمت Mask عبارت ذیل را درج نمایید

####/##/##یادتون نره که برای تاریخ فارسی RightToLeft کنترل True باشد.
حال اگر لازم است در خروجی MaskedTextBox یعنی Text کاراکتر "/" هم نمایش داده شود خصیصه TextMaskFormat را برابر InclucleLiterals قرار دهید.

خروجی
MaskedTextBox.Text >>> 1385/01/01اگر لازم است در خروجی MaskedTextBox یعنی Text کاراکتر "/" نمایش داده نشود خصیصه TextMaskFormat را برابر ExcludePromptAndLiterals قرار دهید.

خروجی
MaskedTextBox.Text >>> 13850101بهتر است در TextMaskFormat از IncludePrompt و IncludePromptAndLiterals چون کاربرد چندانی ندارند.

Prompt چیه:

کاراکتر یا پیامى که توسط کامپیوتر ارائه مى شود تا مشخص کند که اماده پذیرفتن ورودى صفحه کلید است یعنی همون علامت "_" که اعداد روش تایپ میشوند. Literal چیه؟

همون کارکتر جدا کننده اعداد است که شما اونو در تاریخ "/" قرار میدهید و ":" رو برای زمان انتخاب میکنید.ضمنا برای تایپ صحیح لازم است که نشانگر همیشه در ابتدای MaskedTextBox قرار بگیرد وگرنه تاریخ ناقص تایپ میشود. (مثلا کاربر روی MaskedTextBox کلیک میکنه و بدون اینکه ابتدای خط بره شروع به تایپ میکنه)
برای جلوگیری از این مشکل در روال GotFocus و Click کنترل مربوطه این کدها را درج نمایید:


MaskedTextBox1.Select(0, 0)
با استفاده از این دو تابع میتونید علامت "/" از تاریخ بردارید یا اضافه کنید.


Public Function fdtFormatDate(ByVal strDate As String) As String
fdtFormatDate = Format$(strDate, "0000/00/00")
End Function
Public Function fdtUnFormatDate(ByVal strDate As String) As String
fdtUnFormatDate = Mid$(strDate, 1, 4) & Mid$(strDate, 6, 2) & Mid$(strDate, 9, 2)
End Functionبا استفاده از این تابع هم میتونید صحت تاریخ رو چک کنید:


این Enum در قسمت اعلان عمومی درج شود
Public Enum FDT_CheckDateTimeResultConstants
FDT_NoError = 0
FDT_ErrorInDate = 1
FDT_ErrorInDay = 2
FDT_ErrorInMonth = 3
FDT_ErrorInYear = 4
FDT_ErrorInDayMonth = 5
FDT_ErrorInTime = 6
FDT_ErrorInHour = 7
FDT_ErrorInMinute = 8
End Enum

Public Function fdtCheckDate(ByVal DateForTest As String, Optional ByVal ShowWarning As Boolean = True, Optional ByVal DateMatter As String= "") As FDT_CheckDateTimeResultConstants
If InStr(DateForTest, "_") <> 0 Or DateForTest = ""Or Len(DateForTest) < 8 Or Val(DateForTest) = 0 Then
If ShowWarning Then MsgBox(" لطفاً تاریخ ««" & DateMatter & "»» را کامل وارد کنید",, "خطا در وارد کردن تاریخ ")
fdtCheckDate = FDT_CheckDateTimeResultConstants.FDT_ErrorInDate
Exit Function
End If
If Val(Mid$(DateForTest, 1, 4)) < 1350 Or Val(Mid$(DateForTest, 1, 4)) > 1481 Then
If ShowWarning Then MsgBox(" لطفاً عدد سال تاریخ «" & DateMatter & "» را بین 1300 تا 1400 وارد کنید",, "خطا در وارد کردن تاریخ ")
fdtCheckDate = FDT_CheckDateTimeResultConstants.FDT_ErrorInYear
Exit Function
End If
If Val(Mid$(DateForTest, 5, 2)) > 12 Or Val(Mid$(DateForTest, 5, 2)) < 1 Then
If ShowWarning Then MsgBox(" لطفاً عدد ماه تاریخ «" & DateMatter & "» را بین 1 تا 12 وارد کنید",, "خطا در وارد کردن تاریخ ")
fdtCheckDate = FDT_CheckDateTimeResultConstants.FDT_ErrorInMonth
Exit Function
End If
If Val(Mid$(DateForTest, 7, 2)) > 31 Or Val(Mid$(DateForTest, 7, 2)) < 1 Then
If ShowWarning Then MsgBox(" لطفاً عدد روز تاریخ «" & DateMatter & "» را بین 1 تا 31 وارد کنید",, "خطا در وارد کردن تاریخ ")
fdtCheckDate = FDT_CheckDateTimeResultConstants.FDT_ErrorInDay
Exit Function
End If
If Val(Mid$(DateForTest, 5, 2)) > 6 And Val(Mid$(DateForTest, 7, 2)) > 30 Then
If ShowWarning Then MsgBox(" عدد ماه و عدد روز تاریخ «" & DateMatter & "» با هم انطباق ندارد ",, "خطا در وارد کردن تاریخ ")
fdtCheckDate = FDT_CheckDateTimeResultConstants.FDT_ErrorInDayMon th
Exit Function
End If
fdtCheckDate = FDT_CheckDateTimeResultConstants.FDT_NoError
End Function


جناب forozeshfard (http://www.barnamenevis.org/forum/member.php?u=19701) پیشنهاد میکنم خودتون رو برای یک چنین مورد ناچیز اذیت نکنید.(منظورم جهت تایپ تاریخ که حالا از سال باشه یا از روز) مطمئن باشید که عیب محسوب نمیشود. به فکر کامل کردن و ارتقا سایر قسمت های پروژه خود باشید.
موفق باشید!:چشمک:

mostafa_leman
پنج شنبه 28 دی 1385, 18:40 عصر
اینم تکست باکس تاریخ
توی properties خصوصیت mask رو برابر با LDate کنید
در صورتی که میخوایین برای ورود ارقام استفاده کنید این خصوصیت رو برابر با Money کنید
در صورتی که میخواین تاریخ رو به صورت مختصر وارد کنید این خصوصیت رو برابر SDate قرار بدین

forozeshfard
جمعه 29 دی 1385, 06:06 صبح
با سلام خدمت تمام دوستان
سرکار خانم نیلوفر متشکرم از راهنمایی دقیق شما - مسک باکس را از اینتر نت گرفتم و با توضیحات شما مشکلم حل شد در کل دقیقا حق باشما است شاید مسئله تاریخ آنقدر هم مهم نباشد .
جناب آقای مصطفی لمن از دقت و توجه شما هم بسیار ممنونم فایل ضمیمه را گرفتم بسیار موثر بود .
جناب آقای صالحی ممنون از توجه جنابعالی و راهنمایهایتان

با سپاس
فروزش فرد