الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تنسيق الحقل

بدأه المدلهم في 22 نوفمبر 2008 · 25 رد · 1,972 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بســم الله الـرحمــن الرحيــم

السلام عليكــم ورحمـة الله وبركاتــه

أخواني: -

سؤالي كيف يمكن لي أن أضع الرقم في الحقل على هذه الصورة

0001

0002

المشكلة اللي صايرة أن الحاسوب يلغي الأصفار اتجاه الشمال!!!

علما بأن التعريف للحقل هي integer

مع الاخذ في الاعتبار أن العدد لما يوصل 10 يكون على هذه الصورة 0010 و هلم جرا.....

مع العلم أن الرقم هو تلقائي بمعادله

تحياتي لكم

#2

للرفع

#3

بســم الله الـرحمــن الرحيــم

السلام عليكــم ورحمـة الله وبركاتــه

أخي الحبيب إستعمل ال MaskedTextBox Control وضع الماسك الذي تريد .

بالتوفيق للجميع ..

سبحان الله وبحمده سبحان الله العظيم

لا تنسونا من صالح دعائكم ...

وفقكم الله وسدد خطاكم ...

#4
fouad_ كتب:
بســم الله الـرحمــن الرحيــم

السلام عليكــم ورحمـة الله وبركاتــه

أخي الحبيب إستعمل ال MaskedTextBox Control وضع الماسك الذي تريد .

بالتوفيق للجميع ..

وعليكــم السـلام ورحمة الله وبركاتـه..

أشكرك أخي الحبيب فؤاد و أسأل الله أن يزيدك علما و فهما بإذنه و كرمه

سأجرب و ارجع لك

#5

أخي فؤاد ما زال الحاسوب يحذف الأصفار التي تسبق الرقم رغم أني استخدمت Format

#6

بســم الله الـرحمــن الرحيــم

يعطيك ألف عافيه أخوي ...

ما رأيك ان تضع خصائص ال MaskedTextBox Control كالتالي ...

ال Mask بقيمة 0000 لإنه عبارة عن 4Digit

وال PromptChar بقيمة 0

وقل لي هل هذا يخدمك أم أنت بحاجة لحل آخر ...

لا تنسونا من صالح دعائكم

سبحان الله وبحمده سبحان الله العظيم

لا تنسونا من صالح دعائكم ...

وفقكم الله وسدد خطاكم ...

#7

مرحباً .

الـMaskedTextBox يساعدك لعرض هيئة معينة لـ( تاريخ, رقم هاتف, عدد صحيح, الخ... ) أو هيئة إختيارية

و المشكلة التي تواجهها, يمكن حلها بالتالي :

إنشاء An Optional TextBox :

Public Class Form1

Private Sub Form1_Load(ByVal Sender As Object, ByVal E As System.EventArgs) Handles MyBase.Load

Dim MTB As New MyTextBox

MTB.MaxLength = 4

MTB.Size = New Size(100, MTB.Height)

Controls.Add(MTB)

End Sub

End Class

Public Class MyTextBox

Inherits TextBox

Private MEMNUM As String = "0000"

Protected Overrides Sub OnKeyPress(ByVal E As System.Windows.Forms.KeyPressEventArgs)

CheckValue()

If Char.IsDigit(E.KeyChar) Then

If Not Text.StartsWith("0") Then

Text = Text.Substring(0, 3)

Text = E.KeyChar & Text

Else

Text &= E.KeyChar

End If

End If

E.Handled = True

Dim OldText As Integer = Integer.Parse(Text)

Text = OldText.ToString("0000")

MyBase.OnKeyPress(E)

End Sub

Private Sub CheckValue()

If Text = String.Empty Then

Text = MEMNUM

End If

End Sub

________________________________________

Best Regards,

BasharVS.

The important thing is not so much

that every child should be taught,

as that every child should be given the wish to learn.

#8

الله يجزيك كل خير بشار

