SORU
10 NİSAN 2010, CUMARTESİ


Ne kadar Kullanıcı denetimleri titremeyi düzeltmek için

Benim uygulamada sürekli başka bir denetimden taşınıyorum. Hayır oluşturduk. kullanıcı denetimleri, ama navigasyon kontrolleri sırasında benim titreme alır. 1 ya da 2 güncelleme için saniye sürer. Bunu ayarlamak için çalıştım

SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
or
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true); 
SetStyle(ControlStyles.DoubleBuffer, true);

ama işe yaramadı... Her denetim için farklı kontroller ile aynı arka plan görüntüsü vardır. Bunun için çözüm nedir Peki
Teşekkürler.

CEVAP
10 NİSAN 2010, CUMARTESİ


-Tampon çift çözebilecek titreşim türüdür. Ne BeginUpdate veya SuspendLayout. Çok fazla denetim var, Backgroundİmage bir hale getirebilirçokdaha kötü.

UserControl kendisini boya anda başlar. Bu Backgroundİmage, çocuk kontrol windows nereye delik bırakarak çekiyor. Her çocuk kontrol sonra kendini boyamak için bir mesaj alır, pencere içeriği ile boşluğu doldurmak isterler. Denetimleri bir sürü varsa, bu delikler bir süre kullanıcı tarafından görülebilir. Normalde beyaz, çok karanlık olduğunda Backgroundİmage ile zıt. Ya da eğer form Opaklık veya TransparencyKey özelliği, kötü her şeyi ile zıt varsa siyah olabilir.

Bu Windows vermektedir yolu ile kalmış Windows Formları gayet temel bir sınırlama. WPF btw sabit, alt denetimler için windows kullanmaz. Ne istediğinden çift tamponlama tüm form, alt denetimler de dahil olmak üzere. Bu mümkün, çözüm için this thread benim kodu kontrol edin. Yan etkileri olsa da, aslında resim hızını artırmak değil. Kodunu basit, formunuzda bu (kullanıcı denetimi) yapıştırın

protected override CreateParams CreateParams {
  get {
    CreateParams cp = base.CreateParams;
    cp.ExStyle |= 0x02000000;  // Turn on WS_EX_COMPOSITED
    return cp;
  }
} 

Resim hızını arttırmak için yapabileceğiniz birçok şey, titreme artık dikkat çekici olmayan nokta vardır. Bu Backgroundİmage mücadele ederek başlayın. Olabilirgerçektenkaynak görüntü büyük ve kontrol uyacak şekilde daralmış olması gerektiğinde pahalı. İçin BackgroundİmageLayout özelliğini değiştirin"". Çini Eğer bir fark hız-up verirse, resim programınıza geri dönün ve görüntü tipik kontrol boyutu ile daha iyi bir maç olması için yeniden boyutlandırmak. Ya da UC. OnResize kod yazmak() her zaman yeniden zorunda değil ki görüntü doğru boyutta bir kopyasını oluşturmak için yöntem denetimi yeniden boyar. Bu kopya için Format32bppPArgb piksel biçimini kullanın, yaklaşık 10 kat daha hızlı başka bir piksel biçimi oluşturur.

Sonraki şey ... fark edilir olmaktan delikler önlemek ve kötü imajı ile zıt yapabilirsiniz. UC turn off WS_CLIPCHILDREN stil bayrak, çocuk kontrol alanında resminden UC engelleyen bayrak. UserControl kod bu kodu yapıştırın:

protected override CreateParams CreateParams {
  get {
    var parms = base.CreateParams;
    parms.Style &= ~0x02000000;  // Turn off WS_CLIPCHILDREN
    return parms;
  }
}

Alt denetimler şimdi arka plan görüntüsü üstüne kendileri çizecek. Hala kendilerini tek tek onları resim görebilirsiniz, ama çirkin Ara beyaz veya kara delik görünür olmayacak.

Son ama en az değil, çocuk sayısını azaltmak her zaman yavaş boyama sorunları çözmek için iyi bir yaklaşımdır. UC geçersiz kılar. OnPaint() olay ve artık bir çocuk olarak gösterilen çizin. Özellikle Etiket ve Ekçoksavurgan. Noktası için uygun ama hafif kendi alternatif (bir dize ya da bir resim çizimi) OnPaint kod sadece tek bir satır alır() tıklatın yöntemi.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Jimmie Jones

    Jimmie Jones

    16 Kasım 2007
  • katherine gomez

    katherine go

    1 Aralık 2011
  • PaulGBelliveau

    PaulGBellive

    5 Mart 2009