Pazartesi, Ağustos 31, 2009

Windows 7 & Vista – Gadget

Astrazeneca için hazırlamış olduğum gadget sonuçlanmış bulunuyor. Tasarımsal öğeleri de tamamladıktan sonra sizlere makale olarak sunacağım. Şimdilik Gadget panelde yer alan görüntüsünü sizlere sunuyorum.

AZ

C# Keyword

abstract as base bool break
Byte case catch char checked
delegate do double else enum
event explicit extern false finally
fixed float for foreach goto
if implicit in int interface
internal is lock long namespace
new null object operator out
override params private protected public
readonly ref return sbyte sealed
short sizeof stackalloc static string
struct switch this throw true
try typeof uint ulong unchecked
unsafe ushort using virtual volatile
void while      

Salı, Ağustos 25, 2009

D.I.S.C Kişilik Envanter Testi Sonuçları

Kariyer.net sitesi üzerinde yapılan kişilik envanter testini doldurduktan sonra aldığım sonuçlar aşağıdaki gibi çıkmıştır. Sizin gerçek hareketleriniz ve davranışlarınızı tespit etme konusunda oldukça başarılı bir test. Benim sizlere tavsiyem 10 dakikanızı ayırıp bu testi doldurmanızdır.

  • Bağımsızdır.
  • Özgün, ilginç fikirler, alternatif çözümler sunar.
  • Değişime odaklı, yeni fikirlere açıktır.
  • Rekabetçidir, fırsatları; iyi değerlendirir.
  • İkna edicidir, önemli işlerin sorumluluğunu almak ister.
  • İstekli ve süreç odaklıdır.
  • Ödül ve motivasyona ihtiyaç duyar, takdir edilmek ister.
  • Yaptığı işin ve bulunduğu pozisyonunun başkaları tarafından kabul edilmesini ister.
  • Başarıları ile ses getirmek ister.
  • Kuralcı değildir, insiyatif kullanır, kendi yöntemlerini uygular.
  • Benmerkezcildir.
  • İyimserdir.

Pazar, Ağustos 23, 2009

SQL Server 2008 Management Studio – Tablo Kolonlarında Değişiklik

SQL Server 2008 ile gelen Management Studio ile tablo oluşturduktan sonra bu tablolar üzerinde bir değişiklik yapılmak istendiğinde izin verilememesi gibi bir sorun ile karşılaşılabiliniyor. Hata mesajı olarakta yeniden tabloyu oluşturun şeklinde bir mesaj verilmektedir. Bu sorunu daha doğrusu uyarıyı kaldırmak için aşağıdaki işlemleri yapmak yeterli olacaktır.

Management Studio açıldıktan sonra Tool—>Options adımları sonrası karşınıza gelen özellikler ekranından aşağıdaki ekrana geliyorsunuz.

Untitled

Daha sonrasında table option bölümünde yer alan seçeneklerden Prevent saving changes that required table re-creation seçeneğinin yanında yer alan seçimi kaldırıyorsunuz.

Yapmış olduğunuz bu işlemler sonrasında artık oluşturmuş olduğunuz tablolarda sorunsuzca herhangi bir uyarı almadan (Primary veya Foreign key kullanılması durumunda alınan hatalar bu durumun dışında tutulmaktadır) işlemlerinizi sorunsuzca yapabilmeniz mümkündür.

Umarım yararlı olabilmiştir.

İyi Çalışmalar…

Cumartesi, Ağustos 22, 2009

WPF – Item Controls

Windows Presentation Foundation (WPF) ile ilgili yapılabilecek işlemleri bugüne kadar detaylı bir biçimde incelemeye çalıştık. Tabii bizler bu yazı dizilerini oluştururken WPF Microsoft tarafında yeni duyurulmuş ve fazla bir kullanım alanı yoktu. Tabii zaman ilerledikçe ve yeni nesil işletim sistemleri çıktıkça yazılım dünyasında WPF kullanımı dahada artmaktadır.

WPF ile ilgilenne yazılımcıları çok farklı bir sürpriz karşılamaktadır. WPF kontrollerinin özellikleri eskiden alışık oldukları Windows Form kontrollerinden biraz farklıdır. Ayrıca da bu kontrolleri özelleştirmek istediklerinde bazı sorunlar yaşıyorlar. Bu tür sorunlar ile karşılaşılmaması için bu yazımızda tek tek WPF kontrollerine değineceğiz ve detaylarını inceliyor olacağız. İlk yazımızda en sık kullanılan Item Controllere göz atalım.

Item Controller son kullanıcıya liste şeklinde verileri göstermeyi sağlamaktadır. Bu verileri de iki şekilde kullanabilmemiz mümkündür. Birinci yöntem XAML kod tarafında Item özelliklerine değerler atayarak, bir diğeri ise yönetilebilir kod tarafında dataBind yöntemi ile verileri doldurmaktadır.

ComboBox

<ComboBox Name="comboBox1" SelectedValue="0">
    <ComboBoxItem>Item 1</ComboBoxItem>
    <ComboBoxItem>Item 2</ComboBoxItem>
    <ComboBoxItem>Item 3</ComboBoxItem>
</ComboBox>

ComboBox 'a elemanları <ComboBoxItem> özelliği yardımı ile elemanların eklenebilmesi mümkündür. Peki ekran görüntüsü nasıl oluyor.

mak51_1

Peki hangi amaçla kullanılabilir. İl/ ilçe/ belde seçilmesinde, Gridde gösterilecek olan verilerin kriteri olarak ve buna benzer veriler yardımı ile kullanılabilir.

ContextMenu & MenuItem

Kullanılan bir kontrole ilişkin özel menü oluşturulmak istendiğinde kullanılır. Sizinde denemenizde sorunsuzca çalışabilmesi için kullandığınız kontrolün ContextMenu özelliğini kullanmanız gerekmektedir. Örneğin, <TextBox.ContextMenu> şeklinde kullanılabilir.

<ContextMenu Name="cm">
    <MenuItem Header="Copy"/>
    <MenuItem Header="Paste"/>
    <MenuItem Header="Clear"/>
    <MenuItem Header="Details">
        <MenuItem Header="One"/>
        <MenuItem Header="Two"/>
    </MenuItem>
</ContextMenu>

İşlem sonrasında ekran görüntüsü aşağıdaki olacaktır.

mak59_2

Listbox

Listbox adından da anlaşılacağı gibi uygulamalar içerisinde toplu halde verilerin listelenmesini sağlar. Genel kullanım alanları, ekran üzerinde seçili olan kontrollerden gelen değerlerin gösterilmesi, iki listbox kontrolü ile birinden birine göndererek kullanım içerik düzenlemesini yapmak gibi yerlerde kullanılmaktadır.

