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

كيف يمكن التحكم في شكل الاحرف المدخلة بمربع النص

مغلق
بدأه Ahmed Wahb في 10 يوليو 2007 · 11 رد · 969 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

اخواني الاعزاء

لدي استفسار بخصوص التأكد من الاحرف المدخلة بمربع النص Textbox

وهو مثلاًُ اذا قام المستخدم وكتب كلمة ( أحمد ) كيف يمكن تحويل ال أ الي ا بدون همزه

وذالك لتسهيل عملية البحث بقاعدة البيانات حسب البيانات المدخلة ويتم تطبيق هذة الطريقة علي الاحرف التالية :

( أ > ا ) - ( ة > ه ) - ( ي > ى ) - ( ة > ه )

يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل

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

#2

اخواني الاعزاء قمت بتجربة بعض الافكار ووصلت للحل الحمد لله وهو فرضاً ان لديك TextBox1 وقمت بكتابة النص فية

وتريد ان تقوم بفلترة هذا النص في TextBox2 وكان هذا هو الكود :

	Dim xx As Integer = 0

		For xx = 1 To TextBox1.TextLength

			If vb.Mid(TextBox1.Text, xx, 1) = "أ" Then
				Txt1.Text += "ا"
			Else
				If vb.Mid(TextBox1.Text, xx, 1) = "ة" Then
					Txt1.Text += "ه"
				Else
					If vb.Mid(TextBox1.Text, xx, 1) = "ى" Then
						Txt1.Text += "ي"
					Else
						Txt1.Text += vb.Mid(TextBox1.Text, xx, 1)
					End If
				End If
			End If
		Next

وهذا لافادة الجميع او من يبحثون عن الموضوع

تحياتي لكم جميعاً

يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل

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

#3

الطريقة التي كتبتها قد تكون سيئة في حالة ما كان النص طويلا

الطريقة المثلى في هذه الحالة هي ان تعالج الحرف لحظة كتابته يعني عندما يكتب الشخص "أ" تكتب بدلها "ا" و هكذا و هذا تفاديا لاستهلاك الذاكرة عند استعمال ال Loop

#4

طيب ازاي اخلية يقوم بتغيير الحرف اثناء الكتابة

هل يوجد طريقة معينة من غير ما تبطئ عملية الكتابة ؟

يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل

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

#5

استخدم الـ Regular Expression وهناك سلسلة دروس مطولة عملها الاستاذ الشهاب الحارق ، استخدم محرك البحث للحصول عليها .

تحياتي

#6

اعتقد ان افضل طريقة هي في حدث keypress كما يلي

  If e.KeyChar = "أ" Or e.KeyChar = "إ" Or e.KeyChar = "آ" Then

			e.KeyChar = CChar("ا")

		ElseIf e.KeyChar = "ة" Then
			e.KeyChar = CChar("ه")


		End If

كذلك يمكنك استخدام الدالة Replace بدل من عمل loop

	x = Replace(text1.text, "إ", "ا")

واذا كنت تتعامل مع SQL server توجد طرق افضل بكثير من ذلك (ابحث الهمزات)

#7

اخي طارق شكراً علي مشاركتك وعلي توضيح بعض الامور لي

بالنسبة للكود الخاص ب ابدال الحرف اثناء الكتابة يوجد مشكلة في كلمة CChar

الفيجوال 2003 لم يتعرف عليها فهل لابد من تعريف شئ الاول

يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل

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

#8

اعتقد انها Char وليست CChar

مواضيع متنوعة

#9

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

Property 'KeyChar' is 'ReadOnly'

يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل

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

#10

عذرا ان سببت لكم بعض الارباك فانا جربت هذا الكود في vs2005 وهو يعمل بشكل 100% وبالنسبة CChar فهي تحويل الى حرف وهي اقتراح من VS2005 بعد ان وضعتها

e.Keychar="ا"

فاعطى عليها خطأ وكان الاقتراح باستبدال الحرف ب Cchar .

كذلك لا اعتقد انها للقراءة فقط فلا بد من بديل حتى في vb6 كان يوجد keyascii ويمكن تغييرها .

#11

السلام عليكم

مثل هذه المشاكل أفضل ما يحلُها هو الـ Regex شاهد المثال التالي:

Imports System.Text.RegularExpressions
Imports System.Collections.Specialized

Public Class ArabicWords

	' متغيرات لتحويل همزة الألف إلى ألف مجردة
	' وتحويل الياء إلى ألف مقصورة
	' وتحويل التاء المربوطة إلى هاء مربوطة
	'وظيفة مشتركة للبحث عن الياء لإستبدالها بالألف المقصورة
	'وكذلك البحث عن التاء المربوطة و إستبدالها بالهاء المربوطة
	'و إن كانت التاء المربوطة لا تأتي إلا في أخر الكلمة لكن من باب التحرصِ فقط
	'تم البحث عنها بشرط أن تكون أخر الكلمة  ,,, قد تكون تحصيل حاصل
	'<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
	Public Shared Function RemoveArabicDiacriticalMarks(ByVal FullName As String) As String
		Try
			Dim LstDicRegex As New ListDictionary
			LstDicRegex.Clear()
			LstDicRegex.Add("[(إ|أ|آ)]", "ا")
			LstDicRegex.Add("\B[ي]\b", "ى")
			LstDicRegex.Add("[ة]", "ه")
			LstDicRegex.Add("[ؤ]", "و")
			LstDicRegex.Add("[ئ]\b", "ى")
			Dim RX As New Regex("")
			For Each de As DictionaryEntry In LstDicRegex
				RX = New Regex(de.Key.ToString)
				FullName = RX.Replace(FullName, de.Value.ToString)
			Next
			Return FullName
		Catch ex As Exception
			Throw ex
		End Try
	End Function

	Private Sub btnRemoveDiacriticalMarks_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRemoveDiacriticalMarks.Click
		Try
			Dim VFullName As String
			VFullName = RemoveArabicDiacriticalMarks(Me.txtFullName.Text)
			lblResultFullName.Text = VFullName
		Catch ex As Exception
			MsgBox(ex.Message)
		End Try
	End Sub
End Class

بالتوفيق إن شاء الله.

ArabicDiacriticalMarks.rar

تم تعديل هذه المشاركة بواسطة الشهاب الحارق في 15 يوليو 2007 في 01:09

في المثال يتضح المقال

#12

بارك الله فيكم جميعاً وجاري تطبيق الموضوع

يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل

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

هذا الموضوع مغلق.

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…