بصريا إزالة / زر إغلاق تعطيل من شريط العنوان. NET
سؤال
وأنا لإزالة أو تعطيل زر الإغلاق من وجهة نظرنا تطبيق MDI VB. NET 2005. لا توجد خصائص الأم في نموذج التي تسمح لك الرمادي من زر الإغلاق وبالتالي فإن المستخدم لا يمكن إغلاقه، وأنا لا أتذكر رؤية أي شيء في فئة النموذج من شأنها أن تسمح لي أن أفعل ذلك.
هل هناك ربما مكالمة API أو بعض الممتلكات السحرية لمجموعة أو وظيفة لدعوة في. NET 2005 أو في وقت لاحق للقيام بذلك؟
و~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ومزيد من المعلومات:
وأنا بحاجة للحفاظ على التصغير / التكبير وظيفة
وأنا بحاجة للحفاظ على شريط العنوان الأصلي لأساليب رسم النموذج بالفعل معقدة للغاية.
المحلول
واستنادا إلى أحدث المعلومات قمت بإضافتها إلى سؤالك، انتقل إلى نهاية جوابي.
وهذا هو ما تحتاج إلى مجموعة إلى false: <لأ href = "http://msdn.microsoft.com/en-us/library/system.windows.forms.form.controlbox.aspx" يختلط = "noreferrer "> Form.ControlBox الملكية
ولكن، ستفقد تصغير وتكبير أزرار فضلا عن القائمة التطبيق (أعلى اليسار).
وكبديل لذلك، عند_الإغلاق تجاوز ومجموعة إلغاء إلى true (C # المثال):
protected override void OnFormClosing(FormClosingEventArgs e)
{
if (e.CloseReason != CloseReason.WindowsShutDown && e.CloseReason != CloseReason.ApplicationExitCall)
{
e.Cancel = true;
}
base.OnFormClosing(e);
}
إذا لم يكن أي من هذه الحلول مقبولة، ويجب عليك تعطيل مجرد زر الإغلاق، يمكنك الذهاب إلى pinvoke / createparams في المسار:
<وأ href = "https://web.archive.org/web/20091124101754/http://riteshk.blogspot.com/2008/12/how-to-disable-close-button-from-window_19. أتش تي أم أل "يختلط =" noreferrer "> كيفية تعطيل زر الإغلاق من شكل نافذة باستخدام تطبيق. NET
وهذه هي النسخة VB من التعليمات البرمجية JDM ل:
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
نصائح أخرى
ويمكنك تعطيل زر الإغلاق وعنصر القائمة وثيق في قائمة النظام عن طريق تغيير "على غرار الطراز" من النافذة. قم بإضافة التعليمات البرمجية التالية إلى النموذج الخاص بك:
const int CS_NOCLOSE = 0x200;
protected override CreateParams CreateParams {
get {
CreateParams cp = base.CreateParams;
cp.ClassStyle |= CS_NOCLOSE;
return cp;
}
}
وهذا لن تتوقف فقط على نافذة من الحصول على مغلقة، ولكنها ستكون الرمادي فعلا الزر. فمن C # ولكن أعتقد أنه يجب أن يكون من السهل ترجمتها إلى VB.
وهنا هو طريقة بسيطة لإزالة زر الإغلاق:
1. حدد نموذج لل
2. الآن انتقل إلى Properties
.
3. البحث ControlBox
وتغيير القيمة إلى False
.
وهذا سيزيل جميع أزرار التحكم <م> (على سبيل المثال. تصغير أو تكبير، خروج) م> وأيضا رمز أيضا التي هي في الزاوية اليسرى للأمام العنوان.
ويجب أن تكون قادرة على تجاوز الحدث عند_الإغلاق النموذج. وهذا أمر شائع عندما يكون يقلل الطلب إلى علبة النظام عندما "مغلق".
وعند الضغط على مربع X في النموذج.
ويتم Form1_Closing
أولا، ثم يتم Form1_Closed
.
ووe.Cancel = True
في Form1_Closing
- يمنع Form1_Closed
من يطلق عليه، وترك النموذج الخاص بك لا تزال نشطة
ومنع لإغلاق النموذج، ولكن إخفائه:
Private Sub Form1_Closing(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
Me.WindowState = FormWindowState.Minimized
Me.Visible=false
e.Cancel = True
End Sub
ويمكنك تعيين الخاصية ControlBox
إلى False
، ولكن شريط العنوان كله أن يكون قد انتهى ولكن العنوان نفسه ...
وماذا jmweb قال هنا هو OK كذلك. على زر X قريب لا تذهب إذا قمت بإلغاء الحدث على شكل الإغلاق. لكنه لا يفعل ذلك، تحتاج للافراج عن العمليات احتياجات النموذج ومن ثم إغلاق النموذج.
Me.Dispose()
Me.Close()
وهذا عمل بالنسبة لي باستخدام قطاع القائمة.
واختر (أو النقر) النموذج نفسه
انقر على الأحداث في إطار الخصائص (قليلا البرق رمز الترباس).
ابحث عن Form.Closing
وفوقه مزدوجة.
ثم اكتب: e.cancel=true
صنع نموذج دون شريط العناوين في Visual Basic.
والذهاب إلى Form Properties
وتعيين كل ControlBox
وShowIcon
إلى false.
وبعد ذلك، واضحة على عن كما نص من الممتلكات text
للنموذج.
ويذهب إلى خصائص وحدد من طراز بالملل لأن أيا
ما عليك سوى اختيار الشكل المطلوب وفي قسم خصائص، تعيين مربع_عنصر_التحكم = كاذبة التي عملت فقط بالنسبة لي:)
Private Sub Form1_Closing(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
Beep()
e.Cancel = True
End Sub