<ListBox Name="lbl" Width="200" Height="150">
    <ListBoxItem Content="Deger" Selector.IsSelected="True"/>
    <ListBoxItem Content="Deger2"/>
    <ListBoxItem>Deger 3</ListBoxItem>
</ListBox>

İşlem sonrasında ekran görüntüsü aşağıdaki olacaktır.

mak59_3

ListView

Gridview benzeri bir yapı ile verilerinizi ekran üzerinde görüntüleyebilmenize olanak tanır. İçerisinde verileri elle girmek yerine genellikle, veri tabanından ya da xml veri içerisinde alınması tercih edilir.

<ListView SelectedIndex="0" Height="110"
     ItemsSource="{StaticResource Characters}">
    <ListView.View>
        <GridView>
            <GridViewColumn Width="100"
                DisplayMemberBinding="{Binding Last}"
                Header="Last Name" />
            <GridViewColumn Width="100"
                DisplayMemberBinding="{Binding First}"
                Header="First Name" />
            <GridViewColumn Width="60"
                DisplayMemberBinding="{Binding Gender}"
                Header="Gender" />
        </GridView>
    </ListView.View>
</ListView>

İşlemin sonrasında ekran görüntüsü aşağıdaki gibi olmuştur.

mak51_4

Daha sonrasında edit, insert, delete ve select işlemlerinizi yapabilmeniz mümkündür.

Tab Control

Son kullanıcıya tek ekranda birden fazla ekran göstermek istiyorsanız oldukça yararlı olabilecek bir kontroldür. Ya da Windows Form uygulamalarında adım adım bir işlem yaptırmak istediğinizde de oldukça başarılı bir uygulama olacaktır. Sonrasında ise adım adım işlemleri yapmış olduğunuz form kontrollerinin içerisinde yer alan değerleri DataBinding yardımı ile diğer kontrollerdeki değerler ile birleştirerek istediğiniz işlemleri yapabilmeniz mümkündür.

<TabControl Width="150" Height="100">
    <TabItem Header="One">
        <TextBlock>Hello World</TextBlock>
    </TabItem>
    <TabItem Header="Two" />
    <TabItem Header="Three" />
</TabControl>

İşlemin sonrasında ekran görüntüsü aşağıdaki gibi olmuştur.

mak59_5

Toolbar

Son kullanıcıya resimli olarak araç kutus göstermeye olanak tanımaktadır. Bu tür menülere Office uygulamalarından ve visual studio gibi geliştirme araçlarında alışığızdır. Örneğin kaydetme işlemine yarayan bir disket resmi gibi.

<ToolBar Margin="2">
    <Button Command="ApplicationCommands.Open"
         Height="40" Width="40"
         Background="{StaticResource OpenIcon}" />
    <Button Command="ApplicationCommands.Save"
         Height="40" Width="40"
         Background="{StaticResource SaveIcon}" />
</ToolBar>

İşlemin sonrasında ekran görüntüsü aşağıdaki gibi olmuştur.

mak51_6

TreeView TreeViewItem

Uygulamalarda içerikleri alt alta gösterme konusunda en çok yardım alınan kontrollerden biridir. Ayrıca WPF ile hazırlanan XBAP (Browser Application) uygulamalarında da oldukça yararlı olabilcek özelliklerden biridir. Peki TreeView kullanmak istediğimiz durumlarda verileri nasıl ekleyeceğiz. Bütün yazımız boyunca değindiğimiz kontrollerde olduğu gibi Item özelliğini kullanarak ekleme işlemini gerçekleştireceğiz. Ayrıca veri eklerken her zamanki gibi en temel anlamda iki yöntem bulunmaktadır. Bunlardan birincisi elle verileri eklemek, bir diğeri ise veri tabanı ya da web servis ile gelen verileri DataBinding yolu ile eklemektir.

<TreeView Width="150" Height="100"
    ItemsSource="{StaticResource Characters}">
    <TreeView.Resources>
        <HierarchicalDataTemplate
             DataType="{x:Type src:Character}"
             ItemsSource ="{Binding Fact}">
                <TextBlock Text="{Binding Name}" />
        </HierarchicalDataTemplate>
        <DataTemplate DataType="{x:Type src:Fact}">
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Name}" />
                <TextBlock Text=": " />
                <TextBlock Text="{Binding Value}" />
                </StackPanel>
         </DataTemplate>
    </TreeView.Resources>
</TreeView>

İşlemin sonrasında ekran görüntüsü aşağıdaki gibi olacaktır.

mak51_7

Hiyearişk bir şekilde verileri görüp üzerinde işlemler yapabilmeniz mümkündür.

Bu yazımızda en sık olarak kullandığımız Item kontrolleri incelemeye çalıştık. Bir sonraki yazımızda ise Item kontrollerde koleksiyonların nasıl kullanılacağını incelemeye çalışacağız.

Umarım yararlı olabilmiştir.

Turhal Temizer
info@turhaltemizer.com

Cumartesi, Ağustos 15, 2009

Ado.Net Entity Framework – Entity Model ile Windows Form Uygulamaları ve Bug

Veri tabanı ile ilişkisel olarak yapmış olduğumuz işlemleri Ado.Net Entity Framework ile yaptığımızda çok daha hızlı ve kolay bir şekilde yapabilinmesi mümkündür. Ne kadar basit yapılabileceğine ilişkin basit bir örnek verelim.

Visual Studio 2008 ile Windows From projesi oluşturuyor ve sonrasında entity data model template ‘ini projeye ekliyoruz. edmx ‘in içerisine gerekli olan tabloları ekledikten sonra işlemleri yapmaya başlayabiliriz.

Windows Formun üzerine aşadağıdaki kontrolleri ekliyoruz.

Windows Form

Tasarımı oluşturduktan sonra aşağıdaki kodları ekliyoruz.

using System;
using System.Windows.Forms;
using System.Data.Objects;
using System.Data.Objects.DataClasses;

namespace CourseManager
{
    public partial class CourseViewer : Form
    {
        public CourseViewer()
        {
            InitializeComponent();
        }
        private SchoolEntities schoolContext;
        private void closeForm_Click(object sender, EventArgs e)
        {
            schoolContext.Dispose();
            this.Close();
        }

