PDA

View Full Version : سوال: ایجاد آپشن Digit Group برای تکست باکس ( مثل ماشین حساب ویندوز XP )



pooya1072
یک شنبه 22 مرداد 1391, 17:13 عصر
سلام
این سوال رو تاحالا چند بار به عناوین مختلف مطرح کردم ولی تمام جوابها یه طوری برای من اون جواب اصلی نبودن.همه دوستان احتمالا با ماشین حساب ویدوز xp کار کردن.گزینه ای هست به نام digit grouping که ارقام قبل از ممیز رو به صورت گروه سه تایی دسته بندی می کنه.


key press=1 ===> textbox.text=1


key press=2 ===> textbox.text=12


key press=3 ===> textbox.text=123


key press=4 ===> textbox.text=1,234


key press=.1 ===> textbox.text=1,234.1


دوستان عزیز توجه کنید که با هر بار وارد کردن یک رقم این دسته بندی تغییر می کند.پس از ورود ممیز اعداد بعد از ممیز دسته بندی نمی شوند.

1,234,567.2055482245

لطفا جوابتون رو به صورت دستوری که قراره درون text_change event نوشته بشه قرار بدید.خیلی ممنون میشم اگه کمک کنید.1 ماهه گیر همینم.

tam2145
دوشنبه 23 مرداد 1391, 06:40 صبح
سلام آقا پویا
من می تونم این سورس را برایتون بنویسم !! :چشمک: فقط چند تا سوال دارم ::متفکر:
1- آیا می خواهید مثل ماشین حساب ویندوز ، نقطه ی ممیز اعداد نمایش داده شود ؟؟
2- آیا بعدا خودتان می توانید سورس اعمال ریاضی این گونه اعداد را بنویسید ؟؟
لطفا جواب این دو سوال را بدهید ....:متفکر:
راستی خودم در گیرم و مشکلی دارم :ناراحت::اشتباه:، اما اگر ضروری نباشه تا آخر هفته براتون می نویسم !!:خجالت:

pooya1072
دوشنبه 23 مرداد 1391, 07:34 صبح
سلام دوست عزیز....
از توجه شما ممنون و متشکرم.ببخشید که دیر جواب دادم. تازه از کار برگشتم.
در جواب سوالات شما :
1-بله نقطه ممیز نشان داده شود
2- بله .سورس رو خودم می نویسم.

البته اگه درگیر کاری هستید فقط منو راهنمایی کنید هم خیلی ازتون ممنون میشم.

tam2145
سه شنبه 24 مرداد 1391, 00:29 صبح
سلام
خواهش می کنم ! اگه ببینم به کسی می تونم کمک کنم ، بهش کمک می کنم ، فرقی برایم ندارد که کی هست !!
چون در گیر کاری هستم و شما هم انگار عجله دارید این نمونه پروژه را که خودم نوشتم را می گذارم :

http://faupload.com/upload/91/Khordad/Digit-grouping-calculator-1-by-tam2145.rar
در ضمن بگم که این پروژه با vb.net 2008 نوشته شده !!

توی این برنامه ای که من گذاشتم :
1- میاد اعداد را اینگونه فرمت دهی می کند : 1,234,567.2055482245
2- محل قرارگیری اعداد در تکست باکس در سمت راست تکست باکس تنظیم شده است !!
3- همزمان با تغییر ، عدد بدون قالب بندی را در اختیار شما می گذارد تا با آن اعمال ریاضی خود را انجام دهید .:کف:
4- سریع عمل می کند !! به هر تغییری ، تکست ، آپدیت می شود !!

مشکلات :
1- نشانگر مکان متن حذف و یا غیر قابل نمایش نشده است !!:عصبانی++:
2- مانند ماشین حساب ویندوز ، "." کنار اعداد ندارد !!
3- باید محدوده متغییر ها را متناسب با کار خود تنظیم کنید !!
4- با فشردن هر گونه حرف و یا هر چیزی به جز عدد و ممیز ، برنامه هنگ می کند .
5-- برنامه برای جلوگیری از وارد شدن دو ممیز تنظیم نشده است .
6-برای اعداد منفی تنظیم نشده است !!
....

دوست عزیز مشکلاتی که گفتم را اگر می توانید خودتان حل کنید چون سرم شلوغه فقط نیاز به دقت و ابتکار عمل دارد !! :لبخند:
راستی بگم که اول می خواستم یک کد طولانی و خیلی کند بنویسم :اشتباه: ولی با دیدن این آدرس که خودتان این سوال را مطرح کرده بودید ::متفکر:
منظورم این آدرس هست :
http://www.dreamincode.net/forums/topic/288473-how-can-i-create-a-textbox-with-digit-grouping-option
و دیدن این لینک :
http://msdn.microsoft.com/en-us/library/0c899ak8.aspx
توی اون تایپک و کمی ابتکار عمل تونستم ، این سورس و برنامه را بنویسم !! :لبخند:
اگه راهنمایی خواستید من در خدمتم .....

