منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
[سؤال] [ تمّ الحل ] : إلغاء خاصّية الخروج من ال X - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182)
+--- قسم : قسم اسئلة VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=183)
+--- الموضوع : [سؤال] [ تمّ الحل ] : إلغاء خاصّية الخروج من ال X (/showthread.php?tid=22845)



[ تمّ الحل ] : إلغاء خاصّية الخروج من ال X - عبد العزيز البسكري - 08-12-17

السّلام عليكم و رحمة الله و بركاته
إخواني الأكارم أرجو أن تكونوا بتمام الصحّة و العافية إن شاء الله
لو تكرّمتم بالمساعدة لتخطّي هذه الإشكالية ..
ما أريده هو تعطيل خاصيّة الخروج من الفورم بواسطة ال X .. أو تعطيله
طبعا لا أريد تغيير الخاصية FormBorder ..... إلى None
حاولت بهذا الكود الأوّل .. فعلا يقوم بتعطيل الزر X ..لكن بمجرّد إضافة Theme للمشروع .. يصبح بدون مفعول
كود :
Imports System.Runtime.InteropServices  ' Disable X
Public Class Form1
   ' Disable X
   <DllImport("user32.dll")> _
   Private Shared Function GetSystemMenu(ByVal hwnd As IntPtr, ByVal bRevert As Integer) As IntPtr
   End Function
   <DllImport("user32.dll")> _
   Private Shared Function GetMenuItemCount(ByVal hMenu As IntPtr) As Integer
   End Function
   <DllImport("user32.dll")> _
   Private Shared Function RemoveMenu(ByVal hMenu As IntPtr, ByVal nPosition As Integer, ByVal wFlags As Integer) As Integer
   End Function
   <DllImport("user32.dll")> _
   Private Shared Function DrawMenuBar(ByVal hwnd As IntPtr) As Integer
   End Function
   Private Const MF_BYPOSITION As Integer = &H400&
   Private Const MF_REMOVE As Integer = &H1000&
   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       Dim hSysMenu As IntPtr = GetSystemMenu(Me.Handle, False)
       If hSysMenu Then
           Dim subMenusCount As Integer = GetMenuItemCount(hSysMenu)
           RemoveMenu(hSysMenu, subMenusCount - 1, MF_BYPOSITION Or MF_REMOVE)
           DrawMenuBar(Me.Handle)
       Else
           MsgBox("Cann't find the system menu.", MsgBoxStyle.Exclamation)
       End If
   End Sub
End Class

حاولت بهذا الكود الثاني .. و أيضا يشتغل بطريقة ممتازة .. لكن بدون Theme .. و بمجرّد إضافة Theme للمشروع يصبح عديم المفعول ..
كود :
Public Class Form1
   Private Const CP_NOCLOSE_BUTTON As Integer = &H200
   Protected Overloads Overrides ReadOnly Property CreateParams() As CreateParams
       Get
           Dim myCp As CreateParams = MyBase.CreateParams
           myCp.ClassStyle = myCp.ClassStyle Or CP_NOCLOSE_BUTTON
           Return myCp
       End Get
   End Property
End Class

الثيمات التي أقصدها هي IrisSkin4 ..
هل هناك إخواني الأكارم طريقة أخرى مجرّبة لتعطيل هذا ال X .. بوجود ثيمات للمشروع
بارك الله فيكم و لكم مقدمًا
تحياتي



RE: إلغاء خاصّية الخروج من ال X - طالب برمجة - 08-12-17

هذه طريقة على افتراض أن زر إغلاق الفورم هو Button2
PHP كود :
Private Sub Button2_Click(ByVal sender As System.ObjectByVal e As System.EventArgsHandles Button2.Click
    Me
.Dispose()
End Sub

Private Sub Form2_FormClosing(ByVal sender As ObjectByVal e As FormClosingEventArgsHandles Me.FormClosing
    e
.Cancel True
End Sub 



RE: إلغاء خاصّية الخروج من ال X - عبد العزيز البسكري - 08-12-17

السّلام عليكم و رحمة الله و بركاته
تمام التّمام أخي الكريم " طالب برمجة "
أدعو الله أن يزيدك من علمه و فضله و يرزقك من حيث لا تحتسب إن شاء الله
جرّبت هذا السّطر قبل كتابة الموضوع لكن الخطأ أنّي كنت أضع عبارة Me.Close بدلاُ من [b]Me.Dispose فلم أتمكن من الخروج نهائيا من الفورم[/b]
أكرّر شكري و تقديري و امتناني أخي الكريم
تحياتي