        private void CourseViewer_Load(object sender, EventArgs e)
        {
            schoolContext = new SchoolEntities();
            ObjectQuery<Department> departmentQuery = schoolContext.Department.Include("Course").OrderBy("it.Name");
            try
            {
                this.departmentList.DisplayMember = "Name";
                this.departmentList.DataSource = departmentQuery;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void departmentList_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                Department department = (Department)this.departmentList.SelectedItem;
                courseGridView.DataSource = department.Course;
                courseGridView.Columns["Department"].Visible = false;
                courseGridView.Columns["CourseGrade"].Visible = false;
                courseGridView.Columns["OnlineCourse"].Visible = false;
                courseGridView.Columns["OnSiteCourse"].Visible = false;
                courseGridView.Columns["Person"].Visible = false;

                courseGridView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void saveChanges_Click(object sender, EventArgs e)
        {
            try
            {
                schoolContext.SaveChanges();
                MessageBox.Show("Changes saved to the database");
                this.Refresh();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }
}

Yukarıdaki kod bloglarını da projeye ekledikten sonra projemizi çalıştırdığımız aşağıdaki gibi bir görünüme sahip olacağız.

Debugging Windows Form

Evet herşey güzel gözüküyor.

Peki, bug nerede?

            {
                Department department = (Department)this.departmentList.SelectedItem;
                courseGridView.DataSource = department.Course;
                courseGridView.Columns["Department"].Visible = false;
                courseGridView.Columns["CourseGrade"].Visible = false;
                courseGridView.Columns["OnlineCourse"].Visible = false;
                courseGridView.Columns["OnSiteCourse"].Visible = false;
                courseGridView.Columns["Person"].Visible = false;

                courseGridView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
            }
Veri tabanında yer alan tabloların gözükmemesi için görünebilirliğini pasif yapıyoruz. Ancak bu işlem esnasında yanlışlıkla CourseGrade yerine CourseGrades yazdım ve karşımıza aşağıdaki gibi bir sonuç çıkmıştır.

EntityBug

Dikkat ederseniz yanlış yazdığımız bölüm sonrası kapatmış olduğumuz bütün tablo isimleri gözükmüştür.

Ancak her ne olursa olsun Entity Framework ‘ün uygulamalarımıza kattıkları oldukça fazladır. Bu tür Bug ‘lar da .Net Framework ‘ün tamamlanması ile büyük ihtimal ortadan kalkacaktır.

Eğer ki sizler de bu tür buglar keşkefederseniz www.connect.microsoft.com adresinden hata merkezine belirtebilirsiniz.

Umarım yararlı olabilmiştir.

Cuma, Ağustos 14, 2009

Windows 7 Upgrade – SQL Server 2008 Problem ve Çözümü

Eğer ki bilgisayarınızda Windows Vista kullanıyor ve Visual Studio 2010 Beta 1 kurulu ile Windows 7 ‘ye upgrade yaptığınızda bazı problemler ile karşılaşabiliyorsunuz. Aslına bakarsanız yaşadığınız tek problem SQL Server 2008 ‘in çalışmasında olacaktır. Bunun sebebi de Windows 7 ‘de .Net Framework 3.5.1. sürümünün yer almasının ve .Net Framework 4.0 Beta1 ‘in tam olarak stabil durumda olmamasında kaynaklanan sorun ile karşılaşabiliyorsunuz.

Sql Server 2008 management studio ‘yu açmak istediğiniz de paketleriniz eksiktir şeklinde bir hata mesajı alabiliyorsunuz. Çözüm olarak repair yapmak istediğinizde ise .Net Framework v4.0.2506 sürümün çalışmasında hata ile karşılaştım. Lütfen tekrar kurunuz şekilde bir mesaj veriyor. Bu durumda yapılması gereken download.microsoft.com adresine girdikten sonra .Net Framework 4.0 Beta1 sürümünü arattıktan sonra karşınıza çıkan ekrandan bu sürümü indiriniz ve sonrasında bilgisayarınıza kurunuz.

Yapmış olduğunuz bu işlemler sonrasında Upgrade sonrası yaşanan problemler ile karşılaşmayacak ve sorunsuzca uygulamlarınızda çalışabileceksiniz. 

Salı, Ağustos 11, 2009

VSTO 2008 – Calendar İçerisinde Yer Alan Kayıtlara Erişebilmek

Uygulama geliştirirken zaman içerisinde sıklıkla kullanmış olduğumuz Office uygulamalarına uygulama tarafında işlemler yaptırmamız gerekebiliyor. Özellikle de masaüstü ve web uygulamalarında outlook uygulamasına erişebilme ihtiyacımız da sık sık gündeme gelebiliyor. Bu işlemleri de .Net bünyesinde yer alan interop.Outlook ve office isim alanları ile sorunsuzca gerçekleştirebilmemize olanak vardır.

Fakat bazı durumlarda uygulamalar üzerinde office uygulamalarına değil de Office uygulamaların içerisinde uygulamalar geliştirmek gerekebiliyor. Bu noktada yapılması gereken daha önceki yazılarımızdan da açıkladığımız gibi Visual Studio Tools for Office 2008 (VSTO 2008) yardımı ile Office 2007 System uygulamalarına add-in yazmak olacaktır.

Not: Office System 2003 için add-in yazmak istediğimizde VSTO 2005 yardımı ile uygulama geliştirmemiz gerekmektedir. Ayrıca Office System 2003 sürümünün SP1 ve SP2 sürümlerinin bilgisayarınızda kurulu olması gerekmektedir.

Biz bu yazımızda Outlook uygulamasına bir add-in oluşturma yardımı ile takvime kayıtlı olan toplantı ve randevuları görüntüleyeceğiz.

Peki, neden bu tür uygulama ihtiyaç duyabiliriz. Örneğin, Outlook üzerinde yeni bir randevu talebi yaptığınızda aynı zaman aralığına birden fazla kayıt yapabilme olanağınız vardır. Bu işlemi outlook açılırken koyacağınız bir kontrol ile engelleyebilirsiniz. (Not: Yeni bir tablantı talebi esnasında aynı zaman aralığında birden fazla kayıt varsa otomatik olarak reddet seçeneği bulunmaktadır. Ancak bu işlem randevu taleplerinde olmamaktadır.) Ayrıca Outlook uygulamasının sağ köşesinde yer alan todo bar uygulamasında tek günlük gösterilen kayıtları haftalık ya da daha farklı bir varyasyon ile gösterilmesine olanak tanıyabilmeniz mümkündür. Ayrıca bu belirttiğim seçenekler dışında aklımıza gelmeyen daha bir çok ihtimal dahilinde kullanılabilmesi mümkündür.

Bu kadar açıklamadan sonra uygulamamızı sağlayacak olan metodu oluşturalım ve kod üzerinde açıklamaya devam edelim.

Bu aşamada yapılması gereken Visual Studio 2008 yardımı ile yeni bir proje oluşturmak olacaktır. Çalışacak olan proje şablonu ise Office tabının içerisinde yer alan Outlook 2007 add-in olacaktır.

ThisAddin.cs
public void GetAllCalendarItems()
{
    Microsoft.Office.Interop.Outlook.Application oApp = null;
    Microsoft.Office.Interop.Outlook.NameSpace mapiNamespace = null;
    Microsoft.Office.Interop.Outlook.MAPIFolder CalendarFolder = null;
    Microsoft.Office.Interop.Outlook.Items outlookCalendarItems = null;

    oApp = new Microsoft.Office.Interop.Outlook.Application();
    mapiNamespace = oApp.GetNamespace("MAPI"); ;
    CalendarFolder = mapiNamespace.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar);//GetFolder("test");
    outlookCalendarItems = CalendarFolder.Items;
    outlookCalendarItems.IncludeRecurrences = true;

    foreach (Microsoft.Office.Interop.Outlook.AppointmentItem item in outlookCalendarItems)
    {
        if (item.IsRecurring)
        {
            Microsoft.Office.Interop.Outlook.RecurrencePattern rp = item.GetRecurrencePattern();
            DateTime first = new DateTime(2008, 8, 31, item.Start.Hour, item.Start.Minute, 0);
            DateTime last = new DateTime(2008, 10, 1);
            Microsoft.Office.Interop.Outlook.AppointmentItem recur = null;

            for (DateTime cur = first; cur <= last; cur = cur.AddDays(1))
            {
                try
                {
                    recur = rp.GetOccurrence(cur);
                    MessageBox.Show(recur.Subject + " -> " + cur.ToLongDateString());
                }
                catch
                { }
            }
        }
        else
        {
            MessageBox.Show(item.Subject + " -> " + item.Start.ToLongDateString());
        }
    }

}

Outlook içerisinde yer alan bir uygulama erişbilmek için Office.Interop.Application sınıfını kullanmak gerekmektedir. Bu sınıf yardımı ile calendar nesnesine erişip işlem yaptırabilmemiz mümkündür. Ayrıca CalendarFolder içerisinde yer alan varsayılan takvime erişebilmek için yukarıdaki kod parçasını kullanabiliriz. Farklı isim bir calendara erişebilmek için ise yan tarafta yorum satırı yapılmış olan bölümü kullanabilmeniz mümkündür. Ayrıca randevular ve toplantıların Appointment sınıfı içerisinde tutulduğundan bir önceki yazımızda bahsetmiştik. Biraz önce calendar içerisinde yer alan değerleri AppointmentItem değerleri ile foreach döngüsü ile döndürdüğümüzde AppointmentItem 'ın değerleri bizim aradığımız sonuçlar olacaktır.

Bu yazımızda Outlook takvime kaydedilen randevu ve toplantılara ilişkin kayıtlara nasıl erişebileceğimizi ve bu değerleri ne amaçla kullanabileceğimizi açıklamaya çalıştık.

Umarım yararlı olabilmiştir.

Turhal Temizer

info@turhaltemizer.com

VSTO 2008 – Kod ile Calendar New Appointment İşlemi

Uygulama geliştirirken zaman içerisinde sıklıkla kullanmış olduğumuz Office uygulamalarına uygulama tarafında işlemler yaptırmamız gerekebiliyor. Özellikle de masaüstü ve web uygulamalarında outlook uygulamasına erişebilme ihtiyacımız da sık sık gündeme gelebiliyor. Bu işlemleri de .Net bünyesinde yer alan interop.Outlook ve office isim alanları ile sorunsuzca gerçekleştirebilmemize olanak vardır.

Fakat bazı durumlarda uygulamalar üzerinde office uygulamalarına değil de Office uygulamaların içerisinde uygulamalar geliştirmek gerekebiliyor. Bu noktada yapılması gereken daha önceki yazılarımızdan da açıkladığımız gibi Visual Studio Tools for Office 2008 (VSTO 2008) yardımı ile Office 2007 System uygulamalarına add-in yazmak olacaktır.

Not: Office System 2003 için add-in yazmak istediğimizde VSTO 2005 yardımı ile uygulam geliştirmemiz gerekmektedir. Ayrıca Office System 2003 sürümünün SP1 ve SP2 sürümlerinin bilgisayarınızda kurulu olması gerekmektedir.

Biz bu yazımızda Outlook için add-in yardımı ile Calendar nesnesine nasıl kayıt eklemeye göz atacağız.

Bu aşamada yapılması gereken Visual Studio 2008 yardımı ile yeni bir proje oluşturmak olacaktır. Çalışacak olan proje şablonu ise Office tabının içerisinde yer alan Outlook 2007 add-in olacaktır.

ThisAddin.cs kod bloğunun içerisinde outlook açıldığı anda yapılacak işlemleri yapabilmeniz mümkündür. İstersenizde mainRegionForm ekleyerek outlook içerisinde istediğiniz bir menünün altında uygulamanızın çalışmasına olanak tanıyabilirsiniz. Biz işlemlerimizi outlook 'un çalışması anında yapacağız.

Visual Studio üzerinden outlook 'ta yeni bir randevu talebi yapabilmemiz için Outlook.Appointment sınıfına ait olan özellikleri kullanmamız yeterli olacaktır. Bu işlemi gerçekleştirmek için gerekli olan kod bloğu aşağıdaki gibi olacaktır.

ThisAddin.cs
Outlook.AppointmentItem newAppointment = (Outlook.AppointmentItem)this.Application.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olAppointmentItem);
newAppointment.Start = DateTime.Now.AddHours(2);
newAppointment.End = DateTime.Now.AddHours(3);
newAppointment.Location = "ConferenceRoom #2345";
newAppointment.Body ="Bla bla şirketi için grup projesidir.";
newAppointment.AllDayEvent = false;
newAppointment.Subject = "Group Project";
newAppointment.Recipients.Add("Turhal Temizer");
Outlook.Recipients sentTo = newAppointment.Recipients;
Outlook.Recipient sentInvite = null;
sentInvite = sentTo.Add("Murat Borlu");
sentInvite.Type = (int)Outlook.OlMeetingRecipientType.olRequired;
sentInvite = sentTo.Add("Hakan Bayısın");
sentInvite.Type = (int)Outlook.OlMeetingRecipientType.olOptional;
sentTo.ResolveAll();
newAppointment.Save();
newAppointment.Display(true);

Belirtmiş olduğumuz bu kod bloğunu ThisStartup olayına eklersek outlook açıldığı anda yeni bir randevu kaydını gerçekleştirecektir.

Aklınıza şöyle bir soru takılabilir. Burada yer alan bütün özelliklere kod içerisinden kayıtlar eklenmiştir. Ben dışarıdan eklenebilen bölümleri form üzerine eklemiş olduğum kontroller yardımı ile yapabilir miyim? Evet yapılabilir. Yazının başında da bahsettiğimiz üzere MainRegionForm olarak geliştirilmiş olan uygulamalarda eklemiş olduğumuz kontrolleri sanki windows form uygulaması geliştirmişiz gibi kullanbilmemiz mümkündür.

Bir sonraki yazımızda Calendara eklemiş olduğumuz kayıtları nasıl listeleyebileceğimizi inceleyemeye çalışacağız.

Umarım yararlı olabilmiştir.

Turhal Temizer

info@turhaltemizer.com

WPF – Routed Event Kontrol Etmek

Windows Presentation Foundation (WPF) ile uygulama geliştirirken karşılaştığımız farklılıklara ne tür çözümler getirebileceğimizi incelemeye devam ediyoruz. Bu sefer inceleyeceğimiz konu WPF uygulamalarında kullanmış olduğumuz Routed Event ları incelemek olacaktır. Event kontrolü profesyonel projeleri yönetirken, süreçleri takip ederken ve uygulama geliştirirken oldukça gerekli bir işlemdir. Fakat bu işlemi hadi kontrol edelim diyince yapamıyoruz. Peki, nasıl yapabiliyoruz? İncelemeye çalışalım.

Projelerin kontrolü esnasında kullandığımız eventları takip etmek istediğimiz zamanlar olur. Bu durumda event manager sınıfnı kullanmak yeterli oluyordu. Ancak bu durumda WPF kullanırken biraz daha farklılaşıyor. EventManager sınıfında dönen kayıtların içerisinde dolaşıp EventManager 'in alt özelliklerinden RegisterClassHandler ile yakalanması gerekmektedir. Sonrasında bu event ları görebilir duruma geliyoruz.

Şimdi küçük bir örnek yardımı ile nasıl kontrol edebileceğimize göz atalım.

Visual Studio 2008 ya da 2010 üzerinde WPF projesi oluşturuyoruz. Sonrasında oluşturmuş olduğumuz projeye UserControl ekliyoruz. Sonrasında userControlLoaded olayını içine alacak şekilde aşağıdaki kod bloğunu ekliyoruz.

UserControl1.xaml.cs
using System;
using System.Windows;
using System.Windows.Controls;

namespace EventManager_
{
    /// <summary>
    /// Interaction logic for UserControl1.xaml
    /// </summary>
    public partial class UserControl1 : UserControl
    {
        public UserControl1()
        {
            InitializeComponent();
            Loaded += new RoutedEventHandler(UserControl1_Loaded);
        }

