يتوقف رمز الدرج الخاص بي عن الاستجابة عندما يتم تصغير تطبيقي!
-
20-09-2019 - |
سؤال
بعد العثور على هذا السؤال وباتباع الإرشادات الموجودة هناك، بالإضافة إلى اتباع العديد من الروابط، تمكنت من جعل تطبيقي يظهر كأيقونة لعلبة النظام، ويختفي من شريط المهام عندما أقوم بتصغيره.
ولكن - سلوك غريب!عند فتح النموذج، يعمل رمز علبة النظام بشكل جيد.ولكن بمجرد تصغيره، يتوقف رمز الدرج عن الاستجابة لأي نوع من النقرات بالماوس.
حقائق أخرى قد تلعب دورًا:يتم بدء النموذج بواسطة خيط منسوج من الخيط الرئيسي، ويتم فتحه باستخدام .ShowDialog()
.هناك أيضًا العديد من المواضيع الأخرى التي تعمل في الخلفية.
أي أفكار ما الخطأ الذي يحدث؟
المحلول
يستبدل f.ShowDialog();
مع Application.Run(f);
أين f
هو المتغير الذي يحمل الخاص بك Form
وينبغي أن تعمل بشكل جيد.المشكلة هي ShowDialog
ترجع (وتنتهي حلقة الرسالة) عندما تقوم بإخفاء النموذج. Application.Run
يوفر حلقة رسالة مناسبة وتعمل نافذتك بعد إخفائها ويمكن إظهارها مرة أخرى باستخدام رمز علبة النظام.
نصائح أخرى
لست متأكدًا تمامًا من شكل الرمز الخاص بك، ولكن يوجد أدناه بعض التعليمات البرمجية التي قمت بسحبها من أحد تطبيقاتنا.إنه مكتوب بلغة VB ولكن لا ينبغي أن يكون من الصعب عليك تحويله.المفتاح هو إنشاء فئة ApplicationContext لاستضافة التعليمات البرمجية الخاصة بك.ليس لدى هذا الرمز أي مشاكل في إظهار النموذج ثم إغلاقه بشكل متكرر أو مع تصغيره أو تكبيره.
Public Class NotifyApplicationContext
Inherits ApplicationContext
Private components As System.ComponentModel.IContainer
Private Notify As System.Windows.Forms.NotifyIcon
Private Menu As System.Windows.Forms.ContextMenu
Private mnuForm As System.Windows.Forms.MenuItem
Private F As Form
Public Sub New()
InitializeContext()
End Sub
Private Sub InitializeContext()
Me.components = New System.ComponentModel.Container
Me.Notify = New System.Windows.Forms.NotifyIcon(Me.components)
SetupContextMenu()
Notify.ContextMenu = Me.Menu
Notify.Icon = New Icon("YourApplicationIcon", 16, 16)
Notify.Text = "Your Application Text"
Notify.Visible = True
F = New Form
F.Show()
End Sub
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
MyBase.Dispose(disposing)
End Sub
Protected Overrides Sub ExitThreadCore()
MyBase.ExitThreadCore()
End Sub
Private Sub SetupContextMenu()
Me.Menu = New System.Windows.Forms.ContextMenu
Me.mnuForm = New System.Windows.Forms.MenuItem
Me.Menu.MenuItems.Add(mnuForm)
mnuForm.Index = 7
mnuForm.Text = "FormText"
AddHandler mnuForm.Click, AddressOf Me.mnuTemp_Click
End Sub
Private Sub mnuForm_Click(ByVal sender As Object, ByVal e As System.EventArgs)
If F IsNot Nothing Then
If F.Visible = True Then
F.Close()
F.Dispose()
F = Nothing
End If
Else
F = New Form
F.Show()
End If
Notify.Text = "Change Application Text Here"
End Sub
نهاية الفصل
بدء تشغيل الطبقة العامة
<STAThread()> _
Public Shared Sub Main()
Dim N As ApplicationContext = New NotifyApplicationContext
Application.Run(N)
End Sub
نهاية الفصل