2016-04-04 16 views
-1

Aşağıdaki kod göz önünde titrediği: Ben bu kod hattını arayın.Net WinForms uygulaması: Form Form.ShowInTaskbar değeri değişen

Me.ShowInTaskbar = Not ShowInTaskbar 

Everytime form zaman küçük bir süre için titrer (muhtemelen bağlıdır Birçok kontrol formundadır).

Tamam, neden bunu en başta yürütmek istiyorum?

Temelde, bazı iletişim biçimlerini göstermek için kullandıkları bir ana form var ve ben görev çubuğunda tek bir tıklama ile her iki formları (ana & iletişim) geri/minimize etmek isterler, bu yüzden kullanıyorum Bu kod: formu haricinde Şimdi

Private Sub frmDialog_Resize(sender As Object, e As System.EventArgs) Handles Me.Resize 
    frmMain.Visible = Me.WindowState <> FormWindowState.Minimized 
End Sub 

, her şey iyi çalışır: iletişim formu yılında

Dim dialogForm As New frmDialog 
    Me.ShowInTaskbar = False 
    dialogForm.ShowDialog(Me) 
    Me.ShowInTaskbar = True 

Ve ShowInTaskbar özelliğini etkinleştirdiğimde/devre dışı bıraktığımda her seferinde titriyor (bu benim için her iletişim formunu etkileyeceğinden dolayı çok önemlidir).

Bunun olmasını önlemek için herhangi bir yolu var mı? veyaShowInTaskbar özelliğine dokunmadan en aza indirgeme/geri yükleme işlerini halletmenin başka bir yolu var mı?

(Bunu tartışan bazı konular buldum ama kullanışlı bir çözüm bulamadım).

Not:Ben ana formu gizlemek veya tıklanabilir yapmak istemiyorum.

+0

İlgisiz ama neden boyutlandırma olay üzerine kontrol edecek Pencere durumu değişiklikleri için özel bir tane var –

+0

Bunun için belirli bir olay var mı? Hangisi?! –

+0

Windows, pencere durumu değiştiğinde WM_SYSCOMMAND formunuza gönderecek, WndPrc'yi geçersiz kılacak ve bu komutu SC_MINIMIZE, SC_MAXIMIZE ve SC_RESTORE için wParam ile kontrol edecektir. –

cevap

0

formunuzda aşağıdaki kodu yazın -

Private originalExStyle As Integer = -1 
Private enableFormLevelDoubleBuffering As Boolean = True 

Protected Overrides ReadOnly Property CreateParams() As CreateParams 
    Get 
     If originalExStyle = -1 Then 
      originalExStyle = MyBase.CreateParams.ExStyle 
     End If 

     Dim cp As CreateParams = MyBase.CreateParams 

     If enableFormLevelDoubleBuffering Then 
      cp.ExStyle = cp.ExStyle Or &H2000000 
     Else 
      ' WS_EX_COMPOSITED 

      cp.ExStyle = originalExStyle 
     End If 
     Return cp 
    End Get 
End Property 

burada daha fazla ayrıntı bulabilirsiniz - http://www.angryhacker.com/blog/archive/2010/07/21/how-to-get-rid-of-flicker-on-windows-forms-applications.aspx

+0

Hem geçersiz kılma özelliğini hem de 'TurnOffFormLevelDoubleBuffering' yöntemini ekledim ve makalede anlatıldığı gibi bu yöntemi "Form_Shown" olayında çağırdı. Ne yazık ki hala titriyor! –