        void UserControl1_Loaded(object sender, RoutedEventArgs e)
        {
            var eventManager = EventManager.GetRoutedEvents();
            foreach (var routedEvent in eventManager)
            {
                EventManager.RegisterClassHandler(typeof(UserControl1), routedEvent, new RoutedEventHandler(handler));
            }
        }
        internal static void handler(object sender, RoutedEventArgs e)
        {
            Console.WriteLine(e.OriginalSource + "=>" + e.RoutedEvent);
        }
    }
}

Yapmış olduğumuz bu işlem sonrasında artık çalıştırılan eventları izlemek kalıyor. Peki çalıştırdığımızda nasıl bir görünüme kavuşuyor. 

RoutedEvent

Formun üzerinde fare ile dolaştığımızda mouse olayları, tamam diyim bilgilendirmeyi kapattığımızda ise bu mesajı gösteren olayı görürüz.

Umarım yararlı olabilmiştir.

Turhal Temizer

info@turhaltemizer.com

Pazartesi, Ağustos 10, 2009

C#Nedir? Yeni Yüzü ile Karşınızda

Benim de editörleri arasında yer aldığım C#Nedir?com siteisi uzun süren yenilenme sürecini tamamlamıştır. Bildiğiniz üzere yıllar .Net ile sizlere en son teknolojiler ile ilgili güncel ve bi o kadar da kaliteli içerik sunmayı amaçlayan sitemiz asp ile yayın hayatını sürdürmekteydi. Bizlerde uzunca bir süredir asp.net ile sayfanın yeniden hazırlanmasını düşünüyorduk ve sonunda bu süreç tamamlanmış ve sizlerin kullanımına hazır bir duruma gelmiştir. C#Nedir?com

8. yılını kutlayan sitemiz bu yeni görünümüne yeni özelliklerde eklenmiştir. Hepinizin beğeni ile takip ettiğiniz .Net TV bölümünde yer alan vidyoları artık RIA (Silverlight) ile hazırlanmış olan sol bölümde hemen izleyebilme olanağına sahip olacaksınız. Ayrıca Serbet Köşe, Canlı Köşe ve Blogroll bölümleri de sizlerin kullanımına sunulmuştur.

Ayrıca sizlerden biz editörlere sorulan en sık soru nasıl yazar ve editör olabiliriz ile ilgilidir. Bu konuda Burak Selim Şenyurt kendi blogunda çok güzel bir yazı hazırlamıştır. Bu yazıyı okuyarak aklınıza takılan soruları giderebilmeniz mümkündür.

Yeni görünüm ile ilgili yorumlarınızı bekliyoruz…

Cumartesi, Ağustos 08, 2009

WPF - CheckBox ile Form Elementlerinin Görünürlüğünün Değiştirilmesi

Windows Presentation Foundation (WPF) ile uygulama geliştirirken karşılaştığımız farklılıklara ne tür çözümler getirebileceğimizi incelemeye devam ediyoruz.

Form üzerine yerleştirmiş olduğumuz kontrollerden bazılarını checkbox yardımı ile görünürlüğünü değiştirmek isteyebiliriz. Bu işlem sonucunda örneğin form üzerinde bir checkbox bir tane de textbox var. CheckBox 'ın seçili durumunu değiştirdiğim durumda textbox 'ın form üzerinden kaybolmasını istiyorum. Peki, bahsettiğim bu işlemi Windows Form 2.0 ile nasıl yapabiliyordum.

textbox1.Visible = checkBox1.Checked;

Yukarıda görmüş olduğunuz ufak kod parçası yazıldığında işlem kolay bir şekilde gerçekleşiyor. Peki, bu işlem WPF üzerinde nasıl yapılabiliyor. Windows Forma göre biraz daha zor. Nasıl yapabilirizi inceleyelim.

WPF uygulaması oluşturuyor ve sonrasında oluşturulan projeye sınıf ekliyoruz ve aşağıdaki kodları ekliyoruz. Bu arada WPF ile kullanabileceğimiz çok güzel bir enum bulunmaktadır. Form elementlerinin Visibility özelilkleri enum olarak tanımlanmış ve Visible, Collapsed ve Hidden değerleri atanmıştır. Bizde kodumuzda bu özelliklerden yararlanacağız.

Converter.cs
using System;
using System.Windows.Data;
using System.Windows;

namespace ShowHide.Convert
{
    class Converter:IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter,                 System.Globalization.CultureInfo culture)
        {
            Visibility vb = Visibility.Visible;
            try
            {
                var x = bool.Parse(value.ToString());
                if (x)
                    vb = Visibility.Visible;
                else
                    vb = Visibility.Collapsed;
            }
            catch (Exception)
            {}
            return vb;
        }

