السلام عليكم ورحمة الله وبركاته
من فضلكم اخوانى الافاضل ,لدي برنامج فليكسي جاهز للعمل والتحزيم , لكن بقيت تعوقني مشكلة صغيرة واصبحت
كبيرة بالنسبة لي ,الا وهي عند فتح البرنامج والاتصال ب com و فتح البورت يعمل البرنامج بطريقة عادية وعند اغلاق البرنامج
او الجهاز باكمله واعادة فتح البرنامج من جديد لا يعمل البرنامج حتى اعيد الاتصال ب com و فتح البورت من جديد .
اخواني الكرام ,اريد اعدادات حفظ البورت مفتوح بعد اغلاق الفورم او البرنامج فى ملف رجيستري او ملف تاكست او اسهل طريقة ممكنة لحفظ الاعدادت.
و عليكم السلام و رحمة الله و بركاته
اليك طريقة لحفظ الاعدادت في مسجل النظام
بالاول انشأ مفاتيح بعدد القيم التي تريد حفظها في عقدة رئيسية(مجلد)
انا افضل الحفظ في عقدة CurrentUser
انشأ مديول وحط الاجراء التالي
PHP كود :
Dim VBArb As RegistryKey
Public Sub CreateKeyes()
If Registry.CurrentUser.OpenSubKey("VB4ArbKyes") Is Nothing Then
Dim VB4ArbKyes As RegistryKey = Registry.CurrentUser.CreateSubKey("VB4ArbKyes")
VBArb = VB4ArbKyes.CreateSubKey("Key1")
VBArb = VB4ArbKyes.CreateSubKey("Key2")
VBArb = VB4ArbKyes.CreateSubKey("Ket3")
VBArb = VB4ArbKyes.CreateSubKey("Key4")
End If
End Sub
استدعي هذا الاجراء في اول اقلاع البرنامج
بعد ذلك اخي الكريم حاول حفظ القيم في المفاتيح عبر الدالة التالية (في المديول)
PHP كود :
Public Sub SetValueKey(ByVal KeyNmae As String, ByVal Value As String)
If Not IsNothing(My.Computer.Registry.CurrentUser.OpenSubKey("VB4ArbKyes")) Then
My.Computer.Registry.CurrentUser.OpenSubKey("VB4ArbKyes", True).OpenSubKey(KeyNmae, True).SetValue(KeyNmae, Value)
End If
End Sub
و لحفظ القيمة بداخلها ما عليك الا استدعائها كالتالي في المكان الذي تريده
PHP كود :
SetValueKey("Key1", TextBox1.Text.Trim)
و لمعرفة قيمة اي مفتاح اليك هذه الدالة (في المديول)
PHP كود :
Public Function GetValueKey(ByVal SubKeyName As String) As String
Dim Value As String = ""
If Not IsNothing(My.Computer.Registry.CurrentUser.OpenSubKey("VB4ArbKyes")) Then
Value = My.Computer.Registry.CurrentUser.OpenSubKey("VB4ArbKyes").OpenSubKey(SubKeyName).GetValue(SubKeyName)
Return Value
Else
Return ""
End If
Return Value
End Function
و الاستدعاء بسيط وفق الشكل التالي
PHP كود :
TextBox1.Text = GetValueKey("Key1")
بالتوفيق اخي الكريم
بعد إذن أخي ابو ليلى يمكنه اختصار الموضوع من خلال الخاصية ApplicationSettings الموجودة ضمن خصائص الأداة ومنها PropertyBinding ينشء مسمى لأي خاصية يريد حفظها
شكرا لك اخي ابو ليلى على هده الاكواد و لكن بعد التجربة لم يحدت شيء , ولكن لدي سؤال
هل كل الاكواد اضعها في مديول واحد؟ وبالنسبة لحفظ القيم و استدعائها
هل يمكن ان اضعها فى الفورم لود
و بالنسبة لحفظ اعدادات السريال بورت لم اجد الطريقة لحفظها
و اما الاخ ممدوح فبالنسبة للخاصية ApplicationSettings الموجودة ضمن خصائص الأداة
فاني قمت بتجربتها فهي ناجحة فى حفظ الاعدادات لكن مشكلتي هي حفظ اعدادات السريال بورت و التي لم اجد لها الطريقة لحفظها
فمن كانت لديه طريقة لحفظها فليمددها لي او حتى عن طريق مثال تجريبي لاني بامس الحاجة اليه و شكرا لكم مجددا على مبادراتكم القيمة
ما هي البيانات التي تحتاج إلي أن تحفظها من SerialPort؟
حاول تكتب لي البيانات او الصفات بالترتيب
شكرا لك اخي silverlight سوف اشرح الطريقة حتى تصل لك الفكرة بطريقة مبسطة
اولا لدي combobox للبورت كوم مثلا com1,com2 الخ.... و button لعمل connect و الاتصال بالكوم وفتح البورت
اي بمعنى يصبح serialport1.open ما اريده هو ان يبقى serialport.Open مفتوح حتى و لو
بعد غلق البرنامج او جهاز الكمبيوتر اي بمعنى عند فتح البرنامج مرة اخرى لا اعيد الاتصال بالكوم من جديد اى اكمل عملي بطريقة عادية
و اما عن البيانات التي يجب علي حفظها هي serialport1.portname و (serialport1.open) مع ان هده الخاصية غير موجودة
في ادوات serialport
بشكل مبدئي فإن أقل مشاكلك هي حفظ PortName في ملف ثم استرجاع تلك البيانات
انا القيت نظرة سريعة علي SerialPort كلاس و هذا الكلاس به صفه اسمها IsOpen و منها تحدد هل Port مغلق ام مفتوح
أيضا معظم صفات الكلاس يمكن حفظها في ملف ومن هذه الصفات
PortName
IsOpen
StopBits
Parity
handshake
اخي silverlight طبقت الكلاس اللي عملتو لكنه لم يفي بالغرض اي عندما اغلق البرنامج واعادة فتحه
يلزمني الاتصال بالكوم من جديد
اخي هل يمكنك عمل مثال كامل مع شرح بعض الخطوات التى يلزم شرحها
ولك مني كل الشكر والاحترام
حاول تستخدم الكود التالي
لكن لتضع ف اعتبارك الكود بهذا الشكل سوف يجعل البورت مفتوحا الي مالا نهاية و قد تحتاج الي اغلاق الكمبيوتر او اغلاق البرنامج من
Task Manager
PHP كود :
Dim source As New System.Threading.CancellationTokenSource()
Dim token As System.Threading.CancellationToken = source.Token
Dim t = New Task(Sub()
While True
If token.IsCancellationRequested Then
Return
End If
' اكتب الكود اللازم لفتح البورت هنا
End While
End Sub, token)
t.RunSynchronously()