PDA

View Full Version : سوال: فرمت بندی یک رشته



Sub Zero
چهارشنبه 02 مرداد 1387, 17:50 عصر
سلام .
چطوری میتونم یه رشته عددی مثل 1285222222 رو به صورت 12.85.22.222.2 فرمت بندی کنم در واقع میخوام اونو توی ماسک #.###.##.##.## قرار بدم .

ameysams
چهارشنبه 02 مرداد 1387, 21:57 عصر
با عرض شرمندگی خیلی برام جالبه که بدونم که اینجور فرمتبندی مخصوص کجاست؟

mehran20_200
چهارشنبه 02 مرداد 1387, 23:34 عصر
سوال شما دو مفهوم دارد

1-می خواهید کاربر رشته ای به این صورت را وارد Textbox کند که در این صورت باید در قسمت Toolbox از شیئی به نام MaskedTextBox استفده کنید و در خواص ان
گزینه Mask را عبارت #.###.##.##.## قرار دهید و برای اعتبار سنجی هم از تابع Like استفده کنید.
2-اگر منظور شما این است که این عبارت را قبلا داشته اید(مثلا در بانک اطلاعاتی ذخیره کرده اید) و حالا می خواهید در نمایش آن حروف به این صورت جدا شوند می توانید از این مثال که برای "پول" است استفده کنید و با تغییر عبارت آن به گزینه مورد نظر خود برسید.


از این تابع برای تبدیل اعداد پشت سر هم به واحد پولی استفده می شود


Public Function curency(ByVal Number As Integer) As String
curency = Format(Number, "###,###,###,###,###,###,###,###,###")
End Function

Sub Zero
پنج شنبه 03 مرداد 1387, 08:14 صبح
با عرض شرمندگی خیلی برام جالبه که بدونم که اینجور فرمتبندی مخصوص کجاست؟
طبقه بندی کالا واستانداردها (Coding)

سوال شما دو مفهوم دارد
همین الان هم دارم از MaskedTextBox استفاده میکنم ولی خیلی باهاش مشکل دارم . اجازه بدید با یه مثال بگم مشکلم کجاست .
فرض کنید کاربر شماره 12.85.22.222.2 رو وارد کرده برای جستجو در بانک بر اساس این شماره دو حالت وجود داره :
اگه کاربر اعداد رو کامل وارد کرد از عملگر = باید برای جستجو استفاده کنم ولی اگه کامل وارد نکرد (مثلا 12.85.22) باید از Like استفاده کنم . برای تشخیص اینکه کاربر اعداد رو کامل وارد کرده یا نه از کد زیر استفاده کردم .:

If MaskedTextBox.MaskCompleted Then Do Somthing
اگه اعداد کامل وارد شده باشند که هیچ اما اگه کامل نباشند خروجی MaskedTextBox به صورت _.___.22.85.12 نمایش داده میشه که باعث میشه Like درست عمل نکنه .
از بس Flexibility این کنترل پایینه میخوام از TextBox استفاده کنم ورشته ورودی رو خودم فرمت بندی کنم.


از این تابع برای تبدیل اعداد پشت سر هم به واحد پولی استفده می شود
با انجام تغییرات هم این کد جواب نمیده

mehran20_200
پنج شنبه 03 مرداد 1387, 15:32 عصر
من هم همین مشکل را در ذخیره مبالغ مالی داشتم که اگر تصمیم داشتم آن را با فاصله ذخیره کنم برای محاسبات کار سخت می شد و اگر می خواستم آن را بدون فاصله ذخیره کنم برای هر بار نمایش آن باید آن را فرمت بندی می کردم

بنابراین گزینه دوم را بهتر دیدم و اطلاعات مالی را بدون هیچ کاراکتر اضافه ای ذخیره می کردم و موقع نمایش آن را سه حرف سه حرف جدا می کردم


شما باید یک کامپونت بنویسید که اعداد را به صورت فرمت بندی شده نمایش دهد اما به صورت عددی در بانک ذخیره کند
مثال
موقع نمایش:12.15.2
موقع ذخیره:12152

بعد موقع جستجو کاربر با وارد کردن اعداد ابتدایی می تواند سریعا کد را بیابد چون در اصل کد بودن فرمت خاصی ذخیره شده
جداسازی هم از سمت چپ شروع می شود که اگه کاربر خواست قسمت سمت راست را پر کند به اجبار باید کلیه قسمت های سمت چپ را پر کند
اما اگه خواست تنها قسمتی از کد سمت چپ را وارد کند (مثلا برای گروه کالا) اجباری نیست تا اخر آن را تکمیل کند
برای نمایش در جدول به صورت جداسازی شده هم باید یک تابع در sql server بنویسد که موقع گرفتن view عبارات عددی را قالب بندی کند.

امید وارم کاملا متوجه شده باشد و مشکلتان حل شده باشد
اگه برای نوشتن کامپوننت مشکلی داشتید بگویید تا نمونه بگذارم

Dariuosh
پنج شنبه 03 مرداد 1387, 18:38 عصر
اما اگه کامل نباشند خروجی MaskedTextBox به صورت _.___.22.85.12 نمایش داده میشه که باعث میشه Like درست عمل نکنه .
از بس Flexibility این کنترل پایینه میخوام از TextBox استفاده کنم ورشته ورودی رو خودم فرمت بندی کنم.



بابا مايکروسافت اينقدرم بچه بدي نيست:لبخندساده:


MaskedTextBox1.Text.TrimEnd(".", " ")

ameysams
پنج شنبه 03 مرداد 1387, 21:12 عصر
من خودم از این کد استفاده میکردم:


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Me.MaskedTextBox1.Mask = "0000000000"
Me.TextBox1.Text = MaskedTextBox1.Text
Me.MaskedTextBox1.Mask = "00,00,00,000,0"

End Sub

توضیح اینکه به محض اینکه کاربر روی دکمه کلیک کرد شما ماسک را از تغییر میدهید سپس
متن maskedtextboxرا درون یک textboxکپی می کنید حالا با این textbox هر کاری می توانید انجام دهید.

Dariuosh
پنج شنبه 03 مرداد 1387, 22:19 عصر
من خودم از این کد استفاده میکردم:


PrivateSub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Me.MaskedTextBox1.Mask = "0000000000"
Me.TextBox1.Text = MaskedTextBox1.Text
Me.MaskedTextBox1.Mask = "00,00,00,000,0"

EndSub

توضیح اینکه به محض اینکه کاربر روی دکمه کلیک کرد شما ماسک را از تغییر میدهید سپس
متن maskedtextboxرا درون یک textboxکپی می کنید حالا با این textbox هر کاری می توانید انجام دهید.
خدمت شما هم عارضم که ، برا اين کار هم مايکروسافت يه Property به نام TextMaskFormat تعبيه کرده که تمام حالاتي رو که شما احتياج دارين در اختيارتون ميزاره:لبخندساده:



MaskedTextBox1.TextMaskFormat = MaskFormat.ExcludePromptAndLiterals

Sub Zero
جمعه 04 مرداد 1387, 21:14 عصر
برا اين کار هم مايکروسافت يه Property به نام TextMaskFormat تعبيه کرده که تمام حالاتي رو که شما احتياج دارين در اختيارتون ميزاره
نه تمامی حالات . این حالات رو نداره :

ExcludePrompt

Exclude Literals