أنا استخدم textbox من data sourse و سحبته على الفورم....

بينما الكود يفتح textbox جديد....و قد حاولت أن أجعل قيمته داخل textbox من data sourse و لكن ما رضي

الحل حقيقة إبداعي و ادى الغرض المطلوب و اريدك تكمل الجميل - أطال الله عمرك-

#9

أخي بشار أنا الكود إلي استخدمه في عملية ادراج الرقم داخل التكس بوكس التالي

Dim V As Integer

Dim SQL As String = "SELECT isnull( MAX(st_no2),0) as st_no2 FROM stu"

Dim CMD As SqlClient.SqlCommand = New SqlClient.SqlCommand

With CMD

.CommandType = CommandType.Text

.Connection = SqlConnection1

If SqlConnection1.State = ConnectionState.Open Then SqlConnection1.Close()

SqlConnection1.Open()

.CommandText = SQL

V = .ExecuteScalar()

End With

Me.St_no2MaskedTextBox.Text = Val(V) + 1

SqlConnection1.Close()

إذا ممكن و ما عليك أمر تعدل على الكود و أكون ممنون لك كثير

#10

الله يخليك, خير الله .

أخي الكريم ماعليك سوى نسخ الكود الخاص بـ( MyTextBox ) ومن ثم إستخدام إحدا العمليات ( Debug, Build ) ليتم بناء ذلك الصندوق النصي,

بعد ذلك ستجد الـ( MyTextBox ) في قائمة الأدوات ( في قمة الحاوية ) ماعليك سوى إستبدال الصناديق النصية الموجودة في الـ Form ب ( MyTexBox ) أو بمعنى أخر: حذف صناديق النص القديمة وإضافة الصناديق ( MyTextBox ) عوضأً عنها .

أو يمكنك بشكل أسهل أو إختصاري أن :

من متصفح الحلول والمعروف بـ ( Solution Explorer ) هناك 5 أزرار, من جهة اليمين الأول ( خصائص أو Properties ) >

التالي له ( عرض جميع الملفات أو Show All Files ) إذا ضغطه ستظهر لك جميع الملفات الخاصة بمشروعك الحالي, ستجد أن بعض الاسماء مرفقة بإشارة موجبة ( + ) إذا ضغط عليها ستعرض لك توابع الملف التابع لهذه الإشارة, بالنسبة لل Forms, User Controls هناك ملف ينتهي بـ .Desginer.VB, إذا ضغطه سيفتح داخل محرر الكود, الأن ماعلينا سوى إستبدال إسم الفضاء أو المعرف بـ( Name Space ) وهو ( System.Windows.Forms.TextBox ) بالنسبة لل( TextBox ), علينا إستبدال ذلك الإسم ( إسم الفضاء ) ب( MyTextBox ), بعد ذلك عليك إغلاق المحرر الكود وفتح المصمم ستجد أن الشكل لم يختلف لكن عملية الإدخال ستختلف .