        public object ConvertBack(object value, Type targetType, object parameter,         System.Globalization.CultureInfo culture)
        {
            return value;
        }
    }
}

Sıra geldi XAML kod üzerinde yapacağımız işlemlere, ekranın üzerine bir tane textbox ve checkbox ekliyoruz. Sonrasında ise oluşturmuş olduğumuz sınıfı xaml:namespace olarak xaml kod tarafında gösteriyoruz.

Window1.xaml
<Window x:Class="ShowHide.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300"
    xmlns:converter="clr-namespace:ShowHide.Convert" >
    <StackPanel Orientation="Vertical">
        <StackPanel.Resources>
            <converter:Converter x:Key="boolToVis"/>
        </StackPanel.Resources>
        <CheckBox Content="Tikla textbox kaybolsun" Name="checkGosterTextBox" />
        <TextBox Text="checkbox a tikladiğinda kaybolur" Visibility="{Binding Path=IsChecked,             ElementName=checkGosterTextBox, Converter={StaticResource boolToVis}}"/>
    </StackPanel>
</Window>

XAML kod da DataBinding ile oluşturulan sınıfı isim alanı olarak ekliyoruz. Sonrasında da Visibility özelliklerini buradan almasına olanak tanıyoruz.

Bu işlemler sonrasında form elementlerini istediğimiz şekilde görünebilirliği ile oynayabilyoruz. Windows Form 2.0 ile hazırlamış olduğumuz projelere oranla biraz daha zor görünse de kendi sınıfımızı oluşturduktan sonra çok rahat bir şekilde kullanabilir duruma geliyoruz.

