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

سؤال ... كيف الغي عمل X من الفورم

بدأه mak_hourani في 10 سبتمبر 2009 · 11 رد · 1,390 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

مرحبا شباب سؤال صغير ...

كيف الغي عمل ال X الموجود على title bar

الغيها ما اخليها تطلع من البرنامج

تم تعديل هذه المشاركة بواسطة mak_hourani في 10 سبتمبر 2009 في 02:43

#2

الطريقة السهلة هي الإشتراك في الحدث FormClosing للنموذج ثم تحديد الخاصية e.Cancel على True. هذه الطريقة ستمنع غلق النموذج حتى بطريقة برمجية يعني الدالة Close. يعني يجب أن تضع شرطا لقبول أو رفض غلق النموذج.

الطريقة الصعبة باستعمال دوال API لإلغاء تنشيط الزر X على شريط العنوان و قائمة النظام على النموذج. إذا كانت هي ضالتك سأنشر لك الحل.

تحياتي...

#3

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

هذا الكود يقوم بإلغاء تفعيل Disable لزر الإغلاق

Imports System.Runtime.InteropServices

Public Class Form1

	<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

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#4

يا سلام عليك يا شبح , فنان :clapping:

طيب كيف بقدر اشيلها بالمرة , الكود السابق فقط يعمل لها Disable

و أعمل شكل الفورم كأنه User Control من غير اطار ازرق حتى :nose_patch:

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

<EMBED src=http://www.abdelghafar.com/images/banners/bm2.swf width=486 height=60 type=application/x-shockwave-flash EMBED < menu="false" loop="true" quality="high">

#5

السلام عليكم

عشان تلغى Close box من الظهور اساسا , يجب ان تجعل الخاصية Control Box للفورم False , وتجعل الخاصية text للفورم فارغة

وكدا هيشيل ال Title bar كله

لكن ما شوفتش طريقة تلغى ال close button بس

Hany Saad Mostafa

ITI (Information Technology Institute) l

SD Dept.-Teaching Assistant

---

اسألكم الدعاء بظهر الغيب

#6
hanysaad كتب:
السلام عليكم

عشان تلغى Close box من الظهور اساسا , يجب ان تجعل الخاصية Control Box للفورم False , وتجعل الخاصية text للفورم فارغة

وكدا هيشيل ال Title bar كله

لكن ما شوفتش طريقة تلغى ال close button بس

فعلا كما قال هانى ,, لا توجد طريقة على حد علمى تحذف زر الإغلاق نهائيا

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#7

خلص شكرا على المعلومة ;)

<EMBED src=http://www.abdelghafar.com/images/banners/bm2.swf width=486 height=60 type=application/x-shockwave-flash EMBED < menu="false" loop="true" quality="high">

#8

مرحباً اخواني الكرام،

