9 Ağustos 2007 Perşembe

MDI Formlarda Parent Formun Arka Planını Değiştirme

Bu yazımda MDI formlarda parent formun arkaplan rengini değiştirmeyi anlatmaya çalışacağım. Eminim ki birçoğunuz parent formun arkaplan rengini ve ya resmini değiştirmeyi properties penceresinde ve kod tarafında denedi ama muhtemelen olmadı. Yaptığım bir projede bunu kullanmam gerekmişti. Aşağıdaki kodların işe yaramadığını görmüş olabilirsiniz. (Visual Studio .Net 2005’te öyle)

this.BackgroundImage = Image.FromFile("C:\\Resim.jpg");
this.BackColor = Color.Blue;

Ben yaptığım projede bazılarınızın da aklına geldiği gibi kalıtım kullandım. Ama kalıtımda da yukarıdaki kodları doğrudan yazınca (sadece renk değiştirmede) işe yaramıyor. Bunun için uyguladığım yöntemi kodları kısaltıp size aktarmak istiyorum.

İlk olarak MdiBackGround isimli yeni bir Windows projesi oluşturalım. Ve Form1’in kodlarını aşağıdaki gibi yazalım. (Form1 miras alınacak sınıf olarak kullanılacak)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
namespace MdiBackGround {
 public partial class Form1: Form {
  public Form1() {
   InitializeComponent();
  }
  protected override void OnPaint(PaintEventArgs e) {
   //if (!DesignMode)//eğer tasarım anında hata olursa bunu aktifleştirin.
   PaintBackground(e.Graphics);
  }
  [DefaultValue(false)]
  public new bool IsMdiContainer {
   get {
    return base.IsMdiContainer;
   }
   set {
    base.IsMdiContainer = value;
    if (!value) return;
    for (int i = 0; i < this.Controls.Count; i++) {
     MdiClient mdiClient = this.Controls[i] as MdiClient;
     if (mdiClient != null) {
      mdiClient.Paint += new PaintEventHandler(this.MdiClient_Paint);
      break;
     }
    }
   }
  }
  private void MdiClient_Paint(object sender, PaintEventArgs e) {
   //if (!DesignMode)//eğer tasarım anında hata olursa bunu aktifleştirin.
   PaintBackground(e.Graphics);
  }
  private void PaintBackground(Graphics g) {
   //this.BackgroundImage = Image.FromFile("C:\\Resim.jpg");
   //Burada doğrudan bu yazılınca çalışıyor.
   Rectangle rect = this.ClientRectangle;
   rect.Inflate(2, 2);
   SolidBrush sb = new SolidBrush(Color.Blue);
   g.FillRectangle(sb, rect);
   sb.Dispose();
  }
 }
}
Related Posts Plugin for WordPress, Blogger...