Saman_12
سه شنبه 24 مرداد 1391, 01:06 صبح
xp ندارم اما این میتونه کمک کنه:


Private Function Spiler(decnum As Decimal) As String

Dim dotindex As Int32 = decnum.ToString.IndexOf(".")

If dotindex > 0 Then

Dim befordot As String = Mid(decnum, 1, dotindex)
Dim afterdot As String = Mid(decnum, dotindex + 1, (decnum.ToString.Length - 1) - (dotindex))

befordot = Format(decnum, "###,###")

Return befordot & afterdot
Else

Return Format(decnum, "###,###")
End If
End Function

pooya1072
سه شنبه 31 مرداد 1391, 07:38 صبح
با سلام مجدد و تشکر از دوستانی که در این تایپیک به من کمک کردند. کامل شده این تیکه از برنامه رو جهت استفاده دوستانی که لازم دارند میذارم.


PrivateSub TextBox1_KeyPress(ByVal sender AsObject, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
Dim TextTag AsString = sender.tag
Dim IntegerPart AsString = ""
Dim EditedIntegerValue AsString = ""
Dim EditedValue AsDecimal
Dim DecimalPart AsString = ""
C = e.KeyChar
SelectCase C
Case"."
If TestDot = FalseThen
TextTag += "."
TestDot = True
EndIf
Case vbBack
IfStrings.Right(TextTag, 1) = "."Then TestDot = False
If Len(TextTag) > 0 Then
IfStrings.Mid(TextTag, TextTag.ToString.Length, 1) = "."And Len(TextTag) > 1 Then
TextTag = Strings.Left(TextTag, TextTag.ToString.Length - 2)
Else
TextTag = Strings.Left(TextTag, TextTag.ToString.Length - 1)
EndIf
EndIf
Case"0"To"9"
TextTag += C
Case vbTab
TestDot = False
EndSelect
If TextTag.IndexOf(".") = -1 Then
IntegerPart = TextTag
Else
IntegerPart = Strings.Left(TextTag, TextTag.IndexOf("."))
If Val(IntegerPart) = 0 Then IntegerPart = "0"
DecimalPart = Strings.Right(TextTag, Len(TextTag) - (TextTag.IndexOf(".") + 1))
EndIf
If Len(IntegerPart) > 0 Then
EditedValue = CType(IntegerPart, System.Decimal)
EditedIntegerValue = EditedValue.ToString("#,#", CultureInfo.InvariantCulture)
Else
EditedIntegerValue = "0"
EndIf
If Val(TextTag) < 1 Then EditedIntegerValue = "0"
sender.tag = TextTag
sender.Text = EditedIntegerValue & "." & DecimalPart
sender.selectionstart = sender.textlength
Label1.Text = Val(sender.tag)
e.Handled = True
EndSub

amirzandi
سه شنبه 31 مرداد 1391, 07:43 صبح
ببخشید ، ولی formatNumber(Number,0) کار نمی کنه؟

pooya1072
سه شنبه 31 مرداد 1391, 08:52 صبح
ببخشید ، ولی formatNumber(Number,0) کار نمی کنه؟

سلام.
من 2 ماهه گیر همینم.اگه تایپیک رو نگاه کنی خیلی هم تو این سایت هم سایتهای خارجی این سوال رو مطرح کردم.ولی هیچ کس جواب یا راه حلی نداد.با FormatNumber هم کار کردم.ولی جواب نمی داد.اگه شما راه حلش با استفاده از FormatNumber رو بگی ممنون میشم.
در ضمن به این تیکه برنامه توجه کنید:


Dim LengthValue AsString = "1234567890.1"
Dim WidthValue AsString = "1234567"
Dim Area AsDouble = Val(LenghtValue) * Val(WidthValue)
Dim DecPartLength AsInteger
Dim IndexDot AsInteger = Area.ToString.IndexOf(".")
If IndexDot = -1 Then
DecPartLength = 0
Else
DecPartLength = Len(Area.ToString) - IndexDot
EndIf
AreaValue.Text = FormatNumber(CType(Area, System.Double), DecPartLength, , , TriState.True)

ببینید چرا جواب با جواب ماشین حساب یکی نیست.
توجه کنید که من می خوام تعداد اعداد اعشاری جواب بستگی داشته باشه به ارقام اعشاری دو عددی که در هم ضرب شده اند.