Categories: asp.net, c#, Örnek sınıflar Posted by Admin on 2/15/2012 11:29 AM | Comments (0)

Merhabalar, bu yazı ile geliştirmekte yada geliştirmiş olduğunuz sınıfların bazı özelliklerini ya da bizzat kendisini PropertyGrid nesnesi üzerinden nasıl düzenlenebilir yapabileceğinizi öğrenebilirsiniz. Bilindiği üzere PropertyGrid kontrolü seçilen nesneye ait tüm özellikleri listelemektedir. Uygulamanın tasarım/dizayn aşamasında bu kontrolün kullanımı önemli kolaylıklar sağlamaktadır. Direk koda inmektense bir kaç tıklama ile ilgili nesneye ait değerleri kolaylıkla değiştirebiliyoruz. Peki ya kendi geliştiriğimi nesneler ya da özellikler(property) kendine has bir şekilde property grid kontrolü ile değiştirilebilir hale getirilebilir?

 

Property Grid

Konuyu biraz daha açıklayabilmek amacıyla bir kaç örnek vermek uygun olacaktır. Örneğin Color sınıfına ait bir özelliği property grid ile değiştirmek istediğinizde ya da WindosState özelliğini değiştirmek istediğiniz de aşağıdaki kutucukları kullanıyoruz.

 

Color sınıfına ait editör

 

WindowsState'e ait editör

 

Arka planda bu işlevi kazandırmak üzere basit bir sınıf üzerinden örneğimizi gerçekleştirelim. Örnek sınıfı ve bu sınıfı özellik olarak kullanan MyCustomClass sınıfı:

 

Public Class MyDemoClass
    Public Property ColorProperty As Color

    Public Property NameProperty As String

    Public Property CustomClassProperty As MyCustomClass

    Sub New()
        ColorProperty = Color.Black
        NameProperty = "Hello OMR!"
        CustomClassProperty = New MyCustomClass()
    End Sub
End Class


Public Class MyCustomClass
    Public Property NumberOne As Integer = 0

    Public Property NumberTwo As Integer = 0

    Public ReadOnly Property Multiply As Integer
        Get
            Return NumberOne * NumberTwo
        End Get
    End Property
End Class

 

Editörün görünmesini örnekleyeceğim sınıf MyCustomClass sınıfıdır. Bu sınıfın kendine has bir editör ile property grid üzerinden düzenlenebilmesi için bu sınıfa EditorAttribute tanımlamasını yapmamız gerekiyor. Örnek tanımlama:

 

<Editor(GetType(MyCustomEditor), GetType(System.Drawing.Design.UITypeEditor))> _

 

Tanımlamayı yapmak için UITypeEditor sınıfından kalıtılmış bir sınıfı belirtmemiz gerekiyor. Örnek sınıf ve sınfı içerisinde kullanılan UserKontrol'ün kaynak kodları:

 

Public Class MyCustomEditor
    Inherits UITypeEditor

    Dim editorService As IWindowsFormsEditorService

    Public Overrides Function GetEditStyle(context As System.ComponentModel.ITypeDescriptorContext) As System.Drawing.Design.UITypeEditorEditStyle
        Return UITypeEditorEditStyle.DropDown
    End Function

    Public Overrides Function EditValue(context As System.ComponentModel.ITypeDescriptorContext, provider As System.IServiceProvider, value As Object) As Object
        If (provider IsNot Nothing) Then
            editorService = CType(provider.GetService(GetType(IWindowsFormsEditorService)), IWindowsFormsEditorService)
        End If

        If (editorService IsNot Nothing) Then
            Dim customClass = CType(value, MyCustomClass)

            Dim selectionControl As New MySelectionControl(customClass, editorService)

            editorService.DropDownControl(selectionControl)

            value = customClass
        End If

        Return value
    End Function
End Class

 

 

 
UserKontrol'e ait kaynak kodları:

 

Imports System.Windows.Forms.Design

Public Class MySelectionControl

    Private _editorService As IWindowsFormsEditorService
    Private _value As MyCustomClass

    Sub New(value As MyCustomClass, editorService As IWindowsFormsEditorService)
        InitializeComponent()

        _value = value
        _editorService = editorService

        FillValue()
    End Sub

    Private Sub FillValue()
        txtNumberOne.Text = _value.NumberOne.ToString()
        txtNumberTwo.Text = _value.NumberTwo.ToString()
    End Sub

    Private Sub SetValue()
        _value.NumberOne = Convert.ToInt32(txtNumberOne.Text) + 10
        _value.NumberTwo = Convert.ToInt32(txtNumberOne.Text) - 10

        _editorService.CloseDropDown()
    End Sub

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs)

    End Sub

    Protected Overrides Sub OnLeave(e As System.EventArgs)
        MyBase.OnLeave(e)

        SetValue()
    End Sub
End Class

 

 

Property grid üzerinden çalışmamızın sonuçlarını görelim:

 

Faydalı olması dileğiyle, iyi çalışmalar.

Categories: asp.net, Örnek sınıflar Posted by Admin on 3/13/2011 10:00 AM | Comments (0)

Merhabalar, daha önce de bu konuya benzer şeyler yazmıştım. Bu yazıda cache işlemlerini kolayca yapabilmek için kullandığım aşağıdaki sınıfı paylaşıyorum. CacheHelper.cs sınıfı aşağıdaki gibidir.

 

namespace OMR.Core.Helpers
{
    using System;
    using System.Web;

    public class CacheHelper
    {
        private static HttpContext GetHttpContext()
        {
            HttpContext httpContext = HttpContext.Current;
            if (httpContext == null)
                throw new InvalidOperationException();

            return httpContext;
        }

        /// <summary>
        /// Önbelleğe nesne eklemek için kullanılır
        /// </summary>
        /// <typeparam name="T">Nesne tipi</typeparam>
        /// <param name="t">Nesne tipi</param>
        /// <param name="key">Önbellek anahtarı</param>
        /// <param name="minute">Önbellekte kalma süresi</param>
        public static void Add<T>(T t, string key, int minute) where T : class
        {
            GetHttpContext().Cache.Insert(key, t, null, DateTime.Now.AddMinutes(minute), System.Web.Caching.Cache.NoSlidingExpiration);
        }

        /// <summary>
        /// Önbellek anahtarına göre nesneyi önbellekten siler
        /// </summary>
        /// <param name="key">Önbellek anahtarı</param>
        public static void Clear(string key)
        {
            GetHttpContext().Cache.Remove(key);
        }

        /// <summary>
        /// Önbellekte önbellek anahtarı var mı?
        /// </summary>
        /// <param name="key">Önbellek anahtarı</param>
        /// <returns></returns>
        public static bool Exists(string key)
        {
            return GetHttpContext().Cache[key] != null;
        }

        /// <summary>
        /// Önbellek anahtarına göre ilgili nesneyi dönderir
        /// </summary>
        /// <typeparam name="T">Nesne tipi</typeparam>
        /// <param name="key">Önbellek anahtarı</param>
        /// <param name="value">Önbellek değeri</param>
        /// <returns></returns>
        public static bool Get<T>(string key, out T value) where T : class
        {
            try
            {
                // Önbellek anahtarı yok mu?
                if (!Exists(key))
                {
                    // Varsayılan değeri ata
                    value = default(T);
                    return false;
                }

                // Önbellekteki değeri ata
                value = (T)GetHttpContext().Cache[key];
                return true;
            }
            catch
            {
                // Hata olması durumunda varsayılan değeri ata
                value = default(T);
                return false;
            }
        }
    }
}

 

 

Faydalı olması dileğiyle, mutlu kodlar.