Umarım yararlı olabilmiştir.

Turhal Temizer

info@turhaltemizer.com

Çarşamba, Ağustos 05, 2009

WPF – RadioButton ve DataBinding

Windows Presentation Foundation (WPF) ile uygulama geliştirenlerin, Windows Form (WF) uygulamalarını geliştirirken alışkın oldukları yöntemlerin bazılarını kullanamadıkları için sorunlar yaşayabiliyorlar. Ancak bu sorunların oluşması WPF 'in yetersizliğinden değildir. Yalnızca WF ile yapılan işlemleri biraz daha farklı olarak WPF üzerinde yapmaları gerekiyor. Çok doğal olarakta bu çözümler uygulama geliştirirek çözülüyor.

Karşılaşılan sorunlardan biri de Radio Button kontrolünü DataBinding ile kullanmak istenildiğinde sorun yaşanıyor. Yazımızda bu sorunun nasıl çözüleceğini incelemeye çalışacağız. Ayrıca bu sorunun çözümlerini global forumlarda araştırdığımızda da en çok karşılaşılan sorunlar arasında olduğunu görürüz.

İlk olarak Visual Studio ortamında (VS2008 yada VS2010 olabilir) yeni bir WPF projesi oluşturuyoruz. Daha sonrasında ise form üzerine iki tane RadioButton kontrolü ekliyoruz ve XAML 'e kod tarafında aşağıdaki değişiklikleri uyguluyoruz.

Window1.xaml
<Grid>
    <RadioButton
        Grid.Row="0"
        Grid.Column="0"
        GroupName="rbGroup"
        Margin="8,0,0,0"
        VerticalAlignment="Center"
        Content="Basarili"
        x:Name="rbSuccess"
        IsChecked="{Binding Path=IsSuccess, Mode=TwoWay, Converter={StaticResource nullableBooleanConverter}}" />
    <RadioButton
        Grid.Row="0"
        Grid.Column="1"
        GroupName="rbGroup"
        Margin="8,0,0,0"
        VerticalAlignment="Center"
        Content="Basarisiz"
        x:Name="rbFailure" /> "
</Grid>

RadioButton kontrolünün seçim işlemi için iki adet özelliği vardır. Bunlar;
  •Checked
  •IsChecked

Checked, seçili olmasını sağlar. IsChecked bool değer dönecek durumlarda kullanılır. Bu da bizim sorunumuzu kısmen çözüyor gibi gözüküyor. Çünkü yukardaki örnekte yapılan işlemler sonucunda başarılı ya da başarısız seçilmesi isteniyor.

XAML kod tarafında kullandığımız özelliklere göz atalım. İki adet radiobutton eklendi. Bunlardan birincisi işlem sonucunda başarılı olduğunu diğeri ise başarısız olduğunu göstermektedir. Dikkat edilmesi gereken noktalardan birincisi ilk radiobutton kontrolünde IsChecked özelliği DataBinding ile beslenirken diğerinde bu işlem yapılmamıştır. Bu sebepten ötürü yalnızca başarılı yazacak olan RadioButton istediğimizi gerçekleyecektir. Diğerinde ise herhangi bir işlem olmayacaktır. Diğer yandan DataBinding işlemini gerçekleyen bölümden nullableBooleadnConverter resource 'ını göreceksiniz. Bu işlem geri dönüş değeri doğru ise 1 yanlış ise 0 dönmesini sağlayacaktır. Bu durumda yapılması gereken ikinci RadioButton kontrolüne de DataBinding 'i eklemek gerekecektir.

Window1.xaml
<Grid>
    <RadioButton
        Grid.Row="1"
        Grid.Column="0"
        GroupName="rbGroupSuccess"
        Margin="8,0,0,0"
        VerticalAlignment="Center"
        Content="Basarili"
        x:Name="rbSuccess"
        IsChecked="{Binding Path=IsSuccess, Mode=TwoWay, Converter={StaticResource nullableBooleanConverter}, ConverterParameter=true}" />

    <RadioButton
        Grid.Row="1"
        Grid.Column="1"
        GroupName="rbGroupFailure"
        Margin="8,0,0,0"
        VerticalAlignment="Center"
        Content="Basarisiz"
        x:Name="rbFailure"
        IsChecked="{Binding Path=IsSuccess, Mode=TwoWay, Converter={StaticResource nullableBooleanConverter}, ConverterParameter=false}" />
</Grid>

XAML kod bloğunda convert işlemi için kullandığımız CS kod.

Window1.xaml.cs
[ValueConversion(typeof(bool?), typeof(bool))]
public class SuccessConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        bool param = bool.Parse(parameter.ToString());
        if (value == null)
        {
            return false;
        }
        else
        {
            return !((bool)value ^ param);
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        bool param = bool.Parse(parameter.ToString());
        return !((bool)value ^ param);
    }
}

Yapmış olduğumuz mantıksal işlemleri daha detaylı olarak aşağıda verilen tablodan yararlanabilirsiniz.

value
(IsSuccess)
param result
RadioButton.IsChecked = !(value ^ param)
true true true 
false true false
true false false
false false true