ملاحظة : ( بكلا الأحوال عليك نسخ الكود الخاص ب( MyTextBox ) إلى الـ( Form ) أو إنشاء صف جديد ( Class ) له وبعد ذلك بناء المشروع بمافيه من صفوف و وحدات بإحدا العمليات ( Debug, Build ) .

إذا واجهت أي مشكلة في فهم المذكور, رجاءً إسأل ماتشاء .

BasharVS

The important thing is not so much

that every child should be taught,

as that every child should be given the wish to learn.

#11

الله يجزيك الجنة .. آمين

طبقت كل المكتوب أعلاه و غيرت System.Windows.Forms.TextBox بالنسبة للحقل إلى MyTextBox مع التأكيد من وجود class داخل الفورم و عملت Built للمشروع ...

النتيجة يظهر الرقم المجرد مثلا( 1 ) و لما بغيت اتأكد حطيت المؤشر على الخانة و ضغطت باك سبيس ظهر العدد (0001 ) و لما شاليت المؤشر رجع العدد مثل ما كان( 1) يعني الكود شغال بس فيه شي ناقص في الفورم!!!!!! ليش text box يخفي التنسيق ؟؟؟ هذه هي المشكلة

#12

تسلم, الله يخليك .

بصراحة, معك كل الحق :$ لم الاحظ تلك المشكلة, أمل أني حللتها .

الأن ماعليك سوى استبدال الكود القديم بالتالي :

Public Class MyTextBox

Inherits TextBox

Private MEMNUM As String = "0000"

Public Sub New()

Text = MEMNUM

End Sub

Protected Overrides Sub OnKeyPress(ByVal E As System.Windows.Forms.KeyPressEventArgs)

CheckValue()

If Char.IsDigit(E.KeyChar) Then

If SelectionLength > 0 Then

SelectedText = E.KeyChar

Else

If Not Text.StartsWith("0") Then

Text = Text.Substring(0, 3)

Text = E.KeyChar & Text

Else

Text &= E.KeyChar

End If

End If

ElseIf E.KeyChar = Chr(8) Then

Text = Text.Substring(0, 3)

Text = "0" & Text

End If

E.Handled = True

Dim OldText As Integer = Integer.Parse(Text)

Text = OldText.ToString("0000")

MyBase.OnKeyPress(E)

End Sub

Private Sub CheckValue()

If Text = String.Empty Then

Text = MEMNUM

End If

End Sub

End Class

______________________________________

تحياتي ( بالتوفيق :) )

BasharVS .

The important thing is not so much

that every child should be taught,

as that every child should be given the wish to learn.

#13

السلام عليكــم ورحمـة الله وبركاتــه أخي بشار...

اشكرك من اعماق قلبي...

مازال الحال على حاله !!!

و النتيحة في المرفق

حيث ان السيد 1 لم يجد له رفيقا من الأصفار التي أصرننا على مرفقتها له فاصبح وحيدا يشكو السأم و الملل

و كأني أره ينظر إليك نظرة متفائل بأن يجد عنك المخلص له من ملله و سأمه لتدخل على قلبه الفرحة و السرور و الغبطة و الحبور...

تحياتي لك

post-162865-1229340685_thumb.jpg

#14

مرحباً أخي الكريم .

السبب أنك تحاول تغييره برمجياً >>> صحيح ؟

حسناً, إليك الصف ( أعتذر عن قصر مراجعة هذه الامور ) .

الأن يمكنك تحديد الهيئة التي تريد عرضها بـصندوق النص, مثال Format = "0000" أو Format = "0000000000000000000"

علماً أنك قادر على تغيرها من المصمم ( Designer ) أو برمجياً

Public Class MyTextBox

Inherits TextBox

Private MEMNUM As String = "0000"

Private UserInput As Boolean = False

Public Sub New()

Text = MEMNUM

End Sub

Public Property Format() As String

Get

Return MEMNUM

End Get

Set(ByVal Value As String)

MEMNUM = value

End Set

End Property

Protected Overrides Sub OnKeyPress(ByVal E As System.Windows.Forms.KeyPressEventArgs)

CheckValue()

If Char.IsDigit(E.KeyChar) Then

If SelectionLength > 0 Then

SelectedText = E.KeyChar

Else

If Not Text.StartsWith("0") Then

Text = Text.Substring(0, (MEMNUM.Length - 1))

Text = E.KeyChar & Text

Else

Text &= E.KeyChar

End If

End If

ElseIf E.KeyChar = Chr(8) Then

Text = Text.Substring(0, (MEMNUM.Length - 1))

Text = "0" & Text

End If

E.Handled = True

Dim OldValue As Integer = Integer.Parse(Text)

Text = OldValue.ToString(MEMNUM)

UserInput = True

MyBase.OnKeyPress(E)

End Sub

