<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>huseyint.com</title>
	
	<link>http://huseyint.com</link>
	<description>Hüseyin'in yeri</description>
	<pubDate>Wed, 22 Jul 2009 22:00:26 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/huseyint" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>Firefox adres çubuğunu daha da kullanışlı hale getirin</title>
		<link>http://feedproxy.google.com/~r/huseyint/~3/ap8TZvgwrXA/</link>
		<comments>http://huseyint.com/2008/06/firefox-adres-cubugunu-daha-da-kullanisli-hale-getirin/#comments</comments>
		<pubDate>Sun, 29 Jun 2008 17:34:59 +0000</pubDate>
		<dc:creator>Hüseyin Tüfekçilerli</dc:creator>
		
		<category><![CDATA[Firefox]]></category>

		<guid isPermaLink="false">http://huseyint.com/?p=48</guid>
		<description><![CDATA[Semantic (anlamsal) webin önemli unsurlarından biri de web sayfalarının URL&#8217;lerinin (URI mi deseydik acaba?) kısa, öz ve kullanıcı tarafından da anlaşılabilir olmasıdır. Bilgisayarlar açısından bir sorun yok, onlar kurallara uygun olduğu sürece bize doğru sayfayı gösterir ama bu adreslerin kullanıcılar tarafından da anlaşılabilir olması, sadece bir sitenin domain kısmının değil alt sayfalarının da akılda tutularak [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://en.wikipedia.org/wiki/Semantic_Web">Semantic (anlamsal) webin</a> önemli unsurlarından biri de web sayfalarının <acronym class="uttInitialism" title="Uniform Resource Locator">URL</acronym>&#8217;lerinin (<a href="http://www.damnhandy.com/2007/11/19/uri-vs-url-whats-the-difference/">URI mi deseydik acaba?</a>) kısa, öz ve kullanıcı tarafından da anlaşılabilir olmasıdır. Bilgisayarlar açısından bir sorun yok, onlar kurallara uygun olduğu sürece bize doğru sayfayı gösterir ama bu adreslerin kullanıcılar tarafından da anlaşılabilir olması, sadece bir sitenin domain kısmının değil alt sayfalarının da akılda tutularak adres çubuğuna elle girilebilir olması hoş olmaz mı? Son zamanlarda biraz da Web 2.0 furyasının sayesinde web sitesi geliştiricileri sitelerinin <acronym class="uttInitialism" title="Uniform Resource Locator">URL</acronym> yapısına dikkat etmeye başladı. Böylelikle <acronym class="uttInitialism" title="Uniform Resource Locator">URL</acronym>&#8217;ler kısaldı, bir kaç kırılımdan oluşan bir şekil aldı ve en önemlisi sadece bilgisayarların anlam vereceği abidik gubidik karakter silsileleri olmaktan çıktı. Bununla beraber kendimden örnek vermem gerekirse bir sitede bir yerden başka yere geçerken sayfada gideceğim yeni sayfaya uygun link bulmaya çalışmaktansa, gider elle adres çubuğuna o alt sayfanın adresini girer oldum. Sanki bilgisayarımın sabit diskinde dolaşırmış gibi. Veya bulunduğum sayfa hiyerarşisine göre bir üst seviyeye geçmek istediğimde adres çubuğunda şu an bulunan adresin son segmentini silerek bu sayfaya gitmeye çalışır oldum, ve genelde de gidebildim. Hani nasıl derler, <acronym class="uttInitialism" title="Uniform Resource Locator">URL</acronym> hackerı oldum çıktım <img src='http://huseyint.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Eğer siz de kendinize bu şekilde <acronym class="uttInitialism" title="Uniform Resource Locator">URL</acronym>&#8217;ler ile haşır neşir buluyorsanız ve Firefox web tarayıcısını kullanıyorsanız size süper bir eklenti tavsiye etmek istiyorum: <a href="http://en.design-noir.de/mozilla/locationbar2/">Locationbar²</a>. Bu eklenti yardımı ile adres çubuğunuzda bulunan <acronym class="uttInitialism" title="Uniform Resource Locator">URL</acronym> segmentlerini tıklanabilir linkler haline getirebilir ve bu segmentlerin görünümün daha anlaşılır bir hale sokabilirsiniz. Benim eklenti ayarlarım şu şekilde:</p>
<p align="center"><img src="http://huseyint.com/wp-content/uploads/2008/06/locationbar-options.png" alt="" title="Locationbar² seçenekleri" width="413" height="558" /></p>
<p>Bu ayarlar ile fare imlecinizi adres çubuğunun alt kısmına yaklaştırdığınızda adres link şeklini alıyor ve o segmente kadar olan <acronym class="uttInitialism" title="Uniform Resource Locator">URL</acronym>&#8217;ye tıklamanız suretiyle gidebiliyorsunuz. Başta biraz kullanım zorluğu çekebilirsiniz ancak sonraları alışkanlık yapıyor ve kullandığınız her tarayıcıda arar oluyorsunuz.</p><img src="http://feeds.feedburner.com/~r/huseyint/~4/ap8TZvgwrXA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://huseyint.com/2008/06/firefox-adres-cubugunu-daha-da-kullanisli-hale-getirin/feed/</wfw:commentRss>
		<feedburner:origLink>http://huseyint.com/2008/06/firefox-adres-cubugunu-daha-da-kullanisli-hale-getirin/</feedburner:origLink></item>
		<item>
		<title>Windows Forms ile kontrole Etched border eklemek</title>
		<link>http://feedproxy.google.com/~r/huseyint/~3/nBO1bhlP_CI/</link>
		<comments>http://huseyint.com/2008/05/windows-forms-ile-kontrole-etched-border-eklemek/#comments</comments>
		<pubDate>Sat, 10 May 2008 09:20:28 +0000</pubDate>
		<dc:creator>Hüseyin Tüfekçilerli</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[GUI]]></category>

		<category><![CDATA[windows forms]]></category>

		<guid isPermaLink="false">http://huseyint.com/?p=42</guid>
		<description><![CDATA[Genellikle programların About dialog pencerelerinde görürüz bu şekilde çizgileri. Etched (kazınmış demekmiş) 3 boyutlu görüntüsü ile kullanıldığı yere göre pencereye modern bir hava katıyor. Firefox&#8217;un About penceresi mesela:

Butonların hemen üstündeki çizgi pencerenin beyaz arkaplanlı üst ve gri arkaplanlı alt kısımlarını ayırmada kullanılmış ve 3 boyutlu bir görünüm kazandırmış. Visual Basic 6 ile böyle bir şeyi [...]]]></description>
			<content:encoded><![CDATA[<p>Genellikle programların About dialog pencerelerinde görürüz bu şekilde çizgileri. Etched (kazınmış demekmiş) 3 boyutlu görüntüsü ile kullanıldığı yere göre pencereye modern bir hava katıyor. Firefox&#8217;un About penceresi mesela:</p>
<p align="center"><img src="http://huseyint.com/wp-content/uploads/2008/05/firefox3-aboutdialog1.png" alt="Firefox 3 About dialog penceresi" title="Firefox 3 About dialog penceresi" width="316" height="467" /></p>
<p>Butonların hemen üstündeki çizgi pencerenin beyaz arkaplanlı üst ve gri arkaplanlı alt kısımlarını ayırmada kullanılmış ve 3 boyutlu bir görünüm kazandırmış. Visual Basic 6 ile böyle bir şeyi yapmak için Line kontrollerini kullanırdık. Birer adet gri ve beyaz renkli Line kontrolünü aralık bırakmadan alt alta gelecek şekilde formumuza yerlerştirdiğimizde bu görünümü elde edebilirdik. Visual Studio&#8217;nun .NET sonrası versiyonlarında böyle bir kontrol gelmemekte. Bana kalırsa gerek de yok çünkü Form üzerine Line tarzı kontroller koymak gereksiz yere tasarım ortamını karıştırıyor. Bunun yerine Windows Forms&#8217;un nimetlerinden yararlanarak bu sorunu çok daha şık bir şekilde çözebiliriz.</p>
<p>Yapmamız gereken <a href="http://msdn.microsoft.com/en-us/library/system.windows.forms.panel.aspx">Panel</a> kontrolünün <a href="http://msdn.microsoft.com/en-us/library/system.windows.forms.control.onpaint.aspx">OnPaint</a> metodunu override edip bize sağlanan <a href="http://msdn.microsoft.com/en-us/library/system.drawing.graphics.aspx">Graphics</a> nesnesini kullanarak <a href="http://msdn.microsoft.com/en-us/library/b39h02xk.aspx">ControlPaint.DrawBorder3D</a> static metodu ile <a href="http://msdn.microsoft.com/en-us/library/ezxa8z32.aspx">istediğimiz kenara</a>, <a href="http://msdn.microsoft.com/en-us/library/system.windows.forms.border3dstyle.aspx">istediğimiz tarzda</a> bir border ekleyebiliriz. C# ile anlatacak olursam:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp"><span style="color: #FF0000;">class</span> EtchedBorderedPanel : Panel
<span style="color: #000000;">&#123;</span>
    <span style="color: #0600FF;">protected</span> <span style="color: #0600FF;">override</span> <span style="color: #0600FF;">void</span> OnPaint<span style="color: #000000;">&#40;</span>PaintEventArgs e<span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#123;</span>
        <span style="color: #0600FF;">base</span>.<span style="color: #0000FF;">OnPaint</span><span style="color: #000000;">&#40;</span>e<span style="color: #000000;">&#41;</span>;
&nbsp;
        ControlPaint.<span style="color: #0000FF;">DrawBorder3D</span><span style="color: #000000;">&#40;</span>e.<span style="color: #0000FF;">Graphics</span>, 
            <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">ClientRectangle</span>, 
            Border3DStyle.<span style="color: #0000FF;">Etched</span>, 
            Border3DSide.<span style="color: #0000FF;">Top</span><span style="color: #000000;">&#41;</span>;
    <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Bu kontrolü daha sonra penceremizin alt kısmına <a href="http://msdn.microsoft.com/en-us/library/system.windows.forms.control.dock.aspx">Dock</a> edebiliriz. En son hafta sonu projem <a href="http://huseyint.com/FxLibrarian/">FxLibrarian</a> için yaptığım About dialog penceresi:</p>
<p align="center"><img src="http://huseyint.com/wp-content/uploads/2008/05/fxlibrarian-aboutdialog.png" alt="FxLibrarian About dialog penceresi" title="FxLibrarian About dialog penceresi" width="385" height="170" /></p>
<p><a href="http://www.codeproject.com/">CodeProject</a>&#8216;teki <a href="http://www.codeproject.com/KB/miscctrl/DividerPanel.aspx">şu makale</a> de böyle bir kontrolü nasıl yapacağınızı anlatıyor. Biraz eski ama tekrar kullanılabilir bir kontrol yapma konusunda güzel bilgiler içeriyor.</p><img src="http://feeds.feedburner.com/~r/huseyint/~4/nBO1bhlP_CI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://huseyint.com/2008/05/windows-forms-ile-kontrole-etched-border-eklemek/feed/</wfw:commentRss>
		<feedburner:origLink>http://huseyint.com/2008/05/windows-forms-ile-kontrole-etched-border-eklemek/</feedburner:origLink></item>
		<item>
		<title>Windows Vista’nın 3.1′den kalma mirasları</title>
		<link>http://feedproxy.google.com/~r/huseyint/~3/nzuSXBpjsAE/</link>
		<comments>http://huseyint.com/2008/02/windows-vistanin-31den-kalma-miraslari/#comments</comments>
		<pubDate>Tue, 12 Feb 2008 12:13:51 +0000</pubDate>
		<dc:creator>Hüseyin Tüfekçilerli</dc:creator>
		
		<category><![CDATA[Genel]]></category>

		<category><![CDATA[3.1]]></category>

		<category><![CDATA[dialog]]></category>

		<category><![CDATA[screenshot]]></category>

		<category><![CDATA[vista]]></category>

		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://huseyint.com/2008/02/windows-vistanin-31den-kalma-miraslari/</guid>
		<description><![CDATA[
Dün akşam Windows Vista yüklü bilgisayarıma bir Font yüklemeye çalıştığımda aşağıdaki dialog karşıma çıktı:





Gelmiş geçmiş Windows&#8217;ların içinde (Millenium Edition da dahil) en fiyakalısı olan Vista&#8217;da hala bu dialog neden bulunuyor? Atlamışlar heralde&#8230; Neyse bunu gördükten sonra bir başka tarihi eser olan moricons.dll de hala yerinde mi diye baktım. Yanlış hatırlamıyorsam C:\Windows klasöründe olması gerekiyordu ama [...]]]></description>
			<content:encoded><![CDATA[<p>
Dün akşam Windows Vista yüklü bilgisayarıma bir Font yüklemeye çalıştığımda aşağıdaki dialog karşıma çıktı:
</p>
<p align="center">
<img src="http://huseyint.com/wp-content/uploads/2008/02/add-fonts.png" alt="" />
</p>
<p>
Gelmiş geçmiş Windows&#8217;ların içinde (<a href="http://en.wikipedia.org/wiki/Windows_Me">Millenium Edition</a> da dahil) en fiyakalısı olan Vista&#8217;da hala bu dialog neden bulunuyor? Atlamışlar heralde&#8230; Neyse bunu gördükten sonra bir başka tarihi eser olan moricons.dll de hala yerinde mi diye baktım. Yanlış hatırlamıyorsam C:\Windows klasöründe olması gerekiyordu ama yoktu. Klasör içinde arama yapınca System32 klasöründe olduğunu gördüm:
</p>
<p align="center">
<img src="http://huseyint.com/wp-content/uploads/2008/02/change-icon.png" alt="" />
</p>
<p>
Eğer moricons.dll içindeki 32&#215;32 büyüklüğünde ve tamı tamına 16 renk derinliğine sahip simgelere bağımlılığı bulunan uygulamalarınız varsa korkmayın, Windows Vista altında da uygulamalarınız sorunsuz bir şekilde çalışacaktır (<a href="http://en.wikipedia.org/wiki/User_Account_Control" class="ubernym uttInitialism"><acronym class="uttInitialism" title="User Account Control">UAC</acronym></a>&#8217;yi saymazsak). <a href="http://en.wikipedia.org/wiki/Backward_compatibility">Backward compatibility</a> bu olsa gerek.</p><img src="http://feeds.feedburner.com/~r/huseyint/~4/nzuSXBpjsAE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://huseyint.com/2008/02/windows-vistanin-31den-kalma-miraslari/feed/</wfw:commentRss>
		<feedburner:origLink>http://huseyint.com/2008/02/windows-vistanin-31den-kalma-miraslari/</feedburner:origLink></item>
		<item>
		<title>Metin kutularına ipucu metni koyma - Cue Banner Text</title>
		<link>http://feedproxy.google.com/~r/huseyint/~3/fzUXyXz_oMI/</link>
		<comments>http://huseyint.com/2008/01/metin-kutularina-ipucu-metni-koyma-cue-banner-text/#comments</comments>
		<pubDate>Mon, 28 Jan 2008 21:46:36 +0000</pubDate>
		<dc:creator>Hüseyin Tüfekçilerli</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[c#]]></category>

		<category><![CDATA[cue banner]]></category>

		<category><![CDATA[textbox]]></category>

		<category><![CDATA[windows forms]]></category>

		<guid isPermaLink="false">http://huseyint.com/2008/01/metin-kutularina-ipucu-metni-koyma-cue-banner-text/</guid>
		<description><![CDATA[
Gerek Windows Forms ile gerekse de Web Forms ile bir kullanıcı arayüzü tasarlarken sıkça Label ve TextBox kontrol çiftlerini kullanırız. Bir TextBox koyarız ki kullanıcıdan bir değer alabilelim, soluna da bir Label koyarız ki kullanıcıdan ne bilgisi istediğimiz belli olsun. Ancak bazen ya yer darlığından ya da estetik kaygıdan dolayı TextBox kontrolünün işlevini belirleyen Label [...]]]></description>
			<content:encoded><![CDATA[<p>
Gerek Windows Forms ile gerekse de Web Forms ile bir kullanıcı arayüzü tasarlarken sıkça Label ve TextBox kontrol çiftlerini kullanırız. Bir TextBox koyarız ki kullanıcıdan bir değer alabilelim, soluna da bir Label koyarız ki kullanıcıdan ne bilgisi istediğimiz belli olsun. Ancak bazen ya yer darlığından ya da estetik kaygıdan dolayı TextBox kontrolünün işlevini belirleyen Label kontrolü gözümüze batar, kaldırmak isteriz. Böylelikle Label kontrolünden kurtuluruz kurtulmasına da bir şekilde kullanıcıya TextBox kontrolüne ne gireceği hakkında bilgi vermemiz gerekir. İşte bu noktada Cue Banner Text kullanmamız gereken fonksiyonalitedir. Peki nedir bu Cue Banner Text? Hani bazı web sitelerinin Login bölümlerinde kullanıcı adı ve parola gireceğiniz metin kutularının üstüne gelince <strong>Kullanıcı Adı</strong> ve <strong>Parola</strong> yazıları kayboluverir ki siz kendi kullanıcı adı ve parola değerlerini girebilirsiniz. İşte metin kutularının içine o kutulara ne girileceğini yazmak ve kutuya tıklayınca (veya bir şeyler yazmaya başlayınca) bu yazılara yok etme yöntemine Cue Banner Text deniyor. Eğer web ortamında bu yöntemi kullanarak erişilebilir formlar oluşturmak istiyorsanız A List Apart&#8217;taki <a href="http://www.alistapart.com/articles/makingcompactformsmoreaccessible/" title="Making Compact Forms More Accessible by Mike Brittain">Making Compact Forms More Accessible</a> makalesini okuyarabilirsiniz.
</p>
<p align="center">
<img src="http://huseyint.com/wp-content/uploads/2008/01/sample_form.gif" alt="Cue Banner Text yöntemi uygulanmış örnek bir web formu" />
</p>
<p>
Masaüstü uygulamalarında da bu tarz TextBox kullanımını görmemiz münkün. Mesela Windows Vista&#8217;da her bir Explorer penceresinin sağ üst köşesinde ve Internet Explorer 7&#8242;de bulunan arama kutularında bu kullanım mevcut:
</p>
<p align="center">
<img src="http://huseyint.com/wp-content/uploads/2008/01/vistaexplorersearchbox.png" alt="Windows Vista Explorer arama kutusu" /><br />
<img src="http://huseyint.com/wp-content/uploads/2008/01/ie7searchbox.png" alt="IE7 arama kutusu" />
</p>
<p>
Yine Windows Vista&#8217;da başlat menüsünün alt kısmında çıkan arama kutusunda da bunu görmekteyiz:
</p>
<p align="center">
<img src="http://huseyint.com/wp-content/uploads/2008/01/vistastartmenusearchbox.png" alt="Windows Vista başlat menüsü arama kutusu" />
</p>
<p>
Sizin de bu yöntemi .NET ve Windows Forms kullanarak geliştirdiğiniz uygulamalarda kullanmanız mümkün. Ne yazık ki .NET ile gelen TextBox kontrolünün böyle bir özelliği yok, bir şekilde bunu kendimiz yapmamız gerek. İlk akla gelen yöntemlerden biri kullandığımız TextBox kontrolünün Enter ve Leave eventlerini yakalayıp yazıyı gösterme/göstermeme işlemini gerçekleştirebilirsiniz. Benzer bir yöntemle ama bu sefer biraz daha alt seviyede TextBox kontrolünü subclass ederek yeni bir kontrol oluşturabilir ve OnGotFocus/OnLostFocus metodlarını override ederek benzer işlevi yeni kontrole kazandırmanız da mümkün. Ama tahmin edebileceğiniz gibi bu yöntemler pek de temiz gibi görünmüyor. Hem yazacağımız kod gereğinden fazla karışık ve yönetilemez olacak, hem de kontrolün temiz/sorunsuz bir kullanımı olmayacak. Geçiniz&#8230;
</p>
<p>
Peki nasıl yapalım biz bu işi? Şöyle oluyor efendim; <a href="http://msdn2.microsoft.com/en-us/library/bb761639(VS.85).aspx">EM_SETCUEBANNER</a> mesajını TextBox kontrolümüze User32.dll kütüphanesindeki meşhur <a href="http://www.pinvoke.net/default.aspx/user32.SendMessage">SendMessage</a> fonksiyonu ile göndererek. Aynen yukarıda örnek verdiğim Windows uygulamalarının da yaptığı gibi. Eğer programınız Windows XP veya sonrası bir işletim sisteminde çalışıyorsa bu yöntemi kullanarak acısız ve ağrısız bir şekilde TextBox kontrollerinize Cue Banner Text özelliği kazandırabilirsiniz.
</p>
<p>
SendMessage User32 sistem kütüphanesinde export edilmiş bir fonksiyon olduğu için bu fonksiyonu .NET içerisinden Platform Invocation veya kısaltacak olursak <a href="http://msdn2.microsoft.com/en-us/library/aa719104.aspx" title="Using P/Invoke to Call Unmanaged APIs from Your Managed Classes">P/Invoke</a> ile çağırmamız mümkün. EM_SETCUEBANNER sabitinin değeri ve SendMessage fonksiyonunun kullanacağımız versiyonu şu şekilde:
</p>

<div class="wp_syntax"><div class="code"><pre class="csharp"><span style="color: #0600FF;">internal</span> <span style="color: #0600FF;">const</span> <span style="color: #FF0000;">uint</span> ECM_FIRST = 0x1500;
<span style="color: #0600FF;">internal</span> <span style="color: #0600FF;">const</span> <span style="color: #FF0000;">uint</span> EM_SETCUEBANNER = ECM_FIRST + <span style="color: #FF0000;">1</span>;
&nbsp;
<span style="color: #000000;">&#91;</span>DllImport<span style="color: #000000;">&#40;</span><span style="color: #808080;">&quot;user32.dll&quot;</span>, CharSet = CharSet.<span style="color: #0600FF;">Auto</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
<span style="color: #0600FF;">internal</span> <span style="color: #0600FF;">static</span> <span style="color: #0600FF;">extern</span> IntPtr SendMessage<span style="color: #000000;">&#40;</span>
    HandleRef hWnd, 
    <span style="color: #FF0000;">uint</span> msg, 
    <span style="color: #FF0000;">bool</span> wParam, 
    <span style="color: #FF0000;">string</span> lParam<span style="color: #000000;">&#41;</span>;</pre></div></div>

<p>
Fonksiyonun parametrelerinin ne işe yaradığınız özetlemek gerekirse; <a href="http://msdn2.microsoft.com/en-us/library/system.runtime.interopservices.handleref.aspx">HandleRef</a> tipindeki hWnd parametresi ile TextBox kontrolümüzün Handle değerini, msg parametresi ile EM_SETCUEBANNER sabitini, wParam ile Cue Banner metninin kontrol üzerinde iken de gösterilip gösterilmeyeceğini ve son olarak lParam ile de Cue Banner metnini göndereceğiz. Burada 3. parametre olan wParam için özel bir durum var. Windows Vista&#8217;ya kadar EM_SETCUEBANNER mesajını gönderirken bu parametre göz ardı ediliyordu. Ancak Vista ile beraber buraya true değeri göndermemiz durumunda Cue Banner metni kontrol üzerinde iken de görünüyor, ta ki kullanıcı ilk karakteri girene kadar. Eğer Windows Vista kullanıyorsanız bu özelliği başlat menüsündeki arama kutusunda deneyebilirsiniz. Aşağıdaki kod txtSearch isminde bir TextBox kontrolüne Cue Banner olarak &#8220;Search&#8221; metnini atıyor:
</p>

<div class="wp_syntax"><div class="code"><pre class="csharp">SendMessage<span style="color: #000000;">&#40;</span>
    <span style="color: #008000;">new</span> HandleRef<span style="color: #000000;">&#40;</span>txtSearch, txtSearch.<span style="color: #0000FF;">Handle</span><span style="color: #000000;">&#41;</span>, 
    EM_SETCUEBANNER, 
    <span style="color: #0600FF;">false</span>, 
    <span style="color: #808080;">&quot;Search&quot;</span><span style="color: #000000;">&#41;</span>;</pre></div></div>

<p>
Kodu bu haliyle Windows Formunuzun constructoruna veya Form_Load eventine yerleştirmeniz mümkün. Ama bir kaç satır kod yazarak TextBox kontrolünden türeyen ve Cue Banner Text özelliği olan yeni bir TextBox kontrolü oluşturabiliriz. Böylelikle projenizin farklı yerlerinde böyle bir kontrol kullanacak olursanız sanki formunuza normal bir TextBox kontrolü yerleştirirmiş gibi bu kontrolü yerleştirip Properties penceresinden de Cue Banner metnini belirleyebilirsiniz.
</p>
<p align="center">
<img src='http://huseyint.com/wp-content/uploads/2008/01/cuebannertextboxdemo.png' alt='CueBannerTextBox kontrol demosu' />
</p>
<p>
Fark ettiyseniz Windows Explorer, IE7 ve başlat menüsünde bulunan arama kutularındaki Cue Banner metinleri gri renkte ve italik yazı tipi ile yazılmış, bizim oluşturduğumuz ise gri olmasına rağmen italik değil. Channel 9 Forumlarında <a href="http://channel9.msdn.com/Niners/littleguru">littleguru</a> adındaki kullanıcının daha önceden <a href="http://channel9.msdn.com/ShowPost.aspx?PostID=208895">oluşturmuş olduğu</a> benzer bir kontrolde ek olarak Cue Banner fontunu belirleme seçeneği de koymuş. OnGotFocus/OnLostFocus metodlarını override ederek TextBox&#8217;un o anki font değerini değiştiriyor. Ancak program çalıştığı esnada bu değerlerin (Cue Banner metni ve fontu) değişmesi gibi bazı durumunda kontrol pek sağlıklı çalışmıyor. Ayrıca bahsettiğim Vista ile gelen yeni özellik de o kontrolde uygulanmış değil. O yüzden bu işi yapan kontrolü tekrar yazmaya karar verdim. Tekrar yazmak dediysem pek de bir şey yapmadım hani, littleguru&#8217;nun kodunu baz alarak bir kaç değişiklik yaptım. Vista ile gelen özellikten de <a href="http://weblogs.asp.net/kennykerr/">Kenny Kerr</a>&#8216;in Ağustos ayında MSDN Magazine&#8217;de yayınlamış olduğu <a href="http://msdn.microsoft.com/msdnmag/issues/07/08/WindowsCPP/default.aspx#S2">Windows Vista Control Enhancements</a> yazısını okuyunca haberim oldu.
</p>
<p>
Kontrolü ve demosunu içeren <a href="http://huseyint.com/projeler/CueBannerTextBox_Control.zip">Visual Studio 2008 projesi</a> (12kb)</p><img src="http://feeds.feedburner.com/~r/huseyint/~4/fzUXyXz_oMI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://huseyint.com/2008/01/metin-kutularina-ipucu-metni-koyma-cue-banner-text/feed/</wfw:commentRss>
		<feedburner:origLink>http://huseyint.com/2008/01/metin-kutularina-ipucu-metni-koyma-cue-banner-text/</feedburner:origLink></item>
		<item>
		<title>AirTies modem resetleme aracı</title>
		<link>http://feedproxy.google.com/~r/huseyint/~3/LD66QHg_xOg/</link>
		<comments>http://huseyint.com/2008/01/airties-modem-resetleme-araci/#comments</comments>
		<pubDate>Sun, 06 Jan 2008 20:15:38 +0000</pubDate>
		<dc:creator>Hüseyin Tüfekçilerli</dc:creator>
		
		<category><![CDATA[Genel]]></category>

		<category><![CDATA[adsl]]></category>

		<category><![CDATA[airties]]></category>

		<category><![CDATA[modem]]></category>

		<category><![CDATA[rapidshare]]></category>

		<category><![CDATA[reset]]></category>

		<guid isPermaLink="false">http://huseyint.com/2008/01/airties-modem-resetleme-araci/</guid>
		<description><![CDATA[RapidShare gibi sitelerden Premium hesap sahibi olmadan ücretsiz olarak dosya indiriyorsanız daha kısa zamanda daha fazla dosya indirebilmek için sık sık modeminize reset atmak zorunda kalıyorsunuzdur. Böylelikle modeminiz yeni bir IP alıyor ve sanki bambaşka biriymişçesine RapidShare&#8217;den dosyalarınızı indirmeye devam edebiliyorsunuz. Bir programcı olduğumu ve programcıların da tembel olduğunu göz önüne aldığımızda modemin elektrik kablosunu [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.rapidshare.com/">RapidShare</a> gibi sitelerden Premium hesap sahibi olmadan ücretsiz olarak dosya indiriyorsanız daha kısa zamanda daha fazla dosya indirebilmek için sık sık modeminize reset atmak zorunda kalıyorsunuzdur. Böylelikle modeminiz yeni bir IP alıyor ve sanki bambaşka biriymişçesine RapidShare&#8217;den dosyalarınızı indirmeye devam edebiliyorsunuz. Bir programcı olduğumu ve programcıların da tembel olduğunu göz önüne aldığımızda modemin elektrik kablosunu çıkarmak ve tekrar takmak oldukça zahmetli bir iş benim için. İşte bu yüzden bu sorunu tek tıkla çözen bir <a href="http://en.wikipedia.org/wiki/Command_line_interface" title="CLI - Command line interface">komut satırı uygulaması</a> geliştirdim. Eğer sizin de AirTies marka bir ADSL modeminiz varsa bu aracı kullanarak modeminize reset atabilir, yeni bir IP adresi alabilirsiniz. Modem arayüzüne 192.168.2.1 adresinden ve boş bir şifre ile ulaştığınızı varsayarsak programı hiçbir parametre göndermeden, çift tıklayarak, kullanabilirsiniz. Ancak modem arayüzüne eriştiğiniz IP adresiniz farklı ve/veya modeme erişmede bir şifre kullanıyorsanız ilgili <strong>/ip</strong> ve <strong>/password</strong> parametlerini kullanmanız gerekir. Programı çalıştırabilmeniz için <a href="http://go.microsoft.com/fwlink/?LinkId=37283">.NET Framework 2.0</a> veya üstü bilgisayarınızda yüklü olduğundan emin olun.</p>
<p><a href='http://huseyint.com/wp-content/uploads/2008/01/resetmodem.png' title='AirTies modem resetleme aracı ekran görüntüsü'><img src='http://huseyint.com/wp-content/uploads/2008/01/resetmodem.thumbnail.png' alt='AirTies modem resetleme aracı ekran görüntüsü' /></a></p>
<p><a href="/projeler/ResetModem/ResetModem.zip" title="AirTies ADSL modem resetleme aracını indirin">AirTies ADSL Modem Reset Utility 1.0.0.0</a> (3,40 KB)</p>
<p><strong>Not:</strong> Programı sadece kullanmakta olduğum AirTies RT-205 modeli ile test edebildim ancak diğer modeller ile de sorunsuz çalışacağını ümit ediyorum.</p>
<p><strong>Güncelleme:</strong> Programın <a href="/projeler/ResetModem/Program.cs.html" title="AirTies ADSL modem resetleme aracı kaynak kodu">C# kaynak kodunu</a> görebilirsiniz.</p><img src="http://feeds.feedburner.com/~r/huseyint/~4/LD66QHg_xOg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://huseyint.com/2008/01/airties-modem-resetleme-araci/feed/</wfw:commentRss>
		<feedburner:origLink>http://huseyint.com/2008/01/airties-modem-resetleme-araci/</feedburner:origLink></item>
		<item>
		<title>XML Serializable Generic Dictionary tipi</title>
		<link>http://feedproxy.google.com/~r/huseyint/~3/p7A-LcsdLcI/</link>
		<comments>http://huseyint.com/2007/12/xml-serializable-generic-dictionary-tipi/#comments</comments>
		<pubDate>Sun, 02 Dec 2007 14:46:54 +0000</pubDate>
		<dc:creator>Hüseyin Tüfekçilerli</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[Dictionary]]></category>

		<category><![CDATA[Serializable]]></category>

		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://huseyint.com/2007/12/xml-serializable-generic-dictionary-tipi/</guid>
		<description><![CDATA[
.NET ile kod yazarken en çok kullandığım collection tiplerinden biri olan Dictionary Generic yapısı ile de bizi bir çok casting işleminden kuratarıyor. Key olarak şu tipi, value olarak da şu tipi kullanacağız diyoruz ve key/value çiftlerini tiplerini de koruyarak tutabileceğimiz dört başı mamur bir listemiz olmuş oluyor. Bir de bu Dictionary tipimizi XML olarak Serialize [...]]]></description>
			<content:encoded><![CDATA[<p>
.NET ile kod yazarken en çok kullandığım collection tiplerinden biri olan <a href="http://msdn2.microsoft.com/en-us/library/xfhwa508(VS.90).aspx">Dictionary</a> Generic yapısı ile de bizi bir çok casting işleminden kuratarıyor. Key olarak şu tipi, value olarak da şu tipi kullanacağız diyoruz ve key/value çiftlerini tiplerini de koruyarak tutabileceğimiz dört başı mamur bir listemiz olmuş oluyor. Bir de bu Dictionary tipimizi <acronym class="uttInitialism" title="eXtensible Markup Language">XML</acronym> olarak Serialize edebilsek tadından yenmeyecek ama nedendir bilinmez bunu yapamıyoruz. Yaparsak da şuna benzer bir Exception alıyoruz:
</p>
<blockquote><p>&#8220;The type System.Collections.Generic.Dictionary is not supported because it implements IDictionary.&#8221;</p></blockquote>
<p>
İnternette bu işi yapabilecek bir şeyler araştırdım ve <a href="http://www.sitepoint.com/blogs/2006/07/09/generic-dictionaries-vs-the-xmlserializer/">hatrı sayılır</a> <a href="http://aspzone.com/blogs/john/articles/167.aspx">sitede</a> <a href="http://msdn.microsoft.com/msdnmag/issues/03/06/XMLFiles/default.aspx#QA7">bu sorunun</a> <a href="http://blogs.msdn.com/psheill/archive/2005/04/09/406823.aspx">farklı farklı</a> çözümlerine rastladım. Bunlardan en çok <a href="http://weblogs.asp.net/pwelter34/archive/2006/05/03/444961.aspx">Pete Welter&#8217;in çözümü</a> hoşuma gitti. Bu çözümde Pete Welter, Dictionary generic tipini ve <a href="http://msdn2.microsoft.com/en-us/library/system.xml.serialization.ixmlserializable.aspx">IXmlSerializable</a> tipini implement eden yeni bir tip yaratmış. Dictionary&#8217;den dolayı yeni tipimiz Dictionary ile beraber gelen tüm özelliklere sahip, oh ne güzel. IXmlSerializable tipinin gerektirdiği metodları da implement ederek <acronym class="uttInitialism" title="eXtensible Markup Language">XML</acronym> Serialization işlemi sırasında yeni tipimizin nasıl serialize edileceğini de bildirmiş sevgili Pete Welter. Sonuç olarak temiz ve çok rahat kullanılabilir yeni bir tip ortaya çıkmış. Kod şu şekilde:
</p>

<div class="wp_syntax"><div class="code"><pre class="csharp"><span style="color: #000000;">&#91;</span>XmlRoot<span style="color: #000000;">&#40;</span><span style="color: #808080;">&quot;dictionary&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
<span style="color: #0600FF;">public</span> <span style="color: #FF0000;">class</span> SerializableDictionary&lt;TKey, TValue&gt;
    : Dictionary&lt;TKey, TValue&gt;, IXmlSerializable
<span style="color: #000000;">&#123;</span>
    <span style="color: #008080;">#region IXmlSerializable Members</span>
    <span style="color: #0600FF;">public</span> <span style="color: #000000;">System</span>.<span style="color: #0000FF;">Xml</span>.<span style="color: #0000FF;">Schema</span>.<span style="color: #0000FF;">XmlSchema</span> GetSchema<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#123;</span>
        <span style="color: #0600FF;">return</span> <span style="color: #0600FF;">null</span>;
    <span style="color: #000000;">&#125;</span>
&nbsp;
    <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> ReadXml<span style="color: #000000;">&#40;</span><span style="color: #000000;">System</span>.<span style="color: #0000FF;">Xml</span>.<span style="color: #0000FF;">XmlReader</span> reader<span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#123;</span>
        XmlSerializer keySerializer = <span style="color: #008000;">new</span> XmlSerializer<span style="color: #000000;">&#40;</span><span style="color: #008000;">typeof</span><span style="color: #000000;">&#40;</span>TKey<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
        XmlSerializer valueSerializer = <span style="color: #008000;">new</span> XmlSerializer<span style="color: #000000;">&#40;</span><span style="color: #008000;">typeof</span><span style="color: #000000;">&#40;</span>TValue<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
        <span style="color: #FF0000;">bool</span> wasEmpty = reader.<span style="color: #0000FF;">IsEmptyElement</span>;
        reader.<span style="color: #0000FF;">Read</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
        <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>wasEmpty<span style="color: #000000;">&#41;</span>
            <span style="color: #0600FF;">return</span>;
&nbsp;
        <span style="color: #0600FF;">while</span> <span style="color: #000000;">&#40;</span>reader.<span style="color: #0000FF;">NodeType</span> != <span style="color: #000000;">System</span>.<span style="color: #0000FF;">Xml</span>.<span style="color: #0000FF;">XmlNodeType</span>.<span style="color: #0000FF;">EndElement</span><span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            reader.<span style="color: #0000FF;">ReadStartElement</span><span style="color: #000000;">&#40;</span><span style="color: #808080;">&quot;item&quot;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
            reader.<span style="color: #0000FF;">ReadStartElement</span><span style="color: #000000;">&#40;</span><span style="color: #808080;">&quot;key&quot;</span><span style="color: #000000;">&#41;</span>;
            TKey key = <span style="color: #000000;">&#40;</span>TKey<span style="color: #000000;">&#41;</span>keySerializer.<span style="color: #0000FF;">Deserialize</span><span style="color: #000000;">&#40;</span>reader<span style="color: #000000;">&#41;</span>;
            reader.<span style="color: #0000FF;">ReadEndElement</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
            reader.<span style="color: #0000FF;">ReadStartElement</span><span style="color: #000000;">&#40;</span><span style="color: #808080;">&quot;value&quot;</span><span style="color: #000000;">&#41;</span>;
            TValue value = <span style="color: #000000;">&#40;</span>TValue<span style="color: #000000;">&#41;</span>valueSerializer.<span style="color: #0000FF;">Deserialize</span><span style="color: #000000;">&#40;</span>reader<span style="color: #000000;">&#41;</span>;
            reader.<span style="color: #0000FF;">ReadEndElement</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
            <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span>key, value<span style="color: #000000;">&#41;</span>;
&nbsp;
            reader.<span style="color: #0000FF;">ReadEndElement</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
            reader.<span style="color: #0000FF;">MoveToContent</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
        <span style="color: #000000;">&#125;</span>
        reader.<span style="color: #0000FF;">ReadEndElement</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
    <span style="color: #000000;">&#125;</span>
&nbsp;
    <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> WriteXml<span style="color: #000000;">&#40;</span><span style="color: #000000;">System</span>.<span style="color: #0000FF;">Xml</span>.<span style="color: #0000FF;">XmlWriter</span> writer<span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#123;</span>
        XmlSerializer keySerializer = <span style="color: #008000;">new</span> XmlSerializer<span style="color: #000000;">&#40;</span><span style="color: #008000;">typeof</span><span style="color: #000000;">&#40;</span>TKey<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
        XmlSerializer valueSerializer = <span style="color: #008000;">new</span> XmlSerializer<span style="color: #000000;">&#40;</span><span style="color: #008000;">typeof</span><span style="color: #000000;">&#40;</span>TValue<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
        <span style="color: #0600FF;">foreach</span> <span style="color: #000000;">&#40;</span>TKey key <span style="color: #0600FF;">in</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Keys</span><span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            writer.<span style="color: #0000FF;">WriteStartElement</span><span style="color: #000000;">&#40;</span><span style="color: #808080;">&quot;item&quot;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
            writer.<span style="color: #0000FF;">WriteStartElement</span><span style="color: #000000;">&#40;</span><span style="color: #808080;">&quot;key&quot;</span><span style="color: #000000;">&#41;</span>;
            keySerializer.<span style="color: #0000FF;">Serialize</span><span style="color: #000000;">&#40;</span>writer, key<span style="color: #000000;">&#41;</span>;
            writer.<span style="color: #0000FF;">WriteEndElement</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
            writer.<span style="color: #0000FF;">WriteStartElement</span><span style="color: #000000;">&#40;</span><span style="color: #808080;">&quot;value&quot;</span><span style="color: #000000;">&#41;</span>;
            TValue value = <span style="color: #0600FF;">this</span><span style="color: #000000;">&#91;</span>key<span style="color: #000000;">&#93;</span>;
            valueSerializer.<span style="color: #0000FF;">Serialize</span><span style="color: #000000;">&#40;</span>writer, value<span style="color: #000000;">&#41;</span>;
            writer.<span style="color: #0000FF;">WriteEndElement</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
            writer.<span style="color: #0000FF;">WriteEndElement</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
        <span style="color: #000000;">&#125;</span>
    <span style="color: #000000;">&#125;</span>
    <span style="color: #008080;">#endregion</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>
Dictionary nesnemiz için serialize edilebilen key ve value tipleri seçtiğimiz sürece SerializableDictionary tipimiz de serialize edilebilir. Key/value tipleri olarak string kullandığımız bir SerializableDictionary nesnesini serialize ettiğimizde şöyle bir çıktıya sahip oluyor:
</p>

<div class="wp_syntax"><div class="code"><pre class="xml"><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;dictionary<span style="font-weight: bold; color: black;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;item<span style="font-weight: bold; color: black;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;key<span style="font-weight: bold; color: black;">&gt;</span></span></span>
      <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;string<span style="font-weight: bold; color: black;">&gt;</span></span></span>foo<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/string<span style="font-weight: bold; color: black;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/key<span style="font-weight: bold; color: black;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;value<span style="font-weight: bold; color: black;">&gt;</span></span></span>
      <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;string<span style="font-weight: bold; color: black;">&gt;</span></span></span>bar<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/string<span style="font-weight: bold; color: black;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/value<span style="font-weight: bold; color: black;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/item<span style="font-weight: bold; color: black;">&gt;</span></span></span>
<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/dictionary<span style="font-weight: bold; color: black;">&gt;</span></span></span></pre></div></div>

<p>
Buraya kadar her şey güzel, Dictionary yerine bu yeni tipi kullanarak varolan Dictionary yapılarımızı <acronym class="uttInitialism" title="eXtensible Markup Language">XML</acronym> olarak da serialize edebiliriz artık. Ama bir şey içime sinmiyor hala, <acronym class="uttInitialism" title="eXtensible Markup Language">XML</acronym> çıktısındaki etiketlerin isimlerini SerializableDictionary üzerinde hard-coded olarak yazıyoruz. Kökteki etiket ismini XmlRootAttribute&#8217;e farklı bir parametre göndererek veya SerializableDictionary tipini extend eden yeni bir tip tanımlayarak değiştirebiliriz. Ama hala alt seviyelerdeki <strong>item</strong>, <strong>key</strong> ve <strong>value</strong> şeklindeki etiket isimlerini hard-code etmek dışında bir seçeneğimiz görünmüyor. Eğer bu sınıfı tek tipteki bir Dictionary verimiz için kullanacaksak pek bir sorun yok ama farklı farklı <acronym class="uttInitialism" title="eXtensible Markup Language">XML</acronym> çıktılarını beklediğimiz generic bir çözüm için bu tipi kullanmayı planlıyorsak bu etiket isimlerine müdahale etmenin daha generic bir yolunu bulmamız gerek (copy/paste yapmayı bir çözüm olarak aklımızdan bile geçirmiyoruz tabii ki). Bu amaçla SerializableDictionary tipini biraz değiştirerek şu kodu elde ettim:
</p>

<div class="wp_syntax"><div class="code"><pre class="csharp"><span style="color: #0600FF;">public</span> abstract <span style="color: #FF0000;">class</span> SerializableDictionary&lt;TKey, TValue&gt; 
    : Dictionary&lt;TKey, TValue&gt;, IXmlSerializable
<span style="color: #000000;">&#123;</span>
    <span style="color: #0600FF;">protected</span> abstract <span style="color: #FF0000;">string</span> itemName <span style="color: #000000;">&#123;</span> get; <span style="color: #000000;">&#125;</span>
    <span style="color: #0600FF;">protected</span> abstract <span style="color: #FF0000;">string</span> keyName <span style="color: #000000;">&#123;</span> get; <span style="color: #000000;">&#125;</span>
    <span style="color: #0600FF;">protected</span> abstract <span style="color: #FF0000;">string</span> valueName <span style="color: #000000;">&#123;</span> get; <span style="color: #000000;">&#125;</span>
&nbsp;
    <span style="color: #008080;">#region IXmlSerializable Members</span>
    <span style="color: #0600FF;">public</span> <span style="color: #000000;">System</span>.<span style="color: #0000FF;">Xml</span>.<span style="color: #0000FF;">Schema</span>.<span style="color: #0000FF;">XmlSchema</span> GetSchema<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#123;</span>
        <span style="color: #0600FF;">return</span> <span style="color: #0600FF;">null</span>;
    <span style="color: #000000;">&#125;</span>
&nbsp;
    <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> ReadXml<span style="color: #000000;">&#40;</span>XmlReader reader<span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#123;</span>
        XmlSerializer keySerializer = <span style="color: #008000;">new</span> XmlSerializer<span style="color: #000000;">&#40;</span><span style="color: #008000;">typeof</span><span style="color: #000000;">&#40;</span>TKey<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
        XmlSerializer valueSerializer = <span style="color: #008000;">new</span> XmlSerializer<span style="color: #000000;">&#40;</span><span style="color: #008000;">typeof</span><span style="color: #000000;">&#40;</span>TValue<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
        <span style="color: #FF0000;">bool</span> wasEmpty = reader.<span style="color: #0000FF;">IsEmptyElement</span>;
        reader.<span style="color: #0000FF;">Read</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
        <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>wasEmpty<span style="color: #000000;">&#41;</span>
            <span style="color: #0600FF;">return</span>;
&nbsp;
        <span style="color: #0600FF;">while</span> <span style="color: #000000;">&#40;</span>reader.<span style="color: #0000FF;">NodeType</span> != <span style="color: #000000;">System</span>.<span style="color: #0000FF;">Xml</span>.<span style="color: #0000FF;">XmlNodeType</span>.<span style="color: #0000FF;">EndElement</span><span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            reader.<span style="color: #0000FF;">ReadStartElement</span><span style="color: #000000;">&#40;</span>itemName<span style="color: #000000;">&#41;</span>;
&nbsp;
            reader.<span style="color: #0000FF;">ReadStartElement</span><span style="color: #000000;">&#40;</span>keyName<span style="color: #000000;">&#41;</span>;
            TKey key = <span style="color: #000000;">&#40;</span>TKey<span style="color: #000000;">&#41;</span>keySerializer.<span style="color: #0000FF;">Deserialize</span><span style="color: #000000;">&#40;</span>reader<span style="color: #000000;">&#41;</span>;
            reader.<span style="color: #0000FF;">ReadEndElement</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
            reader.<span style="color: #0000FF;">ReadStartElement</span><span style="color: #000000;">&#40;</span>valueName<span style="color: #000000;">&#41;</span>;
            TValue value = <span style="color: #000000;">&#40;</span>TValue<span style="color: #000000;">&#41;</span>valueSerializer.<span style="color: #0000FF;">Deserialize</span><span style="color: #000000;">&#40;</span>reader<span style="color: #000000;">&#41;</span>;
            reader.<span style="color: #0000FF;">ReadEndElement</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
            <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span>key, value<span style="color: #000000;">&#41;</span>;
&nbsp;
            reader.<span style="color: #0000FF;">ReadEndElement</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
            reader.<span style="color: #0000FF;">MoveToContent</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
        <span style="color: #000000;">&#125;</span>
        reader.<span style="color: #0000FF;">ReadEndElement</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
    <span style="color: #000000;">&#125;</span>
&nbsp;
    <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> WriteXml<span style="color: #000000;">&#40;</span><span style="color: #000000;">System</span>.<span style="color: #0000FF;">Xml</span>.<span style="color: #0000FF;">XmlWriter</span> writer<span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#123;</span>
        XmlSerializer keySerializer = <span style="color: #008000;">new</span> XmlSerializer<span style="color: #000000;">&#40;</span><span style="color: #008000;">typeof</span><span style="color: #000000;">&#40;</span>TKey<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
        XmlSerializer valueSerializer = <span style="color: #008000;">new</span> XmlSerializer<span style="color: #000000;">&#40;</span><span style="color: #008000;">typeof</span><span style="color: #000000;">&#40;</span>TValue<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
        <span style="color: #0600FF;">foreach</span> <span style="color: #000000;">&#40;</span>TKey key <span style="color: #0600FF;">in</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Keys</span><span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            writer.<span style="color: #0000FF;">WriteStartElement</span><span style="color: #000000;">&#40;</span>itemName<span style="color: #000000;">&#41;</span>;
&nbsp;
&nbsp;
            writer.<span style="color: #0000FF;">WriteStartElement</span><span style="color: #000000;">&#40;</span>keyName<span style="color: #000000;">&#41;</span>;
            keySerializer.<span style="color: #0000FF;">Serialize</span><span style="color: #000000;">&#40;</span>writer, key<span style="color: #000000;">&#41;</span>;
            writer.<span style="color: #0000FF;">WriteEndElement</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
            writer.<span style="color: #0000FF;">WriteStartElement</span><span style="color: #000000;">&#40;</span>valueName<span style="color: #000000;">&#41;</span>;
            TValue value = <span style="color: #0600FF;">this</span><span style="color: #000000;">&#91;</span>key<span style="color: #000000;">&#93;</span>;
            valueSerializer.<span style="color: #0000FF;">Serialize</span><span style="color: #000000;">&#40;</span>writer, value<span style="color: #000000;">&#41;</span>;
            writer.<span style="color: #0000FF;">WriteEndElement</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
            writer.<span style="color: #0000FF;">WriteEndElement</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
        <span style="color: #000000;">&#125;</span>
    <span style="color: #000000;">&#125;</span>
    <span style="color: #008080;">#endregion</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>
Override edilmek üzere 3 tane abstract property ekleyerek hard-coded string değerlerinden kurtulmuş olduk. Tipimize abstract üyeler eklediğimiz için artık bu tipi direk olarak kullanılamaz hale getirdik ve bir abstract tipimiz oldu. Tipimizi kullanmak istediğimizde yamamız gereken kod artık şu şekilde olacak:
</p>

<div class="wp_syntax"><div class="code"><pre class="csharp"><span style="color: #0600FF;">public</span> <span style="color: #FF0000;">class</span> Fields : SerializableDictionary&lt;string, string&gt;
<span style="color: #000000;">&#123;</span>
    <span style="color: #0600FF;">protected</span> <span style="color: #0600FF;">override</span> <span style="color: #FF0000;">string</span> itemName
    <span style="color: #000000;">&#123;</span>
        get <span style="color: #000000;">&#123;</span> <span style="color: #0600FF;">return</span> <span style="color: #808080;">&quot;Field&quot;</span>; <span style="color: #000000;">&#125;</span>
    <span style="color: #000000;">&#125;</span>
&nbsp;
    <span style="color: #0600FF;">protected</span> <span style="color: #0600FF;">override</span> <span style="color: #FF0000;">string</span> keyName
    <span style="color: #000000;">&#123;</span>
        get <span style="color: #000000;">&#123;</span> <span style="color: #0600FF;">return</span> <span style="color: #808080;">&quot;Name&quot;</span>; <span style="color: #000000;">&#125;</span>
    <span style="color: #000000;">&#125;</span>
&nbsp;
    <span style="color: #0600FF;">protected</span> <span style="color: #0600FF;">override</span> <span style="color: #FF0000;">string</span> valueName
    <span style="color: #000000;">&#123;</span>
        get <span style="color: #000000;">&#123;</span> <span style="color: #0600FF;">return</span> <span style="color: #808080;">&quot;Value&quot;</span>; <span style="color: #000000;">&#125;</span>
    <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>
Burada az önce değiştirdiğimiz SerializableDictionary tipini extend ederek kullanacağımız yeni tipi yaratıyoruz. Bu aşmada Key/Value tiplerimizi ve <acronym class="uttInitialism" title="eXtensible Markup Language">XML</acronym> çıktısında oluşacak etiketlerin isimlerini belirtiyoruz. Eğer kök <acronym class="uttInitialism" title="eXtensible Markup Language">XML</acronym> etiketi için kullanılacak ismin tipimizin isminden farklı olmasını istiyorsanız yeni tipin üzerinde XmlRootAttribute kullanarak bunu da belirtebilirsiniz. Bu tipimizi de artık şu şekilde kullanabiliriz:
</p>

<div class="wp_syntax"><div class="code"><pre class="csharp"><span style="color: #008080; font-style: italic;">// 2 kayıt içeren bir Dictionary oluşturalım</span>
<span style="color: #008080; font-style: italic;">// .NET 3.5/VS2008 ile gelen Collection Initializers özelliği</span>
<span style="color: #008080; font-style: italic;">// bu gibi durumlarda daha temiz/kısa kod yazmamıza yarıyor</span>
Fields fields = <span style="color: #008000;">new</span> Fields <span style="color: #000000;">&#123;</span>
    <span style="color: #000000;">&#123;</span> <span style="color: #808080;">&quot;foo&quot;</span>, <span style="color: #808080;">&quot;bar&quot;</span> <span style="color: #000000;">&#125;</span>,
    <span style="color: #000000;">&#123;</span> <span style="color: #808080;">&quot;hede&quot;</span>, <span style="color: #808080;">&quot;hödö&quot;</span><span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span>;
&nbsp;
<span style="color: #008080; font-style: italic;">// XML Serialize işlemi için gerekli altyapıyı oluşturalım</span>
StringBuilder sb = <span style="color: #008000;">new</span> StringBuilder<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
<span style="color: #008080; font-style: italic;">// Burada da bir başka yenilik olan Object Initializer özelliğini</span>
<span style="color: #008080; font-style: italic;">// kullanarak nesneyi oluşturduğumuz satırda nesne üzerindeki</span>
<span style="color: #008080; font-style: italic;">// bazı özelliklere de ilk değerlerini verebiliyoruz</span>
XmlTextWriter xtw = <span style="color: #008000;">new</span> XmlTextWriter<span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> StringWriter<span style="color: #000000;">&#40;</span>sb<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span> 
    <span style="color: #000000;">&#123;</span> Formatting = Formatting.<span style="color: #0000FF;">Indented</span> <span style="color: #000000;">&#125;</span>;
xtw.<span style="color: #0000FF;">WriteRaw</span><span style="color: #000000;">&#40;</span><span style="color: #808080;">&quot;&quot;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
<span style="color: #008080; font-style: italic;">// Burada XML Serialize işlemi gerçekleşiyor</span>
XmlSerializer xs = <span style="color: #008000;">new</span> XmlSerializer<span style="color: #000000;">&#40;</span><span style="color: #008000;">typeof</span><span style="color: #000000;">&#40;</span>Fields<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
xs.<span style="color: #0000FF;">Serialize</span><span style="color: #000000;">&#40;</span>xtw, fields<span style="color: #000000;">&#41;</span>;
&nbsp;
<span style="color: #FF0000;">string</span> xmlFields = sb.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span>xmlFields<span style="color: #000000;">&#41;</span>;
&nbsp;
<span style="color: #008080; font-style: italic;">// Burada da daha önce serialize ettiğimiz nesneyi deserialize ederek</span>
<span style="color: #008080; font-style: italic;">// tekrar hafızda bir nesne haline çeviriyoruz</span>
Fields deserializedFields = xs.<span style="color: #0000FF;">Deserialize</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> StringReader<span style="color: #000000;">&#40;</span>xmlFields<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span> <span style="color: #0600FF;">as</span> Fields;</pre></div></div>

<p>
Bu kodun çıktısı da şu şekilde:
</p>

<div class="wp_syntax"><div class="code"><pre class="xml"><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;Fields<span style="font-weight: bold; color: black;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;Field<span style="font-weight: bold; color: black;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;Name<span style="font-weight: bold; color: black;">&gt;</span></span></span>
      <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;string<span style="font-weight: bold; color: black;">&gt;</span></span></span>foo<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/string<span style="font-weight: bold; color: black;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/Name<span style="font-weight: bold; color: black;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;Value<span style="font-weight: bold; color: black;">&gt;</span></span></span>
      <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;string<span style="font-weight: bold; color: black;">&gt;</span></span></span>bar<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/string<span style="font-weight: bold; color: black;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/Value<span style="font-weight: bold; color: black;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/Field<span style="font-weight: bold; color: black;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;Field<span style="font-weight: bold; color: black;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;Name<span style="font-weight: bold; color: black;">&gt;</span></span></span>
      <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;string<span style="font-weight: bold; color: black;">&gt;</span></span></span>hede<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/string<span style="font-weight: bold; color: black;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/Name<span style="font-weight: bold; color: black;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;Value<span style="font-weight: bold; color: black;">&gt;</span></span></span>
      <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;string<span style="font-weight: bold; color: black;">&gt;</span></span></span>hödö<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/string<span style="font-weight: bold; color: black;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/Value<span style="font-weight: bold; color: black;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/Field<span style="font-weight: bold; color: black;">&gt;</span></span></span>
<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/Fields<span style="font-weight: bold; color: black;">&gt;</span></span></span></pre></div></div>

<p>
SerializableDictionary tipini bir kere tanımlayarak projemiz içerisinde bunu baz alan farklı farklı Dictionary tiplerimizi oluşturabilir, bunların farklı farklı <acronym class="uttInitialism" title="eXtensible Markup Language">XML</acronym> çıktıları olmasını sağlayabiliriz.</p><img src="http://feeds.feedburner.com/~r/huseyint/~4/p7A-LcsdLcI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://huseyint.com/2007/12/xml-serializable-generic-dictionary-tipi/feed/</wfw:commentRss>
		<feedburner:origLink>http://huseyint.com/2007/12/xml-serializable-generic-dictionary-tipi/</feedburner:origLink></item>
		<item>
		<title>Visual Studio 2008 ve .NET Framework 3.5 çıktı</title>
		<link>http://feedproxy.google.com/~r/huseyint/~3/4LsyM8ECQ30/</link>
		<comments>http://huseyint.com/2007/11/visual-studio-2008-ve-net-framework-35-cikti/#comments</comments>
		<pubDate>Mon, 19 Nov 2007 20:09:54 +0000</pubDate>
		<dc:creator>Hüseyin Tüfekçilerli</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[visual studio]]></category>

		<guid isPermaLink="false">http://huseyint.com/2007/11/visual-studio-2008-ve-net-framework-35-cikti/</guid>
		<description><![CDATA[



Daha önce Kasım ayında çıkacağı duyurulan Visual Studio 2008 ve .NET Framework 3.5&#8242;in RTM sürümleri bugün duyuruldu. MSDN Subscription sahipleri bugün itibariyle bu ürünü indirebilir. Eğer 90 günlük deneme sürümünü indirmek istiyorsanız şu sayfaya gidip Team System Edition&#8217;larını indirebilirsiniz. Burada daha &#8220;Visual Studio 2008 Professional Edition&#8221; için download linki hazır değil ama 1 haftaya kadar [...]]]></description>
			<content:encoded><![CDATA[<p align="center">
<img src='http://huseyint.com/wp-content/uploads/2007/11/aa700831vs08_ven-usmsdn10.png' alt='Visual Studio 2008' />
</p>
<p>
Daha önce <a href="http://blogs.msdn.com/somasegar/archive/2007/11/05/teched-developer-in-europe.aspx">Kasım ayında çıkacağı duyurulan</a> <a href="http://msdn2.microsoft.com/en-us/vstudio/products/default.aspx">Visual Studio 2008</a> ve .NET Framework 3.5&#8242;in RTM sürümleri <a href="http://blogs.msdn.com/somasegar/archive/2007/11/19/visual-studio-2008-and-net-framework-3-5-shipped.aspx">bugün duyuruldu</a>. MSDN Subscription sahipleri bugün itibariyle bu ürünü <a href="http://msdn2.microsoft.com/en-us/subscriptions/bb608344.aspx">indirebilir</a>. Eğer 90 günlük deneme sürümünü indirmek istiyorsanız <a href="http://msdn2.microsoft.com/en-us/vstudio/products/aa700831.aspx">şu sayfaya</a> gidip Team System Edition&#8217;larını indirebilirsiniz. Burada daha &#8220;Visual Studio 2008 Professional Edition&#8221; için download linki hazır değil ama 1 haftaya kadar o da çıkacakmış. Tamamen ücretsiz olan Express sürümlerinin 2008 versiyonları da <a href="http://www.microsoft.com/express/download/">indirilebilir durumda</a>. .NET Framework&#8217;ün 3.5 <a href="http://go.microsoft.com/?linkid=7755937">internetten kurulan</a> versiyonunu (2.7 MB) ve <a href="http://download.microsoft.com/download/6/0/f/60fc5854-3cb8-4892-b6db-bd4f42510f28/dotnetfx35.exe">tekrar dağıtılabilen (offline)</a> versiyonunu (197.1 MB) da Microsoft Downloads&#8217;dan indirebilirsiniz. .NET Framework 3.5 ayrıca 2.0 ve 3.0 versiyonlarının SP1&#8242;lerini de içermekte.</p><img src="http://feeds.feedburner.com/~r/huseyint/~4/4LsyM8ECQ30" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://huseyint.com/2007/11/visual-studio-2008-ve-net-framework-35-cikti/feed/</wfw:commentRss>
		<feedburner:origLink>http://huseyint.com/2007/11/visual-studio-2008-ve-net-framework-35-cikti/</feedburner:origLink></item>
		<item>
		<title>.NET Framework 3.5 çok kullanılan tipler ve namespaceler posteri</title>
		<link>http://feedproxy.google.com/~r/huseyint/~3/gYVYJ2pCzlE/</link>
		<comments>http://huseyint.com/2007/11/net-framework-35-cok-kullanilan-tipler-ve-namespaceler-posteri/#comments</comments>
		<pubDate>Mon, 05 Nov 2007 08:57:45 +0000</pubDate>
		<dc:creator>Hüseyin Tüfekçilerli</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[poster]]></category>

		<guid isPermaLink="false">http://huseyint.com/2007/11/net-framework-35-cok-kullanilan-tipler-ve-namespaceler-posteri/</guid>
		<description><![CDATA[Frameworkun 3.0 ve 3.5 sürümleri ile beraber gelen tip ve namespaceleri de gösteren şöyle bir poster hazırlamışlar:


Kaynak.
Güncelleme: XPS formatında biri tek parça ve biri de 16 parçalık halde olmak üzere iki yeni dosya daha eklenmiş. Tek parça halinde bastırmak biraz zor olacağı için, 16 tane A4 kağıda basıp birleştirmek mümkün.]]></description>
			<content:encoded><![CDATA[<p>Frameworkun 3.0 ve 3.5 sürümleri ile beraber gelen tip ve namespaceleri de gösteren <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=7B645F3A-6D22-4548-A0D8-C2A27E1917F8&#038;displaylang=en">şöyle bir poster</a> hazırlamışlar:</p>
<p align="center">
<p><a href='http://www.microsoft.com/downloads/details.aspx?FamilyID=7B645F3A-6D22-4548-A0D8-C2A27E1917F8&#038;displaylang=en' title='.NET Framework 3.5 çok kullanılan tipler ve namespaceler posteri'><img src='http://huseyint.com/wp-content/uploads/2007/11/posterthumbnail.png' alt='.NET Framework 3.5 çok kullanılan tipler ve namespaceler posteri' /></a></p>
<p><a href="http://blogs.msdn.com/pandrew/archive/2007/11/02/announcing-the-net-framework-3-5-commonly-used-types-and-namespaces-poster.aspx">Kaynak</a>.</p>
<p><strong>Güncelleme:</strong> XPS formatında biri <a href="http://download.microsoft.com/download/4/a/3/4a3c7c55-84ab-4588-84a4-f96424a7d82d/dotnet_poster_xps_large.xps">tek parça</a> ve biri de <a href="http://download.microsoft.com/download/4/a/3/4a3c7c55-84ab-4588-84a4-f96424a7d82d/dotnet_poster_xps_split.xps">16 parçalık</a> halde olmak üzere iki yeni dosya daha eklenmiş. Tek parça halinde bastırmak biraz zor olacağı için, 16 tane A4 kağıda basıp birleştirmek mümkün.</p><img src="http://feeds.feedburner.com/~r/huseyint/~4/gYVYJ2pCzlE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://huseyint.com/2007/11/net-framework-35-cok-kullanilan-tipler-ve-namespaceler-posteri/feed/</wfw:commentRss>
		<feedburner:origLink>http://huseyint.com/2007/11/net-framework-35-cok-kullanilan-tipler-ve-namespaceler-posteri/</feedburner:origLink></item>
		<item>
		<title>Bunu biliyor muydunuz: C# Null Coalesce Operator ya da ?? operatörü</title>
		<link>http://feedproxy.google.com/~r/huseyint/~3/RLEhPEIVNxA/</link>
		<comments>http://huseyint.com/2007/11/bunu-biliyor-muydunuz-c-null-coalesce-operator-ya-da-operatoru/#comments</comments>
		<pubDate>Fri, 02 Nov 2007 12:13:51 +0000</pubDate>
		<dc:creator>Hüseyin Tüfekçilerli</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[İpucu]]></category>

		<guid isPermaLink="false">http://huseyint.com/2007/11/bunu-biliyor-muydunuz-c-null-coalesce-operator-ya-da-operatoru/</guid>
		<description><![CDATA[Geçenlerde bir videoda ?? şeklinde bir C# operatörünün kullanımına şahit oldum. Başta .NET 3.5 ile gelen yeni özelliklerden biri gibi gelse de bu operatör aslında .NET 2.0&#8242;dan beri varmış da haberimiz yokmuş. Videodaki kodun gelişinden operatörün ne amaçla kullanıldığı açıktı; operatörün solunda bulunan operandın (operandın Türkçe&#8217;si işlenenmiş bu arada) değeri null değilse işlem sonucu bu [...]]]></description>
			<content:encoded><![CDATA[<p>Geçenlerde bir videoda <strong>??</strong> şeklinde bir C# operatörünün kullanımına şahit oldum. Başta .NET 3.5 ile gelen yeni özelliklerden biri gibi gelse de bu operatör aslında .NET 2.0&#8242;dan beri varmış da haberimiz yokmuş. Videodaki kodun gelişinden operatörün ne amaçla kullanıldığı açıktı; operatörün solunda bulunan operandın (operandın Türkçe&#8217;si <strong>işlenen</strong>miş bu arada) değeri null değilse işlem sonucu bu (soldaki) operand, null ise de sağdaki operand dönüyor. Şu şekilde:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp"><span style="color: #FF0000;">string</span> a = <span style="color: #0600FF;">null</span>;
<span style="color: #FF0000;">string</span> b = <span style="color: #808080;">&quot;foo&quot;</span>;
<span style="color: #FF0000;">string</span> c = a ?? b;</pre></div></div>

<p>kodu çalıştırıldığında c değişkeni a null değerine sahip olduğu için b&#8217;nin değeri olan &#8220;foo&#8221; değerine sahip oluyor. İşimizi bir çok sefer kolaylaştıran diğer bir operatör <strong>?:</strong> <a href="http://msdn2.microsoft.com/en-us/library/ty67wk28(VS.80).aspx">Ternary operatöründen</a> bile daha okunabilir bir kod sağlıyor. Ternary ile bunu şu şekilde yazabilirdik:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp"><span style="color: #FF0000;">string</span> a = <span style="color: #0600FF;">null</span>;
<span style="color: #FF0000;">string</span> b = <span style="color: #808080;">&quot;foo&quot;</span>;
<span style="color: #FF0000;">string</span> c = a != <span style="color: #0600FF;">null</span> ? a : b;</pre></div></div>

<p>Hele bir de if kullansaydık bu işlem için bu kadar daha kod yazmamız gerekecekti:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp"><span style="color: #FF0000;">string</span> a = <span style="color: #0600FF;">null</span>;
<span style="color: #FF0000;">string</span> b = <span style="color: #808080;">&quot;foo&quot;</span>;
&nbsp;
<span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>a != <span style="color: #0600FF;">null</span><span style="color: #000000;">&#41;</span>
    c = a;
<span style="color: #0600FF;">else</span>
    c = b;</pre></div></div>

<p>Operatörü iç içe geçmiş bir şekilde kullanırsak bir kaç değişken arasından ilk null olmayanını bulabiliriz:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp"><span style="color: #FF0000;">string</span> a = <span style="color: #0600FF;">null</span>;
<span style="color: #FF0000;">string</span> b = <span style="color: #0600FF;">null</span>;
<span style="color: #FF0000;">string</span> c = <span style="color: #808080;">&quot;foo&quot;</span>;
<span style="color: #FF0000;">string</span> d = a ?? b ?? c; <span style="color: #008080; font-style: italic;">// d = &quot;foo&quot;</span></pre></div></div>

<p>Operatörün MSDN sayfasına <a href="http://msdn2.microsoft.com/en-us/library/ms173224(VS.80).aspx">şuradan</a> ulaşabilirsiniz.</p>
<p>Bu operatör aslında JavaScript yazarken kullandığımız <strong>||</strong> operatörü ile aynı işi yapıyor; ilk operand null değilse onu null ise sonrakini döndür.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript"><span style="color: #003366; font-weight: bold;">var</span> foo = <span style="color: #3366CC;">&quot;bar&quot;</span>;
<span style="color: #003366; font-weight: bold;">var</span> baz = <span style="color: #003366; font-weight: bold;">null</span>;
<span style="color: #000066;">alert</span><span style="color: #66cc66;">&#40;</span>foo || baz<span style="color: #66cc66;">&#41;</span>;</pre></div></div>
<img src="http://feeds.feedburner.com/~r/huseyint/~4/RLEhPEIVNxA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://huseyint.com/2007/11/bunu-biliyor-muydunuz-c-null-coalesce-operator-ya-da-operatoru/feed/</wfw:commentRss>
		<feedburner:origLink>http://huseyint.com/2007/11/bunu-biliyor-muydunuz-c-null-coalesce-operator-ya-da-operatoru/</feedburner:origLink></item>
		<item>
		<title>ASP.NET ile MVC programlama, sonunda!</title>
		<link>http://feedproxy.google.com/~r/huseyint/~3/qfU2D1feQlI/</link>
		<comments>http://huseyint.com/2007/10/aspnet-ile-mvc-programlama-sonunda/#comments</comments>
		<pubDate>Sat, 27 Oct 2007 10:39:17 +0000</pubDate>
		<dc:creator>Hüseyin Tüfekçilerli</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[asp.net]]></category>

		<category><![CDATA[mvc]]></category>

		<guid isPermaLink="false">http://huseyint.com/2007/10/aspnet-ile-mvc-programlama-sonunda/</guid>
		<description><![CDATA[ASP.NET&#8217;in varsayılan programlama yaklaşımı Web Forms&#8216;a bir türlü ısınamıyorum, ısınamayacağım da. Oysa ki klasik ASP (3.0) ne güzeldi, bir Request bir de Response nesnesi yetiyordu. Tamam, sayfanın yenilenmesi gibi durumlarda form değerlerini olması gereken yerlere doldurma hammalığı programcıya kalıyordu, ama ASP.NET&#8217;in &#60;form runat=&#8221;server&#8221;&#62; mantığı da pek hoş değildi. Binbir türlü yol (postback, viewstate, vs.) ile [...]]]></description>
			<content:encoded><![CDATA[<p>ASP.NET&#8217;in varsayılan programlama yaklaşımı <a href="http://msdn.microsoft.com/msdnmag/issues/01/05/webforms/" title="ASP .NET: Web Forms Let You Drag and Drop Your Way to Powerful Web Apps">Web Forms</a>&#8216;a bir türlü ısınamıyorum, ısınamayacağım da. Oysa ki <a href="http://en.wikipedia.org/wiki/Active_Server_Pages">klasik ASP</a> (3.0) ne güzeldi, bir Request bir de Response nesnesi yetiyordu. Tamam, sayfanın yenilenmesi gibi durumlarda form değerlerini olması gereken yerlere doldurma hammalığı programcıya kalıyordu, ama ASP.NET&#8217;in &lt;form runat=&#8221;server&#8221;&gt; mantığı da pek hoş değildi. Binbir türlü yol (postback, viewstate, vs.) ile Microsoft mühendisleri web programcıların daha az kod ile hızlı bir şekilde nam-ı diğer Web Form Uygulamaları yazmalarını sağlıyordu. Bu çabaların hakkını vermek lazım, zira ASP.NET ile web programlama öyle bir duruma gelmişti ki Visual Studio ortamında masaüstü uygulama yazmaktan pek bir farkı kalmamıştı. Asıl amaç da bu değil miydi zaten, Visual Studio ile yıllardan beri aşina olan Microsoft teknolojileri odaklı programcıların bu yeni web programlama yaşam döngüsüne hızlı bir şekilde uyum sağlamaları. İyi güzel de bir şey unutuldu gibi geliyor bana, yazılan uygulamalar web uygulamaları olacaktı. Yani masaüstünden tamamen ayrı bir ortamda hayatlarını sürdüreceklerdi. Öyle bir ortam ki sunucu tarafını ayrı düşünmek, istemci (browser) tarafını ayrı düşünmek ve ona göre kod yazmak gerekiyordu. Web&#8217;in eti-kemiği olan <a href="http://www.w3.org/Protocols/rfc2616/rfc2616.html"><acronym class="uttInitialism" title="HyperText Transfer Protocol">HTTP</acronym> protokolünü</a> ve <acronym class="uttInitialism" title="HyperText Markup Language">HTML</acronym> dilini sular seller gibi bilmesek de bir formu <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.3">GET</a> veya <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.5">POST</a> ile göndermenin farkını, hangi etiketin nerede kullanıldığında <a href="http://huseyint.com/projeler/aptal-tablolar/" title="Aptal Tablolar">daha anlamlı</a> olacağını bilmek bir web programcısının boynunun borcu olsa gerek.</p>
<p>Oysa ki ASP.NET&#8217;in arkasında muazzam bir framework, <a href="http://msdn2.microsoft.com/en-us/library/aa388745.aspx">BCL</a> (Base Class Library) var. Klasik ASP&#8217;de olan Request, Response, Session, vs. nesneleri bunda yok mu; var tabii ki hem de çok daha zengin, çok daha kullanılabilir. Bana göre tek yanlış olan bunların üzerine kurulan ASP.NET Web Forms yapısı. <a href="http://www.castleproject.org/monorail/index.html">MonoRail</a> isimli proje ile <a href="http://www.rubyonrails.org/" class="ubernym uttInitialism"><acronym class="uttInitialism" title="Ruby on Rails">RoR</acronym></a>&#8217;daki web programlama mantığı .NET ortamına getirilmeye çalışılıyor. Bunun ile bir proje geliştirmeye fırsatım olmadı ancak muhtemelen Web Forms mantığından daha uygulanabilir olacağını tahmin ediyorum.</p>
<p>İşte bu noktada <a href="http://weblogs.asp.net/scottgu/">ScottGu</a> geçtiğimiz haftalarda <a href="http://www.altnetconf.com/">ALT.NET</a> konferansında Microsoft tarafından geliştirilmekte olan ASP.NET <acronym class="uttInitialism" title="Model View Controller">MVC</acronym> Framework&#8217;unu tanıttı. Daha üzerinde çalışmalar süren bu frameworkun bu yıl sonuna doğru genel önizleme (&#8221;public preview&#8221; demek istiyorum :)) sürümü geliştiricilere bir <acronym class="uttInitialism" title="Community Technology Preview">CTP</acronym> olarak sunulacak. .NET 3.5&#8242;e dahil olmayacak bu framework, aynı ASP.NET <acronym class="uttAcronym" title="Asynchronous Javascript And XML">AJAX</acronym> (Asynchronous Javascript And <acronym class="uttInitialism" title="eXtensible Markup Language">XML</acronym>) (daha önce Atlas olarak da bilinen) gibi ASP.NET üzerine ek bir framework olarak dağıtılacak. 2008&#8242;in ilk yarısında da son halinin çıkması planlanıyor.</p>
<p style="text-align: center;">
<img src="http://huseyint.com/wp-content/uploads/2007/10/aspnet-mvc.jpg" alt="ASP.NET MVC ile “Merhaba Dünya”" />
</p>
<p>Orjinal duyuruyu <a href="http://weblogs.asp.net/scottgu/archive/2007/10/14/asp-net-mvc-framework.aspx">ScottGu&#8217;nun blogunda</a>; ayrıntılı bilgiyi, blog camiasından konu ile ilgili linkleri ve ScottGu&#8217;nun tanıtım videosunu (izlemeniz şiddetle tavsiye olunur) <a href="http://www.hanselman.com/blog/ScottGuMVCPresentationAndScottHaScreencastFromALTNETConference.aspx">ScottHa&#8217;nın blogunda</a> bulabilirsiniz. Konu ile ilgili (blogunu yeni keşfettiğim) <a href="http://www.tahiroglu.com/post/aspnet-mvc-framework-ve-dusundurdukleri.aspx" title="ASP.NET MVC Framework ve Düşündürdükleri">Muhammed Tahiroğlu&#8217;nun yazısını</a> da okumanız tavsiye ederim.</p><img src="http://feeds.feedburner.com/~r/huseyint/~4/qfU2D1feQlI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://huseyint.com/2007/10/aspnet-ile-mvc-programlama-sonunda/feed/</wfw:commentRss>
		<feedburner:origLink>http://huseyint.com/2007/10/aspnet-ile-mvc-programlama-sonunda/</feedburner:origLink></item>
	</channel>
</rss>