(^ operatörü C# için XOR işlemini gerçekleştirir.)

Umarım yararlı olabilmiştir.

Turhal Temizer

info@turhaltemizer.com

Windows 7 Sürümleri Türkiye Fiyatları Açıklandı

26 Haziran 2009, İstanbul - Microsoft’un bütün dünyada 22 Ekim 2009 tarihi itibarıyla tüketiciyle buluşacak yeni işletim sistemi Windows 7’nin farklı sürümleri için, Türkiye’de önerilen (kutu ürünler için) son kullanıcı liste fiyatları belirlendi. Paralel olarak PC üreticileri ile birlikte OEM Güncelleme Garantisi Programını başlattı.

Windows 7 Sürümleri Türkiye Fiyatları (kutu ürünler için)

Windows 7 Türkiye’de (kutu ürün olarak) Home Basic, Home Premium, Professional ve Ultimate sürümleriyle tüketicilerle buluşacak. Türkiye için açıklanan son kullanıcı liste fiyatlarına (vergiler hariç) göre bu sürümler aşağıdaki gibidir.

Tam Sürüm

Home Basic
123.00 US$
Home Premium
145.00 US$
Professional
236.00 US$
Ultimate
250.00 US$

Dün Microsoft Global tarafından açıklanan listede Windows 7’nin farklı sürümlerinin yurtdışındaki, özellikle de ABD’deki satış fiyatlarını içermektedir. Bu fiyatlar aşağıda görülebilir:


Tam Sürüm
Yükseltme Sürümü

Home Premium
199.99 US$
119.99 US$

Professional
299.99 US$
199.99 US$
Ultimate
319.99 US$
219.99 US$

Türkiye’de sadece full versiyonu satışa sunulacak olan Windows 7 sürümleri, ABD full versiyon satış fiyatlarından daha uygun fiyatlarla kullanıcıların hizmetine sunulacaktır.

Windows 7 OEM Güncelleme Garantisi Programı

26 Haziran 2009’dan itibaren “Windows 7 OEM Upgrade Garantisi” programı başlatılmıştır. Buna göre uygun Windows sürümlerini yüklü olarak yeni bilgisayar alan tüketiciler Windows 7’ye ücretsiz* yazılım güncelleme hakkına sahip olacaklardır. 

Microsoft tarafından ücretsiz olarak sağlanmış olan Windows 7 Medya’sı, COA ve ürün anahtarının tüketiciye ulaştırılması için PC Üreticisi tarafından ilave ücretler talep edilebilir.

Bu imkandan sadece aşağıda listelenmiş Windows sürümleri faydalanabilmektedir:

• Windows Vista Home Premium
• Windows Vista Business
• Windows Vista Ultimate

Aşağıda listelenmiş Windows sürümleri ise OEM Güncelleme programı ile GÜNCELLENEMEMEKTE ancak Windows 7 Full Sürüm kutu ürünü ile Windows 7’ye yükseltilebilmektedir:

• Windows Vista Home Basic
• Windows Vista Starter
• Tüm Windows XP Sürümleri

Kaynak: Microsoft Türkiye

Step-By-Step: How To "Upgrade" from Windows XP to Windows 7

You've likely heard that you can't straight upgrade from Windows XP to Windows 7. You can upgrade from Windows Vista to Windows 7, but not from XP to 7. Some folks who apparently have a pile of operating systems discs have proposed that one could upgrade from XP to Vista, then from Vista to Windows 7, but I think that's insane. Most PC experts will recommend you start fresh and "pave" your machine anyway. I think this is a hassle, but in the case of XP to 7, it's necessary.

I was asked to "upgrade" a relative's machine from Windows XP to Windows 7, so I figured this was a good time to write-up the experience in case it helps others.

This is a screenshot heavy post, so bear with me, this is a tale best told with pictures.

Disclaimer: I do work for Microsoft, but I don't work with the Win7 team so this is just one dude's opinion. If this walkthrough paralyzes your hamster or causes you any emotional distress, we never spoke and I don't know you. You found it on the intertubes for free, so what do you expect. Good luck.

My relative has a nice basic Dell desktop with a gig of RAM and a 100 gig HD. The machine is 3-4 years old, so I didn't think a Windows 7 install would be unreasonable.

First, I put my Windows 7 disc into the Windows XP machine and got this screen:

f2

4 Personally, I wish that there was a "migrate your settings from Windows XP" button or something on this page. It's a great feature and it's not advertised enough.

I clicked "What to know before installing Windows."

The problem here, and with most OS installs regardless of vendor is that, at some point, reading and comprehension is required. Unless you're lucky enough to just click "next, next, next, finish," you need to read.

The instructions that show up at this point (shown at right) have a section on "Upgrading from Windows XP." In that section there's a link to http://go.microsoft.com/fwlink/?LinkID=142337 which is the one-stop-shopping center for Upgrade Info.

Specifically, the section on Upgrading from Windows XP to Windows 7 is what I needed.

The "Windows Easy Transfer" application is on the Windows 7 DVD in:

[CDDRIVE:]\support\migwiz\migsetup.exe

They probably named it migsetup.exe to make sure it wasn't named setup.exe and save some trouble with confused folks, but still, it was a smidge counter-intuitive.

Windows Easy Transfer

Here's the Windows XP machine running Windows Easy Transfer.

1

6

I've never see an "Easy Transfer cable" in the real world, but apparently they do exist on Amazon. Fortunately I had a small external hard drive, so I just used that since both the "old" and "new" computer were the same machine.

I was then asked this very tricky question, for which there is only one answer. ;)

7

Why yes, Windows Easy Transfer, this IS my old computer.

Next it found the 3 accounts on this XP machine as well as Shared Items and started tallying them up.

It spends some time (15 minutes or so in my case) estimating just how much non-Program data is on the machine.

9

In our case, it was about 15 gigs of Photos and general crap. It shows you what user has what stuff.

10

It also has a nice, but subtle, customize link under each name you should click on. You can be very specific as to the folders and settings you care about.

Hit next and wait a while. I waited about an hour, but it was telling me what was up the whole time.

11

It made a giant archive ".MIG" file on my portable hard drive.

image

Installing Windows 7

Next, I actually installed Windows 7. I decided to let Windows 7 format the hard drive so I could start from scratch. I could have just installed 7 over the top, but the hard drive was a bit untidy, so I just took the opportunity to start fresh.

I installed Windows 7 the regular way and created a single Administrator user to start with.

Next, I ran Easy Transfer from the Windows 7 Start Menu. At this point, remember that nothing has been transferred and I have a fresh Windows 7 machine.

Select that this is your new computer and pick the migration file from the external hard drive.

Capture

When you see the list of names in the migration file, click Customize. This allows you to map the old names to potentially new names/users on the new machine, or exclude names completely.

You'll have to wait a while again, I waited about an hour. After the process is done, you get the option for very detailed report. It shows not only what was transferred in detail but also a list of applications "you might want to install."

12

This was very helpful as it reminded me of the different apps I needed to get on this machine to make it ready for my relative.