Protected Overrides Sub OnTextChanged(ByVal e As System.EventArgs)

CheckValue()

If Not UserInput Then

Text = Integer.Parse(Text).ToString(MEMNUM)

End If

UserInput = False

MyBase.OnTextChanged(e)

End Sub

Private Sub CheckValue()

If Text = String.Empty Then

Text = MEMNUM

End If

End Sub

End Class

بالمناسبة ( تعليقك على أخونا ( 1 ) كان جميل ) :) .

BasharVS.

تم تعديل هذه المشاركة بواسطة Bashar Rabat في 15 ديسمبر 2008 في 20:52

The important thing is not so much

that every child should be taught,

as that every child should be given the wish to learn.

#15

الله يجزيك كل الخير

الأمور ضبطت على التمام...

وأسأل الله أن ينفع بعلمك كل محتاج إليه و يجعل ذلك في موازين حسناتك

Bashar Rabat كتب:

بالمناسبة ( تعليقك على أخونا ( 1 ) كان جميل ) :) .

BasharVS.

أبشرك أخونا (1) صار من اسعد الناس حظا

:lol:

#16

السلام عليكــم ورحمـة الله وبركاتــه

أخي بشار أهديك كل الأحترام و التقدير لشخصك الكريم و على وقفتك المشرفة معي و مساعدتي في حل الإشكالية التي تعرضت لها في في عملية أظهار التنسيق 0001 على الفورم حيث أنه تم العمل بسلاسة

و لكن تواجهني مشكلة أخرى و هي عند تخزين الرقم على قاعدة البيانات SQL تظهر 1 و حتى لما استدعي الرقم عن طريق Data Grid تظهر 1

و بذلك يكون الأمر كما قال صاحب المثل "كأنك يا أبوزيد ما غزيت"

حيث أن الرقم أعلاه يطلب ليكون رقما لطالب و عملية استدعائه عن طريق الربورت أو view يجب أن يأخذ نفس التنسيق و أنت أدرى بهذه الأحوال

فهل أجد عندك ما يروي الضمأ

سقاك الله من حوض كرمه

تم تعديل هذه المشاركة بواسطة المدلهم في 20 ديسمبر 2008 في 09:05

#17

مرحباً أخي الكريم .

بالنسبة لقاعدة بيانات كالـ SQL أو Access عليك القيام بإحدا الحلول التالية :

لعرض التنسيق وحفظه :

تغير نوع العمود من ( Decimal, Int, Numeric, Etc.. ? ) الى ( Nvarchar(4) )

إذا لم تكن تريد تغير نوع العمود :

يمكنك استخدام Sub لحل هذه المشكلة :

مثال : على فرض أن العمود الثاني هو العمود الخاص برقم الطلاب .

يتم التعامل مع الـ Dataset التابعة لـ DataBase لقد أستخدمت في المثال التالي SQL DB تدعى MyBase والـ Dataset تدعى MyBaseDataset1 ,والتعامل قائم مع الجدولTable1 :

Public Class Form1

Private Sub CheckFormat(ByVal DataSource As Object)

For I As Integer = 0 To DataSource.Rows.Count - 1

DataSource.Rows(I).Item(1) = Double.Parse(DataSource.Rows(I).Item(1)).ToString("0000")

Next I

End Sub

Private Sub Form1_Load(ByVal Sender As System.Object, ByVal E As System.EventArgs) Handles MyBase.Load

Me.Table1TableAdapter.Fill(Me.MyBaseDataSet1.Table1)

End Sub

Private Sub Button1_Click(ByVal Sender As System.Object, ByVal E As System.EventArgs) Handles Button1.Click

CheckFormat(Me.MyBaseDataSet1.Table1)

End Sub

End Class

تحياتي BasharVS .

The important thing is not so much

that every child should be taught,

as that every child should be given the wish to learn.

#18

Dim sql1 As String = "

