C#

Devexpress Özel MessageBox Oluşturma

Herkese merhabalar, bu yazımızda Devexpress frameworkü kullanarak kendi özel MessageBox diyalog penceremizi oluşturacağız. Bildiğiniz üzere C# .Net Framework’te ne yazık ki MessageBox penceresinde herhangi bir düzenleme yapılamıyor, standart diyalog penceresini kullanmak zorundayız. Fakat Devexpress’te kendi özel diyalog penceremizi oluşturabiliyoruz. Bu yazımızda da Devexpress ile kendi özel MessageBox diyalog penceremizi oluşturacağız. Hadi başlayalım !

Öncelikle projemize bir class ekliyoruz, class’ın ismi size kalmış ama ben MessageBox yaptım. Öncelikle gerekli olan kütüphaneleri ekliyoruz. Bunun için de kodlarımızın en başına

using System.Drawing;
using DevExpress.Utils;
using System.Windows.Forms;
using DevExpress.XtraEditors;

ekliyoruz.Bu sayede yazacağımız kodları Visual Studio’da tanımış olacak. C#’ta direk class içine kod yazamayacağımız için bir tane fonksiyon oluşturuyoruz ve ben adınaCreate verdim ve diyalog penceresinden dönen değeri alabilmek için de dönüş tipini DialogResult yaptım. Ayrıca bu diyalog penceresini birden fazla yerde kullanacağım ve pencerenin içeriği, başlığı ve pencerede bulunan butonlar değişebileceği için 3 parametre alacak şekilde yaptım. Yani kod satırımız şöyle olacaktır;

internal static DialogResult Create(string icerik, string baslik, DialogResult[] buttons){ }

Sonrasında diyalog penceresinde özelleştirme yapabilmemizi sağlayanXtraMessageBoxArgs class’ından yeni bir nesne türetiyoruz ve bu class’ın propertylerini dolduruyoruz. Dolduracağımız proplar; CaptionText veButtons olacaktır. Ayrıca HTML desteklemesini istersekde AllowHtmlText propunu doldurmalıyız. Dolduracağımız proplar fonksiyona dışarıdan gelen veriler olacaktır.Yani kod bloğumuz şöyle olmalı;

XtraMessageBoxArgs messageBox = new XtraMessageBoxArgs()
{
    Caption = baslik,
    Text = icerik,
    AllowHtmlText = DefaultBoolean.True,
    Buttons = buttons
};

Diyalog penceresinde içeriğin solunda bir ikon eklemek istersek ikonun tipine göre

messageBox.Icon = SystemIcons.Error;
messageBox.Icon = SystemIcons.Asterisk;
messageBox.Icon = SystemIcons.Question;
messageBox.Icon = SystemIcons.Information;

özelliklerinden birini ekleyebiliriz.

Evet diyalog penceremizin iskelet yapısı hazır fakat eklediğimiz butonlar İngilizce olacaktır.Yani örneğin bilgi mesajı içeren bir diyalog gösterdiğimizde butonda “OK” yazacak ve henüz butona ikon eklemediğimiz için C#’ın kendi diyalog penceresinden pek farkı olmayacakır. Hadi gelin şimdi butonlarımıza da ikon ekleyelim ve butonlarımız üstünde yazan yazıları değiştirelim. Bunun için oluşturduğumuz XtraMessageBoxArgs tipinde olan messageBox değişkenimizin Showing eventini kullanmalıyız. Bu eventi oluşturabilmek için 2 yolumuz var;

messageBox.Showing += (s, e) => { }

ile direk fonksiyon içinde tanımlayabiliriz. Veyahut ayrıca object ve XtraMessageShowingArgs tipinde 2 farklı değer alan bir fonksiyon oluşturup

messageBox.Showing += oluşturulan_fonksiyon_adı

şeklinde tanımlama yapabiliriz. Ben ilk bahsettiğimi kullandım, öyle devam edeceğim.

Diyalog penceresinde istediğimiz kontrole direk ulaşamayacağımız için pencerede bulunan kontrolleri foreach döngüsü ile dönecek ve ilgili değişiklikleri yapacağız. Diyalog penceresinde sadece eklenecek buton kadar SimpleButton tipinde kontrol olacaktır. Yani sadece SimpleButton’lara erişebiliyoruz ve istediğimiz şey de buydu zaten. Döngümüzün kuralı şu şekilde olmalı;

foreach (Control item in e.Form.Controls)

