Neden Windows Form’un Boyutunu ApplicationSettings ile Bağlayamazsınız?

Windows Forms ile çalışan geliştiriciler olarak, uygulama durumlarını koruyarak kullanıcı deneyimini geliştirmek için sık sık yollar arıyoruz. ApplicationSettings ile Windows Forms kullanırken ortaya çıkan yaygın bir soru şudur: Neden bir Windows Form’un boyutunu doğrudan ApplicationSettings ile bağlayamazsınız?

Bu kısıtlama can sıkıcı olabilir, özellikle diğer özelliklerin zahmetsizce bağlandığını gördüğünüzde. Ancak, bu sorunu çözmenin ve uygulamanızın pencere durumunu ve boyutunu oturumlar arasında kaydetmenin bir yolu vardır. Gelin, sorunun kökünü anlamaya çalışalım ve çözümü daha net bir şekilde inceleyelim.

Kısıtlamayı Anlamak

Bir Windows Form boyutunu doğrudan ApplicationSettings ile bağlamaya çalıştığınızda, Boyut özelliğinin Özellik Bağlama listesinde eksik olduğunu görebilirsiniz. Bunun nedeni, formun boyutunun basitçe bağlanamamasıdır; genellikle, formun maksimum veya minimum duruma geçtiğinde durumunu kaydetme gereksinimi nedeniyle daha fazla bağlam gerektirir.

Neden Açık Yönetim Gerekiyor

  • Durumu Geri Yükleme: Boyuta doğrudan bağlanmak, formun durumundaki olası değişiklikleri (örneğin, minimum mu yoksa maksimum mu olduğu) dikkate almaz.
  • Ek Özelliklerin Kullanımı: Form normal durumunda değilse, boyutun RestoreBounds‘tan alınması gerekir; bu da basit bağlama ile güncellenmez.

Çözüm: RestorableForm Sınıfının Uygulanması

Bu kısıtlamayı etkili bir şekilde aşmak için, Form‘un bir alt sınıfı oluşturulabilir—buna RestorableForm diyelim. Bu sınıf, uygulamanın pencere boyutunu ve durumunu sorunsuz bir şekilde yöneterek gerekli yeniden tanımlamaları ve bağlamaları uygulayacaktır.

Adım Adım Uygulama

  1. Standart Form yerine RestorableForm sınıfından miras alın.

  2. WindowRestoreState’a bir bağlama ekleyin.

    • Bu bağlama, pencerenin konumunu ve durumunu yakalayacak ve kaydedecektir.
  3. Uygulama Kapatıldığında Ayarları Kaydedin.

    • Tüm ayarların saklandığından emin olmak için pencere kapatıldığında Properties.Settings.Default.Save() çağrısını yapın.

Örnek Kod

İşte RestorableForm sınıfının kısa bir uygulanışı:

using System;
using System.Windows.Forms;
using System.ComponentModel;
using System.Drawing;

namespace Utilities
{
    public class RestorableForm : Form, INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        private WindowRestoreStateInfo windowRestoreState;

        [Browsable(false)] 
        [SettingsBindable(true)] 
        public WindowRestoreStateInfo WindowRestoreState
        {
            get { return windowRestoreState; }
            set
            {
                windowRestoreState = value;
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("WindowRestoreState"));
            }
        }

        protected override void OnClosing(CancelEventArgs e)
        {
            WindowRestoreState = new WindowRestoreStateInfo
            {
                Bounds = WindowState == FormWindowState.Normal ? Bounds : RestoreBounds,
                WindowState = WindowState
            };
            base.OnClosing(e);
        }

        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
            if (WindowRestoreState != null)
            {
                Bounds = ConstrainToScreen(WindowRestoreState.Bounds);
                WindowState = WindowRestoreState.WindowState;
            }
        }

        private Rectangle ConstrainToScreen(Rectangle bounds)
        {
            // Ekrana sığdırma mantığı burada...
        }

        public class WindowRestoreStateInfo
        {
            public Rectangle Bounds { get; set; }
            public FormWindowState WindowState { get; set; }
        }
    }
}

Kodun Ana Noktaları

  • Özellik Yönetimi: WindowRestoreState özelliği, hem konumu hem de durumu yakalar.
  • Durumları Yükleme ve Kaydetme: Yeniden tanımlanan yöntemler, durumu geri yüklemeyi ve pencere durumunu kapatma sırasında işleyecektir.
  • Ekran Kısıtlamaları: ConstrainToScreen yöntemi, formun ekran içinde kalmasını sağlar; bu, boyut ve konumu geri yüklerken kritik öneme sahiptir.

Daha Fazla Öğrenme İçin Referanslar

RestorableForm sınıfında kullanılan bileşenler hakkında daha fazla bilgi edinmek için bu bağlantıları faydalı bulabilirsiniz:

Sonuç

Windows Form’un Boyutunu doğrudan ApplicationSettings ile bağlamak zorluklar ortaya çıkarır, ancak RestorableForm sınıfı ile uygulamanızın durumunu oturumlar arasında hatırlamasını sağlayabilirsiniz. Açık durum yönetimini uygulayarak, kullanıcıların uygulamanızı kullanırken daha tutarlı ve kişiselleştirilmiş bir deneyim yaşamasını sağlarsınız.

Bu yaklaşım ile Windows Forms boyutunu ve durumunu etkili bir şekilde yönetebilir ve yanıt veren, sezgisel hisseden kullanıcı dostu uygulamalar oluşturabilirsiniz.