يتوقف رمز الدرج الخاص بي عن الاستجابة عندما يتم تصغير تطبيقي!

StackOverflow https://stackoverflow.com/questions/2055702

  •  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

نهاية الفصل

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top