13

It's true that this isn't an "upgrade" as it's a "migration" but an hour or so later I was all set and my relative had a machine with all the things they were used to exactly where they expected them to be. Documents, Photos, Accounts, all brought over cleanly. It even remembered that their daughter wasn't an admin and brought over the Parental Controls settings.

If you've got an XP machine and you're looking to go Windows 7, I recommend you at least give this built-in tool a look. It saved me a few hours of setup at least and brought over settings that I'd have had to recreate. Even usernames and passwords for iTunes and Zune and MSN Messenger came along.

Source: Hanselman Blog

Salı, Ağustos 04, 2009

WPF - UserControllerin Toolbox 'a Eklenmesi

Windows Presentation Foundation ile çalışırken ortak bir tasarım şablonunu sık sık kullanmak gerekebilir. Bu durumda arka planda yer alan yüzlerce satır kodu yeni formaların içerisinde kullanmak yerine User Control oluşturarak çok daha hızlı bir şekilde kullanabilmemiz mümkün olacaktır. User Control kullanmanın en büyük avantajı benzer işlemleri yapacak modülleri her kullanımda tasarlamak ve yeniden arka plan kodlarını yazarken harcanacak zaman yerine hazırlanacak olan bir User Control ile benzer işleri yapacak yapıları tek seferde yapabileceğiz. Peki hazırlamış olduğumuz User Controllere nereden erişebiliriz. Bu yazımızda hazırlamış olduğumuz User Controlleri Visual Studio ortamında toolbox 'a nasıl ekleyeceğimizi inceliyor olacağız.

İlk olarak yapılması gereken bir User Control oluşturmak olacaktır. Bu işlem için Visual Studio 2008, Visual Studio 2010, Expression Blend 2 ya da Expression Blend 3 üzerinde geliştirebilmeniz mümkündür. Biz bu sefer örneğimizi Visual Studio 2010 Beta1 üzerinde geliştireceğiz. (Diğer ürünler üzerinde de aynı işlemleri uygulamanız durumunda herhangi bir farklılık ile karşılaşmayacaksınız.)

mak58_1_1

User Control ü hazırlayacağımız projeyi oluşturduk. Bir de bu User Control ü kullanacağımız WPF uygulaması oluştuyoruz. İşlemler sonrasında Solution Explorer ekranında aşağıdaki dosyalar oluşmuştur.

mak58_1_2

UserControl projesinin içerisinde yer alan UserControl1.xaml dosyanın içerisine aşağıda yer alan kod bloğunu ekliyoruz.

UserControl1.xaml
<UserControl x:Class="WpfMyControl.UserControl1"
                    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
                    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
                    mc:Ignorable="d"
                    d:DesignHeight="300" d:DesignWidth="300">
    <Canvas>
        <Path Fill="Blue" Margin="15,15,15,15">
            <Path.Data>
                <EllipseGeometry x:Name="GeometrikEllipsim" Center="0,0" RadiusX="15" RadiusY="15"/>
            </Path.Data>
            <Path.Triggers>
                <EventTrigger RoutedEvent="Path.Loaded">
                    <BeginStoryboard Name="BaslaAnimasyon">
                        <Storyboard>
                            <PointAnimation Storyboard.TargetProperty ="Center" Storyboard.TargetName="GeometrikEllipsim"
                                                    Duration="0:0:3" From="0,0" To="156,267" RepeatBehavior="Forever"/>
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
            </Path.Triggers>
        </Path>
    </Canvas>
</UserControl>

User Control 'ü oluşturduk. Şimdi ise oluşturulmuş olan User Control 'e ikon ekleyeceğiz. Sebebi ise Toolbox 'a eklendiğinde kontrolün yanında bizim istediğimiz ufak bir ikonun gözükmesidir.

İlk olarak yapılması gereken UserControl1.xaml.cs kod dosyasını Using System.Drawing isim alanını eklemek olacaktır. Bu isim alanını projemize ekleyeceğimiz ikonu göstermek için kullanacağız. Ayrıca ekleyecek olduğumuz resmin sürekli projemizde entegre olabilmesi için Resource dosyasına ekliyoruz. Peki Resource lara nereden ulaşabiliriz. Visual Studio 2010 ekranında yer alan menülerden Project-> ProjectProperties ->Resources adımlarını izleyerek ulaşılabilmesi mümkündür.

mak58_1_3

İkon oluşturduktan ya da var olan bir ikonu ekledikten sonra bu resme ilişkin özelliklerden resource dosyasına gömülü olarak çalışmasını belirten seçeneği seçiyoruz.

mak58_1_4

Oluşturma işlemi gerçekleştirilen UserControl 'ün cs kod dosyasına resource içerisine eklemiş olduğumuz resmi görebilmesi için aşağıdaki gibi bir düzenleme yapıyoruz

UserControl1.xaml.cs
using System.Windows.Controls;
using System.Drawing;

namespace WpfMyControl
{
    /// <summary>
    /// Interaction logic for UserControl1.xaml
    /// </summary>
    ///
    [ToolboxBitmap(typeof(UserControl1))]
    public partial class UserControl1 : UserControl
    {
        public UserControl1()
        {
            InitializeComponent();
        }
    }
}

Artık UserControl oluşturma işlemini tamamlamış bulunuyoruz. Uygulamamızı built ettikten sonra WPF projelerinde yer alan Toolbox 'larda nasıl kullanılacağını inceleyelim.

Genel .Net bilgilerimizden ötürü eğer bir sınıf, control v.b. projeler derlendiği zaman arka planda kullanılabilir bir *.dll dosyası oluşturulmaktadır. Bizlerde WPF uygulaması açıkken toolbox üzerinde sağ tıklama yaptıktan sonra ChoosItems seçeneğine tıklayarak oluşturulan dll 'i ekliyoruz ve çalışabilir duruma geliyoruz.

mak58_1_5

Oluşturulan UserControl 'ün dll 'ini buluyoruz.

mak58_1_6

Eklediğinizde toolbox içerisinde kontrol aşağıdaki gibi gözükecektir.

mak58_1_7

Bu işlem sonucunda kendi User Control ümüzü olşuturmuş ve WPF uygulamalarında kullanılmak üzere toolbox ın içerisine eklemiş bulunuyoruz. Tekrar hatırlatmak gerekirse özellikle iş uygulamalarında benzer işlemleri tekrar tekrar yaparak çalışmak istenmeyen durumlar arasında yer almaktır. User Control ler yardımı ile çok fazla kullanılacak bir işlemi sadece bir kez hazırladıktan sonra onu bileşen olarak sürekli kullanabilmemize olanak vardır. Bu işlem bizim süreçlerimizi oldukça oldukça hızlandıracaktır.

Umarım yararlı olabilmiştir.

Turhal Temizer

info@turhaltemizer.com