2012-03-21 9 views
7

Pencere tanıtıcısı oluşturulduktan sonra Load olayının tetiklendiğini, ancak penceresinden pencerenin gerçekten görünür hale geldiğini okudum. Çoğunlukla, bu doğru gibi görünüyor. Ancak, WindowState özelliği FormWindowState.Maximized olarak ayarlanmış bir form oluşturduğumda (VS tasarımcısı aracılığıyla veya yapıcıda programlı olarak), pencerenin Load olay ateşlemesinden önce görünür hale geldiğini buldum. Örneğin: sırayla WindowState öğesinin Maksimize edilen nedenlere göre ayarlanması pencerenin çok erken görünmesi

using System; using System.Windows.Forms; namespace MyApplication { public partial class MyForm : Form { public MyForm() { InitializeComponent(); WindowState = FormWindowState.Maximized; } protected override void OnLoad(EventArgs e) { MessageBox.Show("OnLoad - notice that the window is already visible"); base.OnLoad(e); } } } 

Bu

pencere görünür iken (Form.Load olay sırasında yerleştirilir) denetimlerinin yeniden boyutlandırılır ederken çok titreşmeye görüntülenen formu neden olur. Eğer durumu maksimize edilecek şekilde ayarlamadıysam, tüm yeniden boyutlandırma pencerenin gösterilmesinden önce yapılır (beklediğim şey budur).

Load olayının sonuna kadar WindowState ayarını yapmaya devam edebilirim, ancak bu, pencerenin görünür hale gelmesi ve tüm denetimlerin yeniden boyutlandırılması nedeniyle çok fazla titremeye neden olabilir.

Herhangi bir düşünce?

+3

'Bu. – LarsTech

+1

'Load' olayındaki denetimleri yeniden boyutlandırmak biraz şüpheli. Neden "Dock" veya "Anchor" özellikleri veya "TableLayoutPanel" gibi kontroller için yerleşik yeniden boyutlandırma mekanizmalarına güvenmiyorsunuz? Pencereyi daha sonra manuel olarak yeniden boyutlandırdığımda denetimleri de el ile yeniden boyutlandırır mısınız? –

+0

Bunu da alıyorum. Kullanıcı oturumları arasında WindowState'i kaydediyorum, böylece kullanıcı daha önce neye sahip olduğu ve WindowState'i Maksimize olarak ayarladığım zaman yeniden boyutlandırılabilsin, vb. Çok fazla titreklik alıyorum. Bunu düzeltmek için bir çözüm var mı? –

cevap

0

Pencerenin görünümünü değiştiren (örneğin yeniden boyutlandırma), pencerenin görünür hale gelmesine neden olur.

Sen ctor içinde .Hide() veya .Visible = False arayıp .Load sonunda tekrar görünür hale getirmek olabilir

+0

Yanlış görünür şekilde görünmenin herhangi bir etkisi yoktur. Bu, formun uygulamanın ana formu olduğu ve Application.run – user1283610

1

Eğer yük olay kullanım System.Diagnostics.Debug.WriteLine bazı tanısal mesaj koymak gerekirse() ;
MessageBox'ı kullanırsanız, olayların normal akış sırasını yok edersiniz.

protected override void OnLoad(EventArgs e)   
{    
    System.Diagnostics.Debug.WriteLine("onLoad");    
    base.OnLoad(e);   
} 

This post

ilk Aktive olay ateş kadar WindowState değişikliğini geciktirmek için daha detay

2

deneyin açıklar. Bu VS2005 ve framework 2.0 ile VB.NET'te benim için çalışır.

+0

aracılığıyla görüntülendiği gerçeği ile ilgili bir şey olabilir. Bu, windowstate maksimize edildiğinden normal olarak değiştirildiği zaman benim için çalıştı. Bunun yerine, Load olayı penceresinde maksimuma ayarlıyorum. – NielW

1

Sen InitializeComponent() ÖNCE WindowState ayarlamak zorunda: Yük olay MessageBox.Show` göstermek için formu zorlar

public Form() //Constructor 
    { 
     WindowState = FormWindowState.Maximized; 

     InitializeComponent(); 
    } 
İlgili konular