SELECT * FROM stu where spon like '" & ComboBox2.Text & "'"

Dim ds1 As New DataSet

Dim Adp1 As New SqlClient.SqlDataAdapter(sql1, SqlConnection1)

On Error Resume Next

If Me.RadioButton1.Checked Then

ds1.Clear()

Adp1.Fill(ds1, "stu")

Me.DataGridView1.DataSource = ds1

Me.DataGridView1.DataMember = "stu"

Me.DataGridView1.Refresh()

End If

Adp1.Dispose()

SqlConnection1.Close()

End Sub

أخي بشار أنا استخدم هذا الكود في عملية ملأ DataGridViewer

و العملية إلي حضرتك تكلمت عنها هي لملأها تلقائي بدون شروط

حاولت اضيف كود على اساس تؤخذ الفورمات إلى انت عملته باضافة

CheckFormat(ds1)

بعد ما يعمل fill لكن ما رضي

وفقك الله لما يحب و يرضى

تم تعديل هذه المشاركة بواسطة المدلهم في 23 ديسمبر 2008 في 13:13

#19

مرحباً أخي الكريم .

ماهو موقع العمود ( Student ID ) من الأعمدة الاخرى ؟

The important thing is not so much

that every child should be taught,

as that every child should be given the wish to learn.

#20
Bashar Rabat كتب:
مرحباً أخي الكريم .

ماهو موقع العمود ( Student ID ) من الأعمدة الاخرى ؟

موقعه الثالث و قد قمت بتغيير نوعه إلى Nvarchar كما طلبت لتفادي المشكلة

شاكرا و مثمنا تعاونك و تواصلك معي أخي الحبيب

#21

مرحباً أخي الكريم .

صراحةً لايحبذ تغير متغير عددي إلى نصي, لأنه سيحجز حجم أكبر في الذاكرة وفي قاعدة البيانات, اعتذر لكتابتي اياه :( .

إذا كنت تتعامل مع DataGridView Control فيمكنك استخدام الحل الثاني كالتالي :

Dim SQL1 As String = "

SELECT * FROM stu where spon like '" & ComboBox2.Text & "'"

Dim DS1 As New DataSet

Dim ADP1 As New SqlClient.SqlDataAdapter(SQL1, SQLConnection1)

On Error Resume Next

If Me.RadioButton1.Checked Then

ADP1.Fill(DS1, "stu")

Me.DataGridView1.DataSource = DS1

Me.DataGridView1.DataMember = "stu"

Me.DataGridView1.Refresh()

End If

ADP1.Dispose()

CheckFormat()

SqlConnection1.Close()

End Sub

Private Sub CheckFormat()

For I As Integer = 0 To DS.Tables(0).Rows.Count - 1

DS.Tables(0).Rows(I).Item(2) = Long.Parse(DSTables(0).Rows(I).Item(2)).ToString("0000")

Next I

End Sub

تحياتي BasharVS .

تم تعديل هذه المشاركة بواسطة Bashar Rabat في 25 ديسمبر 2008 في 23:43

The important thing is not so much

that every child should be taught,

as that every child should be given the wish to learn.

#22

أي مشكلة ؟ :(

The important thing is not so much

that every child should be taught,

as that every child should be given the wish to learn.

#23

عذرا أخي بشار... لم أتمكن من الدخول إلى النت

مازال الحال كما هو بالنسبة للعرض في datagridviewer

شاكرا أياك حسن التجاوب

#24

حسناً, سأقوم بإنشاء مشروع شبيه بالمشروع خاصتك, ومن ثم سأقوم برفعه الى الموقع .

أرجو منك الصبر, بينما انهي كتابته ( بنائه ) .

The important thing is not so much

that every child should be taught,

as that every child should be given the wish to learn.

#25

لك خالص الشكر .... لا حرمنا الله من علمك

و أسأل الله أن يفيد بك و يعلمك من علمه الواسع

مواضيع مشابهة