هناك أيضاً طريقة أبسط, ولاتحتاج منك استخدام اي من الـ( APIs ) ولكنها لاتخفي رز الـ( X ) من شريط اللافتة بل تجعله عاطل :

 

    Protected Overrides ReadOnly Property CreateParams[color= #009900;]([color= #009900;]) [color= #b1b100;]As [color= #990000;]System[color= #339933;].Windows[color= #339933;].Forms[color= #339933;].CreateParams

        Get

            Dim Param [color= #b1b100;]As CreateParams [color= #339933;]= MyBase[color= #339933;].CreateParams

            Param[color= #339933;].ClassStyle [color= #339933;]+= [color= #cc66cc;]512

            [color= #b1b100;]Return Param

        [color= #990000;]End Get

    [color= #990000;]End Property

بالتوفيق :) .

تم تعديل هذه المشاركة بواسطة Bashar Rabat في 10 سبتمبر 2009 في 19:35

The important thing is not so much

that every child should be taught,

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

#9

مشكورين يا اخوان ....

شكرا جزيلا ....

#10
محمد رضى كتب:
الطريقة السهلة هي الإشتراك في الحدث FormClosing للنموذج ثم تحديد الخاصية e.Cancel على True. هذه الطريقة ستمنع غلق النموذج حتى بطريقة برمجية يعني الدالة Close. يعني يجب أن تضع شرطا لقبول أو رفض غلق النموذج.

الطريقة الصعبة باستعمال دوال API لإلغاء تنشيط الزر X على شريط العنوان و قائمة النظام على النموذج. إذا كانت هي ضالتك سأنشر لك الحل.

تحياتي...

بالنسبة لهاد الكود مو هاد الي بدي احتاجه لأنه لما بدي اعمل

Me.close ()

ما راح تشتغل هادي الخاصيه شكرا الك

#11

فكره جيده اخى بشار

و للعلم فإن الرقم 512 يمثل الثابت

CS_NOCLOSE = 0x200

و هو جعل الـ style الخاص بالـ class التى سيتم تسجيلها لهذه الفورم بدون زر close

مع الأخذ فى الإعتبار ان طريقة الأخ ghost تتيح لك التحكم فى فاعلية الزر close بمعنى انك تستطيع تفعيله او عدم تفعيله اثناء عمل البرنامج و بناءا على عملية معينه تقوم بها فى برنامجك، اما طريقة الأخ بشار فهى تمنع وجود الزر close من الأساس اى تقوم بحذفه من قائمة الـ system للنافذه و بالتالى لن تستطيع التعامل مع هذا الزر على الإطلاق (مع العلم انه يمكن التحايل على موضوع حذفه بإعادة اضافته بنفس إعداداته و لكن هذا موضوع اخر).

و الله ولى التوفيق

تم تعديل هذه المشاركة بواسطة Muhammad alaa في 11 سبتمبر 2009 في 00:38

مدونتي: C++ Tips and Tricks

#12
Muhammad alaa كتب:
فكره جيده اخى بشار

و للعلم فإن الرقم 512 يمثل الثابت

CS_NOCLOSE = 0x200

و هو جعل الـ style الخاص بالـ class التى سيتم تسجيلها لهذه الفورم بدون زر close

مع الأخذ فى الإعتبار ان طريقة الأخ ghost تتيح لك التحكم فى فاعلية الزر close بمعنى انك تستطيع تفعيله او عدم تفعيله اثناء عمل البرنامج و بناءا على عملية معينه تقوم بها فى برنامجك، اما طريقة الأخ بشار فهى تمنع وجود الزر close من الأساس اى تقوم بحذفه من قائمة الـ system للنافذه و بالتالى لن تستطيع التعامل مع هذا الزر على الإطلاق (مع العلم انه يمكن التحايل على موضوع حذفه بإعادة اضافته بنفس إعداداته و لكن هذا موضوع اخر).

و الله ولى التوفيق

شكراً لك أخي محمد على تقييم الفكرة،

يمكنك التحكم بتفعيل الزر ( Close ) في وقت التشغيل ( RunTime ) أيضاً, لكن سيكون عليك تصريح متغير عام ضمن صفه ليكون القيمة الحالية لتفعيل الـ( Close Button ), هناك طريقتان لتغير الحالة إحداها بتغير الخاصية ( WindowState ) إلى ( Maximize ) ومن ثم إلى ( Normal ) ولكن هذه الطريقة غير متقنة وبالأحرى لا أحد سيرغبها, لذلك يمكنك الإعتماد على الإجراء ( RecreateHandle ) وبذلك سيعمل بشكل سليم, جرب الـ( Code ) التالي :

 

[color= #339933;]<Global[color= #339933;].Microsoft[color= #339933;].VisualBasic[color= #339933;].CompilerServices[color= #339933;].DesignerGenerated[color= #009900;]([color= #009900;])[color= #339933;]> [color= #990000;]_

Partial [color= #000000; font-weight: bold;]Class Form1

    Inherits [color= #990000;]System[color= #339933;].Windows[color= #339933;].Forms[color= #339933;].Form

 

    [color= #0000ff;]'Form overrides dispose to clean up the component list.

[color= #0000ff;]    <System.Diagnostics.DebuggerNonUserCode()> _

[color= #0000ff;]    Protected Overrides Sub Dispose(ByVal disposing As Boolean)

[color= #0000ff;]        If disposing AndAlso components IsNot Nothing Then

[color= #0000ff;]            components.Dispose()

[color= #0000ff;]        End If

[color= #0000ff;]        MyBase.Dispose(disposing)

[color= #0000ff;]    End Sub

 

[color= #0000ff;]    'Required by the Windows Form Designer

    [color= #000000; font-weight: bold;]Private components [color= #b1b100;]As [color= #990000;]System[color= #339933;].ComponentModel[color= #339933;].IContainer

 

    [color= #0000ff;]'NOTE: The following procedure is required by the Windows Form Designer

[color= #0000ff;]    'It can be modified using the Windows Form Designer[color= #339933;].  

    [color= #0000ff;]'Do not modify it using the code editor.

[color= #0000ff;]    <System.Diagnostics.DebuggerStepThrough()> _

[color= #0000ff;]    Private Sub InitializeComponent()

[color= #0000ff;]        Me.CKDisbleCloseButton = New System.Windows.Forms.CheckBox

[color= #0000ff;]        Me.SuspendLayout()

[color= #0000ff;]        '

        [color= #0000ff;]'CKDisbleCloseButton

[color= #0000ff;]        '

        Me[color= #339933;].CKDisbleCloseButton[color= #339933;].AutoSize [color= #339933;]= [color= #000000; font-weight: bold;]True

        Me[color= #339933;].CKDisbleCloseButton[color= #339933;].Location [color= #339933;]= [color= #000000; font-weight: bold;]New [color= #990000;]System[color= #339933;].Drawing[color= #339933;].Point[color= #009900;]([color= #cc66cc;]12[color= #339933;], [color= #cc66cc;]12[color= #009900;])

        Me[color= #339933;].CKDisbleCloseButton[color= #339933;].Name [color= #339933;]= [color= #0000ff;]"CKDisbleCloseButton"

        Me[color= #339933;].CKDisbleCloseButton[color= #339933;].Size [color= #339933;]= [color= #000000; font-weight: bold;]New [color= #990000;]System[color= #339933;].Drawing[color= #339933;].Size[color= #009900;]([color= #cc66cc;]124[color= #339933;], [color= #cc66cc;]17[color= #009900;])

        Me[color= #339933;].CKDisbleCloseButton[color= #339933;].TabIndex [color= #339933;]= [color= #cc66cc;]0

        Me[color= #339933;].CKDisbleCloseButton[color= #339933;].Text [color= #339933;]= [color= #0000ff;]"Disable Close Button"

        Me[color= #339933;].CKDisbleCloseButton[color= #339933;].UseVisualStyleBackColor [color= #339933;]= [color= #000000; font-weight: bold;]True

        [color= #0000ff;]'

[color= #0000ff;]        'Form1

        [color= #0000ff;]'

[color= #0000ff;]        Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)

[color= #0000ff;]        Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font

[color= #0000ff;]        Me.ClientSize = New System.Drawing.Size(153, 41)

[color= #0000ff;]        Me.Controls.Add(Me.CKDisbleCloseButton)

[color= #0000ff;]        Me.Name = "Form1"

[color= #0000ff;]        Me.Text = "Form1"

[color= #0000ff;]        Me.ResumeLayout(False)

[color= #0000ff;]        Me.PerformLayout()

 

[color= #0000ff;]    End Sub

[color= #0000ff;]    Friend WithEvents CKDisbleCloseButton As System.Windows.Forms.CheckBox

[color= #0000ff;]End Class

 

[color= #0000ff;]Public Class Form1

[color= #0000ff;]    Private Sub CKDisbleCloseButton_CheckedChanged(ByVal sender As System.Object, ByVal e As Sy
stem.EventArgs) Handles CKDisbleCloseButton.CheckedChanged

[color= #0000ff;]        MyBase.RecreateHandle()

[color= #0000ff;]    End Sub

 

[color= #0000ff;]    Protected Overrides ReadOnly Property CreateParams() As System.Windows.Forms.CreateParams

[color= #0000ff;]        Get

[color= #0000ff;]            Dim Param As CreateParams = MyBase.CreateParams

[color= #0000ff;]            If CKDisbleCloseButton IsNot Nothing Then

[color= #0000ff;]                If CKDisbleCloseButton.Checked Then

[color= #0000ff;]                    Param.ClassStyle = 520

[color= #0000ff;]                Else

[color= #0000ff;]                    Param.ClassStyle = 8

[color= #0000ff;]                End If

[color= #0000ff;]            Else

[color= #0000ff;]                Dim DefaultValue As Int32 = 8

[color= #0000ff;]                Param.ClassStyle = DefaultValue

[color= #0000ff;]            End If

[color= #0000ff;]            Return Param

[color= #0000ff;]        End Get

[color= #0000ff;]    End Property

[color= #0000ff;]End Class

مرة أخرى ( شكراً ) .

بالتوفيق :) .

The important thing is not so much

that every child should be taught,

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

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