Döngünün her adımında tutulan değişkeni SimpleButton tipine dönüştürüp, SimpleButton’un DialogResult özelliğini kontrol etmeliyiz. Çünkü diyalog penceresinde her ne kadar SimpleButton olsa da bu butonlara tıklamak DialogResult tipinde veri döndüreceği için DialogResult özelliklerini kontrol edeceğiz. Bunun için de switch – case kullanacağız.

SimpleButton button = item as SimpleButton;

kod satırı ile döngü değişkenini SimpleButton tipine dönüştürdük.

switch (button.DialogResult)
{
    case DialogResult.Yes:
        button.Text = "Evet";
        button.ImageOptions.SvgImage = Properties.Resources.bo_validation;
        break;
    case DialogResult.OK:
        button.ImageOptions.SvgImage = Properties.Resources.bo_validation;
        button.Text = "Tamam";
        break;
    case DialogResult.No:
        button.Text = "Hayır";
        button.ImageOptions.SvgImage = Properties.Resources.del;
        break;
    case DialogResult.Cancel:
        button.ImageOptions.SvgImage = Properties.Resources.del;
        button.Text = "İptal";
        break;
    default:
        break;
}

kod satırı ile SimpleButton’un DialogResult özelliğine göre butonun üstündeki metni ve ikonu değiştirdik. Properties.Resources.x satırları benim projeye eklediğim ikonları işaret etmektedir. Sizde oluşturduğunuz projeye ikonlar ekleyerek butonlara ikon eklemesi yapabilirsiniz. Ve son olarak MessageBox penceremizi gösterecek kod satırını ekleyip geriye döndüreceğiz ki kullacağımız yerde bu pencereden dönen değere ulaşabilelim 🙂

return XtraMessageBox.Show(messageBox);

kod satırı tam olarak bu işlemi yapmaktadır.

Eveett, Devexpress kullanarak kendi özel MessageBox diyalog penceremizi oluşturduk. Diyalog penceremizi oluşturduk fakat henüz bu pencereyi ekranda göstermedik. Penceremizi gösterebilmek için örneğin;

MessageBox.Create("Hello World !", "Pencere Başlığı", new DialogResult[]{ DialogResult.OK });

gibi bir kullanım yapabilirsiniz. Evet tüm işlemler tamamdır, kodumuzun tamamı şu şekilde olmalı;

class MessageBox
{
    internal static DialogResult Create(string icerik, string baslik, DialogResult[] buttons)
    {
        XtraMessageBoxArgs messageBox = new XtraMessageBoxArgs()
        {
            Caption = baslik,
            Text = icerik,
            AllowHtmlText = DefaultBoolean.True,
            Buttons = buttons
        }
        switch (messageBox.Caption)
        {
            case "Hata":
                messageBox.Icon = SystemIcons.Error;
                break;
            case "Başarılı":
                messageBox.Icon = SystemIcons.Asterisk;
                break;
            case "Emin Misiniz ?":
                messageBox.Icon = SystemIcons.Question;
                break;
            case "Bilgi Mesajı":
                messageBox.Icon = SystemIcons.Information;
            break;
        }
        messageBox.Showing += (s, e) => {
            foreach (Control item in e.Form.Controls)
            {
                SimpleButton button = item as SimpleButton;
                button.ImageOptions.SvgImageSize = new Size(24, 24);
                switch (button.DialogResult)
                {
                    case DialogResult.Yes:
                        button.Text = "Evet";
                        button.ImageOptions.SvgImage = Properties.Resources.bo_validation;
                        break;
                    case DialogResult.OK:
                        button.ImageOptions.SvgImage = Properties.Resources.bo_validation;
                        button.Text = "Tamam";
                        break;
                    case DialogResult.No:
                        button.Text = "Hayır";
                        button.ImageOptions.SvgImage = Properties.Resources.del;
                        break;
                    case DialogResult.Cancel:
                        button.ImageOptions.SvgImage = Properties.Resources.del;
                        button.Text = "İptal";
                        break;
                    default:
                        break;
                }
            }
        }
    }
    return XtraMessageBox.Show(messageBox);
}

Bir yazımızın daha sonuna geldik, Diğer C# derslerimize buraya tıklayarak ulaşabilirsiniz. Hepinize mutlu kodlamalar dilerim

Skorumuz:
Oy Vermek İçin Tıklayın
[Toplam: 1 Ortalama: 5]

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu