Posts Tagged :

c#

Components on Blazor 1024 557 mezo

Components on Blazor

Hi my fellow Padawans

Blazor is a frontend framework like Angular or React but mostly like React and it has components for create pages and reusable objects functionalities.

But how can we create a component and use it on the pages in our Blazor application?

First Read this Article and create your first Blazor application 🙂

Then on your Solution Explorer find Pages and right click on it and Add -> Razor Component

On Add New Item windows write your components name and create it

I decided to make something different and I created Todo.Razor file and I add these codes on the page

@page "/todo"
@using BlazorApp1.Data;

<h3>Todo</h3>

<ul>
    @foreach (var todo in todos)
    {
            <li>@todo.Title</li>
    }
</ul>

<input placeholder="Something todo" @bind="newTodo" />
<button @onclick="AddTodo">Add todo</button>

@code {
    private List<TodoItem> todos = new();
    private string? newTodo;

    private void AddTodo()
    {
        if (!string.IsNullOrWhiteSpace(newTodo))
        {
            todos.Add(new TodoItem { Title = newTodo });
            newTodo = string.Empty;
        }
    }
}

And find NavMenu.razor file inside of the Shared folder on your Solution Explorer. Find the last item of menu divs and Add this code:

  <div class="nav-item px-3">
            <NavLink class="nav-link" href="todo">
                <span class="oi oi-list-rich" aria-hidden="true"></span> Todo
            </NavLink>
        </div>

You will have a NavMenu.Razor page like this:

<div class="top-row ps-3 navbar navbar-dark">
    <div class="container-fluid">
        <a class="navbar-brand" href="">BlazorApp1</a>
        <button title="Navigation menu" class="navbar-toggler" @onclick="ToggleNavMenu">
            <span class="navbar-toggler-icon"></span>
        </button>
    </div>
</div>

<div class="@NavMenuCssClass" @onclick="ToggleNavMenu">
    <nav class="flex-column">
        <div class="nav-item px-3">
            <NavLink class="nav-link" href="" Match="NavLinkMatch.All">
                <span class="oi oi-home" aria-hidden="true"></span> Home
            </NavLink>
        </div>
        <div class="nav-item px-3">
            <NavLink class="nav-link" href="counter">
                <span class="oi oi-plus" aria-hidden="true"></span> Counter
            </NavLink>
        </div>
        <div class="nav-item px-3">
            <NavLink class="nav-link" href="fetchdata">
                <span class="oi oi-list-rich" aria-hidden="true"></span> Fetch data
            </NavLink>
        </div>
        <div class="nav-item px-3">
            <NavLink class="nav-link" href="todo">
                <span class="oi oi-list-rich" aria-hidden="true"></span> Todo
            </NavLink>
        </div>
    </nav>
</div>

@code {
    private bool collapseNavMenu = true;

    private string? NavMenuCssClass => collapseNavMenu ? "collapse" : null;

    private void ToggleNavMenu()
    {
        collapseNavMenu = !collapseNavMenu;
    }
}

When you open the webpage you will see the Todo on your left navigation menu and then you will see your amazing Todo application like below:

If you want to use this component in other pages for example add this component on the home page. Go to your Index.Razor inside of the Pages folder and add this code :

<Todo/>

Your index.Razor will look like this

@page "/"

<PageTitle>Index</PageTitle>

<h1>Hello, Everyone!</h1>

Welcome to your new app. Hello 

<SurveyPrompt Title="How is Blazor working for you?" />




<Todo/>

Then we RUN our app oooorrr we can Hot Reload and we will see the result like below:

That is easy isn’t it ?

I hope that is helpful

May the knowledge be with you

Create Your First Blazor Application 1024 557 mezo

Create Your First Blazor Application

Hello My Fellow Padawans 🙂

Today I will tell you about a new Frontend Technology called “Blazor”. It sounds similar from somewhere… Yes Razor and yes its a Microsoft technology.

Ok but lets remember what is RAZOR first: Razor is a format for generating text-based content, like HTML. Razor files have cshtml or a razor file extension, and contain a mix of C# code along with HTML.

What is Blazor

Blazor is a user-interface framework built on .NET and Razor. Blazor applications can run on a server as part of an ASP.NET application or can be deployed to run in the browser on a user’s machine similar to a single-page application. It comes with 2 different app styles.

Blazor Server: is an implementation of the Blazor user-interface framework as part of the ASP.NET Core web development framework, deployed to a web server. Developing an application with Blazor Server generates HTML on a web server as it is requested by web site visitors, typically using a web browser. That HTML is then delivered to the visitor’s browser, and a two-way communication pipeline is maintained using ASP.NET Core SignalR and preferring a Web Sockets connection.

Users that click buttons, navigate, and perform other interactions with a Blazor Server application have their actions transmitted on this SignalR connection, and the server responds with user-interface updates using the same connection. The Blazor Server framework automatically updates the browser with the content generated on the web server.

Blazor WebAssembly: Shortened to Blazor WASM, is an implementation of the Blazor user-interface framework that runs on the HTML 5 standard WebAssembly runtime present in all modern browsers. The binary output of your application, the DLL files, are transmitted to the browser and run with a version of .NET that has been optimized to work with the WebAssembly runtime regardless of the underlying operating system of the device browsing to the website.

Since WebAssembly is a technology that runs entirely in the browser, it’s possible to deploy this model of the Blazor application using files that a web server doesn’t parse or interact with. This type of “static” approach reduces the requirements for a web server and shifts all processing for the application to the user’s machine.

Advanced processing and logic can take place in the browser. When the application needs data or to interact with other services, it can use standard web technologies to communicate with HTTP services.

How to build an application with Blazor

Start your Visual Studio 2022

Then create Blazor Server App and in the Configure your new project window, enter BlazorApp as the project name and select Next.

In the Additional information window, select .NET 7.0 (Standard Term Support) in the Framework drop-down if not already selected and click the Create button.

Your project is created and loaded in Visual Studio. Take a look at the contents of your project using Solution Explorer.

Several files were created to give you a simple Blazor app that is ready to run.

  • Program.cs is the entry point for the app that starts the server and where you configure the app services and middleware.
  • App.razor is the root component of the app.
  • The Pages directory contains some example web pages for the app.
  • BlazorApp.csproj defines the app project and its dependencies and can be viewed by double-clicking the BlazorApp project node in the Solution Explorer.
  • The launchSettings.json file inside the Properties directory defines different profile settings for the local development environment. A port number is automatically assigned at project creation and saved on this file.

To run your application basically click the Run button.

When you made some changes and you want to see your changes on the browser you need to click the Hot Reload button

If you want to make “Hot Reload” every time you save your changes then you need to click the menu button next to “Hot Reload” and select “Hot Reload on File Save” Then VS will watch your file save and refresh your web app on the browser to show your changes.

After you run your app you will see the default app of the Blazor.

Congrats you made your first Blazor App and make it run!

Last thing I want to show is how Blazor files and pages look like

_Host.cshtml This holds our application and renders page components.

@page "/"
@namespace BlazorApp1.Pages
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@{
    Layout = "_Layout";
}

<component type="typeof(App)" render-mode="ServerPrerendered" />

Index.razor : This is the Home page that you see on the screenshot below.

@page "/"

<PageTitle>Index</PageTitle>

<h1>Hello, Everyone!</h1>

Welcome to your new app. Hello 

<SurveyPrompt Title="How is Blazor working for you?" />

Counter.razor and this is the counter component as a page. It’s easy to render and reuse.

@page "/counter"

<PageTitle>Counter</PageTitle>

<h1>Counter</h1>

<p role="status">Current count: @currentCount</p>

<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>

@code {
    private int currentCount = 0;

    private void IncrementCount()
    {
        currentCount++;
    }
}

Congrats 🙂 you open the new Blazor App and make that work

I will keep continuing to write about it coz I probably will use it for my company.

I hope that is helpful

May the knowledge be with you

C# – DataTable İçindeki Verilerin Sıralarını Ters Çevirmek 150 150 mezo

C# – DataTable İçindeki Verilerin Sıralarını Ters Çevirmek

Merhaba arkadaşlar
Her yazılımcının korkulu rüyası olan test uzmanı arkadaşlarımdan biri olan Bill bir hata kaydı açmış ve demiş ki şu şu sayfada ki listelenen verilerin sıralamaları yanlış ters olması lazım demiş. Bende ufak bir araştırma sonucu bir metod oluşturarak bu problemi çözdüm ve pratik bir bilgi olması açısından sizlerle paylaşmak istedim.
İşte o kodlar 🙂

[codebox 1]

Bilgiyle Kalın
M.Zeki OSMANCIK

C# ile Powerpoint Sunumu Hazırlamak 554 382 mezo

C# ile Powerpoint Sunumu Hazırlamak

Merhaba arkadaşlar
Uzun süreden beri bir makale yazmaya vakit bulamıyorum ama yavaş yavaş geri dönüyorum. Bu yazıda sizlere zevkli küçük bir örnek göstermek istiyorum. 😀 C# üzerinden program yardımı ile PowerPoint sunumu hazırlamanın nasıl olduğu ile ilgili başlangıçta çok işinize yarayacak bir kod parçası
Bunun için öncelikle bir windows Forms projesi açalım ve 1 tane Buton ekleyelim 🙂 Projemiz içersine Referans olarak 2 önemli kütüphane eklememiz gerekiyor. Sağa tıklayıp “Add Reference” dedikten sonra “COM” sekmesi içersinde bulunan microsoft graph 15.0 object library ve microsoft PowerPoint 15.0 object library kütüphanelerini seçip ekleyelim.
Artık gerisi çok kolay 🙂 işte bundan sonra işi yapacak olan kod parçası

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.Office.Interop.PowerPoint;
using Microsoft.Office.Core;

namespace testToCreatePttFileFromImages
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
string pictureFileName = “C:\\picToVideo\\2.jpg”;

Microsoft.Office.Interop.PowerPoint.Application pptApplication = new Microsoft.Office.Interop.PowerPoint.Application();

Microsoft.Office.Interop.PowerPoint.Slides slides;
Microsoft.Office.Interop.PowerPoint._Slide slide;
Microsoft.Office.Interop.PowerPoint.TextRange objText;

// Create the Presentation File
Presentation pptPresentation = pptApplication.Presentations.Add(MsoTriState.msoTrue);

Microsoft.Office.Interop.PowerPoint.CustomLayout customLayout = pptPresentation.SlideMaster.CustomLayouts[Microsoft.Office.Interop.PowerPoint.PpSlideLayout.ppLayoutText];

// Create new Slide
slides = pptPresentation.Slides;
slide = slides.AddSlide(1, customLayout);

// Add title
objText = slide.Shapes[1].TextFrame.TextRange;
objText.Text = “The Header Of The Presentation”;
objText.Font.Name = “Arial”;
objText.Font.Size = 32;

//objText = slide.Shapes[2].TextFrame.TextRange;
//objText.Text = “this text come after the heading with bullet”;

Microsoft.Office.Interop.PowerPoint.Shape shape = slide.Shapes[2];
slide.Shapes.AddPicture(pictureFileName, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoTrue, shape.Left, shape.Top, shape.Width, shape.Height);

//slide.NotesPage.Shapes[2].TextFrame.TextRange.Text = “the text is for the notes to specific page”;

pptPresentation.SaveAs(@”c:\picToVideo\fppt.pptx”, Microsoft.Office.Interop.PowerPoint.PpSaveAsFileType.ppSaveAsDefault, MsoTriState.msoTrue);
pptPresentation.Close();
pptApplication.Quit();

}
}
}

SOLID OOP Prensipleri 511 409 mezo

SOLID OOP Prensipleri

Merhaba arkadaşlar
Bu yazımda sizlerle OOP yazarken dikkat etmemiz gereken OOP yi gerçek anlamıyla programlarımıza veya web sitelerimize uygulama aşamasında nelere dikkat etmeliyiz bu konyu işleyen SOLID OOP Prensipleri ile ilgili küçük bir bilgilendirme yapacağım
OOP yi herkes bilir az çok anlatır veya basit yöntemlerle uygular yada uyguladığını sanar. Halbuki OOP programlama yaparken bir takım prensipler uygulanmalıdır. Bu prensiplerin baş harflerinden oluşan bir keyword var elimizde. SOLID
Solid 5 ayrı prensibin birleşmiş halidir ve OOP yaparken uygulamamız gereken kurallardan bahsederler. Hadi bakalım bu akrostiş şiir tadındaki prensipler neymiş görelim:
1- Single Responsibility Principle
2- Open/Closed Principle
3- Liskov’s Substitution Principle
4- Interface Sergregation Principle
5- Dependency Inversion Principle
İlk madde ile başlayalım küçük açıklamalar yapmaya.
1. Single Responsibility Principle : Bu prensibe göre bir metot, sınıf,nesne vb. yapıların yanlızca bir tane görevi olur. Bir metot, sınıf,nesne vb. değiştirmek için yanlızca bir sebebimiz olmalıdır. Birden fazla nedenimiz varsa bir yanlışlık var ve bu prensibe uymuyoruz anlamına gelir. Amaç her metot, sınıf,nesne vb. yapıya tek bir görev tek bir sorumluluk yüklemektir.
2. Open/Closed Principle : Yazmış olduğunuz metot, sınıf,nesne vb. yapılar geliştirmeye açık ancak değiştirmeye kapalı olmalıdır. Bu ne demektir peki: yazmış olduğunuz kod asla değiştirilmemelidir yanlızca üzerine eklemeler yapılmalıdır. Kodlarımızı yazarken bu şekilde dizayn etmeliyiz.
3. Liskov’s Substutions Principle : Bu prensibe göre alt sınıflardan elde ettiğiniz bir nesne ile üst sınıftan elde edilen nesne yer değiştirirse bu değişim kesinlikle ve kesinlikle aynı davranışa sahip olmalıdır. Yani örnekleyecek olursak OOP anlatırken hep bahsettiğimiz bir örnek olan CANLI sınıfımız olsun ve bu CANLI adındaki sınıfımız INSAN ve HAVYAN adlı iki sınıfa kalıtım vermiş olsun. Bu prensipte anlatılmaya çalışılan şey eğer ben bir işlemde CANLI sınıfını kullanıyorsam ve işlemlerim başarılı oluyorsa INSAN veya HAYVAN sınıfından aldığım örnekler ilede aynı işlemleri başarılı olarak gerçekleştirebilmeliyim içersinde bunu engelleyecek başka metot, sınıf,nesne vb. yapılar bulunmamalı demek istiyor.
4. Interface Sergregation Principle : Prensip olarak aynı özelliklere sahip olan sınıfları tek bir interface de toplamak sonradan o sınıfların hepsinde kesin olarak kullanılmayacak olan başka metot, sınıf,nesne vb. yapıları bu interface içersine eklemek doğru değildir. Ilk başta belki bir çözüm olabilir ama prensip olarak yanlıştır. Çözüm ise interface ‘leri parçalamaktır. Kesin olarak kullanılacak olan ortak metot, sınıf,nesne vb. yapıları ayrı ayrı interface ler içersinde toplayarak sınıflara implement etmektir.
5. Dependency Inversion Principle : Somut sınıflara olan bağımlılığı soyut sınıflar veya interface ler ile ortadan kaldırmaktır. Yani bir servis sınıfımız var ve bu servis sınıfı DB işlemleri ile ilgili işlemler gerçekleştiriyor. Başka bir A sınıfı üzerinden bu Servis sınıfına bağ kurup işlemlerimizi gerçekleştirirken ürettiğimiz A sınıfımız içersinde servis sınıfının bir çok örneği alınacak ve bir çok yerde kullanılabilecek ve kodlarımızı değiştirirken bağlı olan kısımlarda değişecek yada servis sınıfında yapılan bir değişiklik bizim servisi kullanan A sınıfımızdada değişikliklere sebep olacak . Amaç bu bağımlılığı ortadan kaldırmak ve daha güzel bir kod ortamı sağlamak.
Bu prensiplerde kod yazmak zorunlu olarak yapmanız gereken bir şey değil ama bu şekilde yazmanın tek bir amacı var daha az hata daha güzel kodlar 😀
Bilgiyle Kalın
M.Zeki Osmancık

Design Patterns (Tasarım Deseni) Nedir ? 1024 777 mezo

Design Patterns (Tasarım Deseni) Nedir ?

Merhaba arkadaşlar
Konumuz Design Pattern 🙂 Biliyorum bir çok kişi bu konu hakkında birşeyler yazmıştır ancak birde ben yazayım dedim. Benim blogumda neden design pattern yok ben neden yazmıyorum dedim 🙂 ve işte Design Pattern…
Design Pattern genel olarak yazılım tasarımı sürecinde sürekli karşılaşılan problemlere çözümler üreten hazır kalıplardır. İstenilen herhangi bir yere yerleştirildiğinde çalışan hazır tasarımlar değildirler. İşin aslı problemler için bulunan çözümlere yapılan açıklamalardır
OOP(Object Oriented Programming) prensipleri doğrultusunda oluşturulan sınıfların başka sınıflara bağımlılığının en aza indirgenmesi beklenir. Bu durum esnek bir yapıyı beraberinde getirir ve yazılımın kalitesi artar. İleride gerekecek geliştirmelere daha müsait bir yapı sağlamış olur. Bu yapı, yazılımcıya ve o yazılımcıdan sonra gelecek yazılımcıya zamandan ve iş gücünden ciddi manada tasarruf sağlar.
Tasarım şablonları aşağıda yer alan ortak özelliklere sahiptir:

  • Edinilen tecrübeler sonunda ortaya çıkmışlardır.
  • Amerikanın tekrar tekrar keşfedilmesini engeller 😀 .
  • Tekrar kullanılabilir kalıplardır.
  • Ortak kullanılarak daha büyük problemlerin çözülmesine katkı sağlarlar.
  • Devamlı geliştirilerek, genel bir çözüm olmaları için çaba sarfedilir.

Tasarım şablonları değişik kategorilere ayrılır. Bunlar:

  • Oluşturucu tasarım şablonları (creational patterns)
  • Yapısal tasarım şablonları (structual patterns)
  • Davranışsal tasarım şablonlar (behavioral patterns)

Oluşturucular

  • Abstract Factory
  • Builder
  • Factory Method
  • Prototype
  • Singleton

Yapısal

  • Adapter
  • Bridge
  • Facade
  • Decorator
  • Composite
  • Flyweight
  • Proxy

Davranışsal

  • Command
  • Memento
  • Strategy
  • Iterator
  • State
  • Chain Of Responsibility
  • Mediator
  • Observer
  • Template Method
  • Visitor

Bu desenlerin yanlızca çok çok basit açıklaması. Yukarda saydığım desenleri tek tek açıklamayı planlıyorum 🙂 Zaman buldukça yazıyor olacağım. Sizlerde beni bekliyor olun 😀
Bilgiyle Kalın 😉
M.Zeki Osmancık

DataTable ‘dan List e Dönüştürme 342 204 mezo

DataTable ‘dan List e Dönüştürme

Merhaba arkadaşlar

Bu yazıda sizlere DataTable ile gelen veriyi List<T> olarak geri döndürmek istersek bu dönüştürmeyi LambdaExpressions /LINQ ile nasıl yapabiliriz ondan bahsetmek istiyorum.

Umarım Yararlı Olur
Bilgiyle Kalın
M.Zeki Osmancık

HttpCookie Nedir ? 279 180 mezo

HttpCookie Nedir ?

Merhaba arkadaşlar
HttpCookie yapısından önce çok temel bilgi olarak Cookie nedir ondan bahsedelim 🙂
Cookie Nedir?
Bir web sayfası sunucusunun sizin bilgisayarınızın hard diskine yerleştirdiği ufak bir text dosyasıdır. Yani, o web sitesinin bir sonraki ziyarette sizi tanıması için geçerli bir bilgidir. Bu text dosyası bir komut dosyası olmadığı gibi, virüs de değildir. Size özel bir tanımlamadır ve sadece bu kodu tanımlayan web sunucusu tarafından okunabilir.Cookie’nin amacı; sizin o siteyi yeniden ziyaret ettiğinizi web sunucuya bildirmekten ibarettir.

HttpCookie Nedir?
Asp.Net ile yaptığımız sitelerimizde Cookie oluşturmak için kullandığımız bir class tır. Cookie nin yönetimini HttpRequest ve HttpResponse class ile gerçekleştirilir.
HttpCookie yi oluşturmak için

HttpCookie MyCookie = new HttpCookie("Cerezim");

Instance alındıktan sonra içersindeki property leride şu şekilde kısaca açıklayabiliriz.
Domain: Cookie nin etki alanını ayarlamak için kullanılır.
Expires: Cookie nin geçerlilik süresini ayarlamak için kullanılır DateTime tipinde değer alır.
HasKeys: Cookie içersinde alt anahtarlar olup olmadığını kontrol etmek için kullanılır.
HttpOnly: Cookie ye client tarafından javascript kodları tarafından ulaşılabilir olmasını sağlayan bir property dir.
Item: HttpCookie.Values özelliği için bir kısayoldur. Bu özellik Active Server Pages (ASP) nin önceki sürümleriyle uyumluluk sağlamak için kullanılır.
Name: Cookie ye bir isim verir veya cookie ismini okuyabilidiğimiz property.
Path: Cookie nin sanal adresini atayıp okuyabildiğimiz property
Secure:SSL uzerinden kullanilacak olan cookie ler ile ilgili guvenlik degerlerinin atandigi property dir.HTTPS uzerinden kullanilabilir
Value:Cookie içersine yerleştirilecek olan değeri atamak için kullanılır.
Values: Cookie içersine birden fazla değer atayabilmek için kullanılır.

Cookie tanımlayabilmek için HttpCookie sınıfından bir örnek alıp şu şekilde kullanabiliriz.

HttpCookie MyCookie = new HttpCookie("Cerezim");
MyCookie = Request.Cookies.Get("Cerezim");
if(MyCookie!=null)
{
Response.Write(MyCookie.Value);
}

Simdilik bu kadar daha sonraki yazilarda ayrintili sekilde nasil cookie tanimlayip kullanabiliriz ornek proje ile destekleyip gosterecegim.
Umarim yararli olur
Bilgiyle Kalin
M.Zeki OSMANCIK

C# ve PHP 3DESCrypto 691 618 mezo

C# ve PHP 3DESCrypto

Merhaba arkadaşlar
Bu kez sizlere şifreleme yöntemi olan 3DES(Triple Data Encryption Algorithm diye geçer ancak DES kısaltması Data Encryption Standard dan gelmektedir.) şifreleme yönteminin kodlarını vermek istiyorum belki bu yazıya daha sonra ayrıntılı şekilde bunun ne olduğu ile ilgilide birşeyler ekleyebilirim. 🙂 PHP ve C# için kodları aşağıda sizlerle paylaşıyorum
PHP

function encrypt($string) {
//Key
$key = "xxxxxxxx";

//Encryption
$cipher_alg = MCRYPT_TRIPLEDES;

$iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher_alg,MCRYPT_MODE_ECB), MCRYPT_RAND);

$encrypted_string = mcrypt_encrypt($cipher_alg, $key, $string, MCRYPT_MODE_ECB, $iv);
return base64_encode($encrypted_string);
return $encrypted_string;
}

function decrypt($string) {
$string = base64_decode($string);

//key
$key = "xxxxxxxx";

$cipher_alg = MCRYPT_TRIPLEDES;

$iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher_alg,MCRYPT_MODE_ECB), MCRYPT_RAND);

$decrypted_string = mcrypt_decrypt($cipher_alg, $key, $string, MCRYPT_MODE_ECB, $iv);
return trim($decrypted_string);
}

C# encryption:

using System;
using System.Security.Cryptography;
using System.Text;

public class Crypto3DES
{
public Crypto3DES()
{

}

private System.Text.Encoding encoding;

public string Key
{
get
{
return "xxxxxxxx";
}
}

public System.Text.Encoding Encoding
{
get
{
if( encoding == null )
{
encoding = System.Text.Encoding.UTF8;
}
return encoding;
}

set
{
encoding = value;
}
}

public string Encrypt3DES( string strString )
{
DESCryptoServiceProvider DES = new DESCryptoServiceProvider();

DES.Key = Encoding.GetBytes( this.Key );
DES.Mode = CipherMode.ECB;
DES.Padding = PaddingMode.Zeros;

ICryptoTransform DESEncrypt = DES.CreateEncryptor();

byte[] Buffer = encoding.GetBytes(strString);

return Convert.ToBase64String(DESEncrypt.TransformFinalBlock(Buffer, 0, Buffer.Length));
}

public string Decrypt3DES( string strString )
{
DESCryptoServiceProvider DES = new DESCryptoServiceProvider ();

DES.Key = Encoding.UTF8.GetBytes( this.Key );
DES.Mode = CipherMode.ECB;
DES.Padding = PaddingMode.Zeros;
ICryptoTransform DESDecrypt = DES.CreateDecryptor();

byte[] Buffer = Convert.FromBase64String(strString);
return UTF8Encoding.UTF8.GetString( DESDecrypt.TransformFinalBlock(Buffer, 0, Buffer.Length) );
}
}

Umarım Yararlı Olur
Bilgiyle Kalın
M.Zeki Osmancık

ASP.Net Türkçe Karakter Sorunu 962 192 mezo

ASP.Net Türkçe Karakter Sorunu

Merhaba arkadaşlar

ASP.Net türkçe karakter sorunu ile ilgili küçük bir bilgi vermek isterim 🙂 Eğer asp.net sayfanızda türkçe karakter sorunu yaşıyorsanız Aşağıdaki kodu “webconfig” sayfanızdaki “<system.web>” tagı altına yapıştırmanız yeterli olacaktır… 😉


 

Bilgiyle Kalın 😉

M.Zeki Osmancık

WCF Service Nedir? 448 274 mezo

WCF Service Nedir?

Merhaba arkadaşlar

WCF Service nedir konusu üzerinde bir kaç basit açıklama yapmak istiyorum. Bilindiği gibi microsoft bugüne kadar dağıtık uygulamalarının (Distrubuted Applications) geliştirilebilmesi için  .Net Remoting, XML Web Servisleri, MSMQ,COM+ gibi sistemleri geliştirmiştir.  WCF Service de temel olarak bu sistemlerin hepsinin yeteneklerine sahip ve tam SOA (Service Oriented Architecture – Servis Yönelimli Mimari) desteü, sağlayan güçlü bir Framework API si olarak açıklanabilir.

WCF iki önemli özellik ile birlikte karşımıza çıkmakta: bunlardan birincisi Microsoft tarafındaki servislerin farklı platformlar tarafından ele alınabilmesidir (Interoperability) . Böylece karmaşık .Net tiplerini özel olarak Java ,Com gibi modelleri destekleyen platformlara dağıtabiliriz. Bu yüzdende Linuz ,Unix gibi sistemler servislerimizin birer tüketicisi olabilirler.

İkinci özellik ise Windows kısmında yapılan dağıtık modeller arasında var olacak olan entegrasyonlarının tek bir çatı altında toplanabilmesidir. Bu özellik dışında WCF Service  , CLR tiplerini birer servis olarak sunabilmemizi ve servisleri birer CLR tipi olarak kullanabilmemizi sağlayan bir mimari sunmaktadır.

WCF Service ‘e aynı makine içinde aynı process te yer alan farklı bir Application Domain üzerinden ,aynı makinede yer alan farklı bir process içindeki farklı Application Domain üzerinden , farklı bir makinedeki process içinde yer alan Application Domain üzerinden ulaşabiliriz. Client’ lar hangi Application Domain üzerinde olursa olsunlar servis ile olan iletişimlerini proxy nesnesi üzerinden sağlamak zorundadırlar.

İngilizce kaynaklarda WCF Service ‘in ABC sinden sıkça bahsedilmektedir. Bu ABC nedir alfabemi diye sorarsanız değil 😀 ABC Addresses Bindings Contracts anlamına gelen ve WCF in çekirdeğinde yer alan önemli kavramlardır.

Addresses : Bulunan her servis benzersiz bir adrese sahip olmalıdır Özellikle bir servis adresi servisin teri taşıma protokolü bilgilerinden oluşmalıdır. Servis yeri derken kastetmeye çalıştığım şeyler aslında : Bilgisayar adı, site adı i network , iletişim portu, pipe queue, URI adları ve kesin bir path adresi   olarak sıralanabilir. Burada kullanılan taşıma protokolleri ise HTTP , TCP, P2P , IPC , MSMQ olarak soralanabilir.

Contracts : Bir servisin ne iş yaptığını bilmek önemlidir. Özellikle client’ ların ihtiyaç duyduğu proxy sınıflarının yazılmasında önemli bir konudur. Bu sebeple WCF Service üzerinde tüm servisler dış ortama bir Contract sunmaktadır. Genel manada 4 tane contract tipi vardır. bunlar

Service Contract : Serviste hangi operasyonların var olduğu ile alakalı sözleşmedir.

Data Contract :Servislerden client ‘lara giden ve client ‘ lardan servise gelen veri tiplerini tanımlayan sözleşmedir. Int String gibi bilinen tipler için bu sözleşmeler Implicit yani bilinçsiz olarak hazırlanır. Ancak karmaşık tiplerde ve kendi oluşturduğumuz tiplerde Explicit olarak tanımlanmaları gerekir. Bu sayede Java vb platformlara kendi tanımladığımız sınıfı o platformların anlayacağı şekilde sunmuş oluyoruz.

 Fault Contract : Servis tarafından hangi hataların fırlatılabileceğini ve bu servisi kullanan client a bu hataların nasıl aktarılacağını tanımlayan sözleşmedir.

Message Contract : Servislerin mesajları ile iletişimini sağlayan sözleşmedir.

Bindings :Bindings temek olarak servisleri ile nasıl iletişim kurulacağını tanımlamak için kullanılırlar. Bir bindings tip  transport type , protocok ve data encoding bilgilerini bildirir. Bu bilgiler aslında servis yönelimli mimari modelde kullanılabilecek olan senaryolar düşünülerek oluşturulurlar bu yüzdende WCF bu önceden bilinen senaryoları kullanabilmek için gerekli bağlayıcı tipleri önceden bildirmiştir bunlar :

 

Binding Tipi KonfigurasyonElementi Taşıma Çeşidi(Transport Type) Veri Çözümlemesi(Data Encoding) PlatformDesteği

(Interoperability)

BasicHttpBinding <basicHttpBinding> HTTP / HTTPS Text Var
NetTcpBinding <netTcpBinding> TCP Binary Yok
NetPeerTcpBinding <netPeerTcpBinding> P2P Binary Yok
NetNamedPipeBinding <netNamedPipeBinding> IPC Binary Yok
WSHttpBinding <wsHttpBinding> HTTP/HTTPS Text/MTOM Var
WSFederationBinding <wsFederationHttpBinding> HTTP/HTTPS Text/MTOM Var
NetMsmqBinding <netMsmqBinding> MSMQ Binary Yok
MsmqIntegrationBinding <msmqIntegrationBinding> MSMQ Binary Var
WSDualHttpBinding <wsDualHttpBinding> HTTP Text/MTOM Var

Buradaki tiplerden hangisini seçeceğimiz, geliştireceğimiz SOA (Service Oriented Architecture) modelindeki ihtiyaçlarımız doğrultusunda belirlenebilirler.

Şimdi isterseniz bir WCF Service projesi açarak inceleyelim.

WCF Service projesi açtığımızda bizi karşılayan önemli 3 dosya vardır bunlar IService.cs ,Service.cs ,web.config dosyalarıdır bu dosyalarda neler var bir bakalım.

IService.cs

Bu interface servis içersinde kullanılacak olan metotları property leri ve bunların contractlarının belirtildiği dosyadır 😉

using System;using System.Collections.Generic;

using System.Linq;

using System.Runtime.Serialization;

using System.ServiceModel;

using System.ServiceModel.Web;

using System.Text;

namespace WcfService1

{

// NOTE: You can use the “Rename” command on the “Refactor” menu to change the interface name “IService1” in both code and config file together.

[ServiceContract]

public interface IService1

{

[OperationContract]

string GetData(int value);

[OperationContract]

CompositeType GetDataUsingDataContract(CompositeType composite);

// TODO: Add your service operations here

}

// Use a data contract as illustrated in the sample below to add composite types to service operations.

[DataContract]

public class CompositeType

{

bool boolValue = true;

string stringValue = “Hello “;

[DataMember]

public bool BoolValue

{

get { return boolValue; }

set { boolValue = value; }

}

[DataMember]

public string StringValue

{

get { return stringValue; }

set { stringValue = value; }

}

}

}

 

 

Service.cs

Service.cs ise işlemlerimizin IService.cs dosyasındaki gibi tanımlanmış olan metotlar içersine yazacağımız dosyamızdır.

using System;using System.Collections.Generic;

using System.Linq;

using System.Runtime.Serialization;

using System.ServiceModel;

using System.ServiceModel.Web;

using System.Text;

namespace WcfService1

{

// NOTE: You can use the “Rename” command on the “Refactor” menu to change the class name “Service1” in code, svc and config file together.

// NOTE: In order to launch WCF Test Client for testing this service, please select Service1.svc or Service1.svc.cs at the Solution Explorer and start debugging.

public class Service1 : IService1

{

public string GetData(int value)

{

return string.Format(“You entered: {0}”, value);

}

public CompositeType GetDataUsingDataContract(CompositeType composite)

{

if (composite == null)

{

throw new ArgumentNullException(“composite”);

}

if (composite.BoolValue)

{

composite.StringValue += “Suffix”;

}

return composite;

}

}

}

 

Web.config

<?xml version=”1.0″?><configuration>

<system.web>

<compilation debug=”true” targetFramework=”4.0″ />

</system.web>

<system.serviceModel>

<behaviors>

<serviceBehaviors>

<behavior>

<!– To avoid disclosing metadata information, set the value below to false before deployment –>

<serviceMetadata httpGetEnabled=”true”/>

<!– To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information –>

<serviceDebug includeExceptionDetailInFaults=”false”/>

</behavior>

</serviceBehaviors>

</behaviors>

<serviceHostingEnvironment multipleSiteBindingsEnabled=”true” />

</system.serviceModel>

<system.webServer>

<modules runAllManagedModulesForAllRequests=”true”/>

<!–

To browse web app root directory during debugging, set the value below to true.

Set to false before deployment to avoid disclosing web app folder information.

–>

<directoryBrowse enabled=”true”/>

</system.webServer>

</configuration>

 

Umarım yararlı olur.

Bilgiyle Kalın

M.Zeki Osmancık

 

E-Book Gallery for Microsoft Technologies 100 100 mezo

E-Book Gallery for Microsoft Technologies

If you want to learn about Microsoft technologies you can use  E-Book Gallery for Microsoft Technologies 🙂

Click Here…

I hope that is helpful

May the knowledge be with you

M.Zeki Osmancık

Windows 8 Store App _ Youtube Video on Media Element 935 593 mezo

Windows 8 Store App _ Youtube Video on Media Element

Hi everyone

I want to show you to how to play a youtube video on Windows 8 Store App Media Element control. We have to use 3th part references called “MyToolKit”. MyToolKit is have a class named Youtube. That class help us to geting video and play on our control.  You can take a look in here http://mytoolkit.codeplex.com/ .

In this site they said that if you want to use this class the NuGet Package is recomended.

Ok lets start and play any video on Windows 8 Store App

First of all we have to install MyToolKit on our project. Open NuGet Package Manager from Tools->Library Package Manager -> Manage Nuget Packages for Solution

Select Online and searh MyToolKit

Thats our package we find it. We have to click on Install button and select assembly which one will use this.

MyToolKit references will add on our project after select an assembly and click OK button.  That was the diffucult side. Lets check out the simple side of our project.

I added a MediaElement control on my StoreApp xaml page and give a name property…

<Pagex:Class=”youtube.MainPage”xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”

xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”

xmlns:local=”using:youtube”

xmlns:d=”http://schemas.microsoft.com/expression/blend/2008″

xmlns:mc=”http://schemas.openxmlformats.org/markup-compatibility/2006″

mc:Ignorable=”d”>

<Grid Background=”{StaticResource ApplicationPageBackgroundThemeBrush}”>

<MediaElement Name=”mediaYoutube” HorizontalAlignment=”Left” Height=”522″

Margin=”152,201,0,0″ VerticalAlignment=”Top” Width=”1111″/>

<Button Name=”btnPlay” Content=”Play” HorizontalAlignment=”Left” Margin=”904,71,0,0″

VerticalAlignment=”Top”/>

<TextBox Name=”txtYoutubeID” HorizontalAlignment=”Left” Margin=”529,77,0,0″

TextWrapping=”Wrap” Text=”TextBox” VerticalAlignment=”Top” Width=”370″/>

</Grid>

</Page>

 

 

Last thing we have to do write a little code on btnPlay_Click event

private async void btnPlay_Click(object sender, RoutedEventArgs e){var url = await YouTube.GetVideoUriAsync(txtYoutubeID.Text, YouTubeQuality.Quality480P);

mediaYoutube.Source = url.Uri;

}

 

Thats it. Now we have to select a youtube video and get the video id then play on our project then watch the video.

if youtube link is http://www.youtube.com/watch?v=hNpQpjyc9C8 . this videos ID is going to be “hNpQpjyc9C8” . If we write it to our textbox we can watch this video on our Windows Store App.

Like this.

You can download the source code in here http://sdrv.ms/YfrMdG

I hope that is helpful

May the knowledge be with you

M.Zeki Osmancık

Linq To SQL _ Insert Update Delete 570 571 mezo

Linq To SQL _ Insert Update Delete

Merhaba arkadaşlar

Bir önce ki makalede sizlere LinqToSql ile nasıl Select sorguları çalıştırabileceğiniz ile ilgili bazı bilgiler vermiştim. Bu sefer ise Insert Update ve Delete işlemleri ile ilgili bazı bilgiler vermek istiyorum. Projemiz içersine dbml dosyasını eklediğimizi varsayarak devam etmek istiyorum. Daha önceki örnekteki form tasarımına ek olarak sadece 3 Button 2 Textbox ve Label nesnelerini ekleyip bu tasarım üzerinden devam edeceğim.

Insert

Insert işlemini gerçekleştirebilmek için Kaydet butonumuzun Click olayı içersine sadece şu kodları yazmamız yeterli olacaktır.

NorthwindDataContext db = new NorthwindDataContext();
Category eklenecek = new Category();
eklenecek.CategoryName = TextBox1.Text;
eklenecek.Description = TextBox2.Text;
db.Categories.InsertOnSubmit(eklenecek);
db.SubmitChanges();
Doldur();

Bu işlemde bir dataContext örneği oluşturduktan sonra Northwind üzerine insert işlemi için gerekli olan alanları belirttiğimiz Category tipindeki nesneyi doldurup bu nesneyi tüm bilgileri ile birlikte kaydetmesini söylüyoruz.

Güncelleme ve silme işlemlerinden önce ufak bir noktaya değinmek sanırım yerinde olacaktır. SQL sorgularında yaptığımız gibi bizim burada mutlaka bir ID vermemiz gerekiyor yani güncellemek istediğimiz verinin kesin adresini yolunu belirtmeliyiz. Biliyorsunuz ki SQL kodları ile Update veya Delete komutları yazdığınızda “Where” ile ID sini belirtmezseniz tüm kayıtlar için güncelleme veya silme işlemini gerçekleştirir. Bu yüzden önce nasıl ID belirtiriz ona bakalım.  ID yazan yere 3 5 yazmayacağız tabi ki. DataGridView üzerinden bir veri seçip onu yerleştirdiğimiz Textbox ve Label lar üzerine yazdırdıktan sonra işlemlerimize devam edeceğiz.

Kayıt Seçme İşlemi

Bunun için DataGridView üzerine listelediğimiz kayıtlardan herhangi bir tanesine çift tıkladığımızda işin gerçekleşmesi için CellContentDoubleClick olayı işimizi görebilir ve içersine yazmamız gereken kodlar ise şunlar:

Bu adımdan sonra artık listelenen kayıtlar arasından birine çift tıkladığımızda tüm bilgileri text ve label nesnelerine yazılacak bizde güncelleme veya silme yaparken bu bilgilerden yararlanabiliriz.

NorthwindDataContext db = new NorthwindDataContext();
Category secilecek = db.Categories.FirstOrDefault(x => x.CategoryID == 
Convert.ToInt32(dataGridView1.CurrentRow.Cells[0].Value.ToString()));
lblID.Text = secilecek.CategoryID;
txtName.Text = secilecek.CategoryName;
txtDesc.Text = secilecek.Description;

Update

Güncelle butonumuzun Click olayına ise şu kodları eklememiz yeterli :

NorthwindDataContext db = new NorthwindDataContext();
Category guncellenen = db.Categories.FirstOrDefault(x=>x.CategoryID ==Convert.ToInt32(lblID.Text));
guncellenen.CategoryName = txtName.Text;
guncellenen.Description = txtDesc.Text;
db.SubmitChanges();
Doldur();

Burada daha önce seçip bir label üzerine yazdırdığımız ID yi kullanarak TextBox lar üzerindeki güncel verileri alıp update işlemini gerçekleştiriyoruz.

Aynı şekilde delete işlemi içinde yazmamız gereken kodlar çok basit şöyle ki :

NorthwindDataContext db = new NorthwindDataContext();
Category silinen = db.Categories.FirstOrDefault(x => x.CategoryID == int.Parse(lblID.Text));
db.Categories.DeleteOnSubmit(silinen);
db.SubmitChanges();
Doldur();

Birde burada her işlemden sonra kullandığımız datagridview içersine bilgileri dolduran Doldur metodu var onuda sizlerle paylaşayım.

db = new NorthwindDataContext();
var sonuc = from x in db.Categories
select new
{
x.CategoryID,
x.CategoryName,
x.Description
};
dataGridView1.DataSource = sonuc;

Bu kodları butonlarımızın Click olaylarına yazdıktan sonra herhangi bir hataya karşı önlem almadığımız için işlem sıramız şöyle olmalı öncelikle form açılacak ve kayıtlarımız sıralanacak , ardından bir kayıt eklemek için textboxlar doldurularak Kaydet butonuna basılacak ve Doldur metodu ile kayıtlar yeniden datagridview üzerinde görüntülenecek ardından bir kayda çift tıklayarak bilgilerini text ve label üzerine yazdıracağız ve Güncelle butonu ile güncelleme ve Sil butonu ile seçilen kaydın silinme işlemlerini gerçekleştireceğiz.

Umarım yararlı olur

Bilgiyle Kalın

M.Zeki Osmancık

 

LinqToSQL _ Select 992 608 mezo

LinqToSQL _ Select

Merhaba arkadaşlar bu yazımızda sizlere LinqToSQL nesnesini en basit şekilde nasıl kullanırız bunu göstermek istiyorum. Öncelikle LinqToSQL nesnesini kullanabilmek için ilk yapmamız gereken şey projemiz içersine bu nesneyi eklemektir.

Bu nesneyi eklediğimizde ve Server Explorer üzerinde ekliyeceğimiz bir veritabanı varsa buradan tabloları sürükleyip bıraktığımızda kendisi otomatik olarak bu tablolar ile alakalı bazı class ları oluşturur bize sadece kullanmak kalır 😉

Bu işlemi tamamladıktan sonra geldi sıra kod yazma işlemine acaba bu LinqToSQL den nasıl veri çekip form üzerindeki nesnelerde gösterebiliriz.

Select sorgusu nasıl yapılır ?

Select işlemini farklı şekillerde yapabilirsiniz bunun bir kaç farklı yolu mevcut. Hepsinde aynı sonucu alırız yani “SELECT * FROM CATEGORIES ” sorgusunun sonucunu alırız 😉

NorthwindDataContext db = new NorthwindDataContext();var sonuc = from x in db.Categoriesselect x;dataGridView1.DataSource = sonuc;

 

NorthwindDataContext db = new NorthwindDataContext();var sonuc = from x in db.GetTable<Category>()select x;dataGridView1.DataSource = sonuc;

 

NorthwindDataContext db = new NorthwindDataContext();dataGridView1.DataSource =  db.GetTable<Category>();

Select sorgusuna Where kriteri ekleme işlemi ?

Select sorgusune Where kriterini eklemek için yani “SELECT * FROM CATEGORIES WHERE CATEGORYID = 1” sorgusunun LinqToSQL de yazılması işlemide şu şekillerde olabilir.

NorthwindDataContext db = new NorthwindDataContext();var sonuc = from x in db.Categorieswhere x.CategoryID ==1select x;dataGridView1.DataSource = sonuc;

 

NorthwindDataContext db = new NorthwindDataContext();var sonuc = from x in db.GetTable<Category>()where x.CategoryName.StartsWith(“B”)select x;dataGridView1.DataSource = sonuc;

Gelen sorguyu listeleme işlemi yani Order By anahtar kelimesinin yaptığı işi nasıl yapacağız şimdi kısa bir kodla bunu görelim 😉

       NorthwindDataContext db = new NorthwindDataContext();var sonuc = from x in db.GetTable<Category>()where x.CategoryName.StartsWith(“B”)orderby x.CategoryID ascendingselect x;dataGridView1.DataSource = sonuc;

 

       NorthwindDataContext db = new NorthwindDataContext();var sonuc = from x in db.Categorieswhere x.CategoryName.StartsWith(“B”)orderby x.CategoryID descendingselect x;dataGridView1.DataSource = sonuc;

 

Bu kodlar sadece select için kullanabileceğimiz basit kodlar. Bir sonraki yazıda Inner Join, Left, Right Join gibi yapıların nasıl kullanılabileceğine bakacağız.

Umarım Yararlı Olur

Bilgiyle Kalın.

M.Zeki Osmancık

Windows 8 Metro App _ ListView 955 577 mezo

Windows 8 Metro App _ ListView

Merhaba arkadaşlar

Metro uygulamalardaki data nesnelerinden biri olan ListView nesnesini kısa ve basitçe tanıtmak istiyorum. ListView basit bir listbox gibi çalışır. İçersine List veya DataTable tipinde nesneler verebilmek mümkün. Çok çok basit bir örnek ile bu nesnenin nasıl çalıştığına dair bir örnek yaparak bakalım… Öncelikle formumunuzun üzerine bir ListView nesnesi atarak özelliklerini belirliyoruz. Formun üzerindeki görünümü.


 XAML kodunda ListView görünümü.

 Formumuz üzerine bir listview ekledikten sonra içersindeki elemanların nasıl görüneceği ile alakalı bir  işlem yapabiliriz dümdüz bırakıp içersinde default olarak bir nesne görüntülenmesini sağlayabiliriz. Şimdi çok basit olarak string tipinde bir liste doldurup listview in ItemSource özeliği ile bu listview i nasıl doldurabileceğimizi görelim.

Öncelikle bir liste dolduralım.

List<string> liste = new List<string>();liste.Add(“Deneme 1 “);liste.Add(“Deneme 2 “);liste.Add(“Deneme 3 “);liste.Add(“Deneme 4 “);

Ardından sadece tek bir satır kod ile yanı ListView in ItemsSource özelliğine atama yaparak nasıl bir görüntü elde ediyoruz görelim .

lstListe.ItemsSource = liste;

Bu atamayı yaptıktan sonra sıra geldi projeyi çalıştırmaya bakalım nasıl bir görüntü elde ediyoruz.


En basit manada ListView nesnesinin kullanımı  bu şekilde oluyor.

Umarım yararlı olur….

Bilgiyle Kalın… 😉

M.Zeki Osmancık

Merhaba Windows 8 Metro Style Apps 1024 652 mezo

Merhaba Windows 8 Metro Style Apps

Merhaba arkadaşlar

Bu yazımda sizlere beklenen işletim sistemi Windows 8 ile birlikte gelen ve kullanması çok keyifli olan Metro Application ile alakalı bir başlangıç yazısı sunacağım.

Bilindiği gibi  Windows  8 daha çok tablet pc ler için ideal bir işletim sistemi olarak  tasarlandığından  dokunmatik ekrana uygun olan ve tam ekranı kaplaya uygulamalar yani Metro Style uygulamalar geliştirilmeye başlandı.

.Net 4.5 ile birlikte gelen Metro Style uygulamalar gerçektende kullanımı kolay görseli başarılı uygulamalar olduğundan ileride Windows tabletlerde ve mobil cihazlarda yaygınlaştığında kullanım kolaylığı nedeniyle tercihleri kendi üzerine çekebilir.

Metro Style Uygulamalar tam ekran çalışan , çalışılan cihaza ve dokunmatik ihtiyaçlarına göre ayarlanabilen uygulamalar olarak tanımlanabilir.

Metro Style Uygulamalar sadece anlattıklarımız kadarmı peki derseniz cevabımız hayır olacaktır,çünkü metro style uygulamalar arka tarafta suspend modunda çalışırlar ve böylelikle pil ve performansı etkilememiş olurlar aynı zamanda 3 şekilde çalışabilme imkanlarıda mevcut Full Screen ,Snap Up ve Filled ‘ dır…

Şimdi sizlere Visual Studio 2012 de .Net Framework ile birlikte Metro Style bir uygulamaya nasıl merhaba deriz bir bakalım.

Öncelikle proje açarken karşımıza Windows Metro Style  adında bir proje grubu geliyor ve bu grup içersinde Metro Style bir uygulama geliştirebilmek için gerekli olan nesneler mevcut.

Dilerseniz boş bir sayfa dilerseniz hazır referans olarak kullanılabilecek küçük hazır projelerde eklenmiş açıp kullanmaya başlayabileceğimiz projeler içersine .

Blank App projesi açıldığında karşımıza gelecek olan boş siyah zeminli bir sayfa ve alt kısımda XAML kodları olacaktır. Bu sayfa tıpkı Windows Forms uygulamalarındaki Form gibi tek farklı XAML kodları ile dizayn edilmesi.

Yeni bir proje açtım ve üzerine Windows Forms uygulamalarında aşina olduğumuz Label kontrolünün XAML versiyonu olan TextBlock kontrolünü sayfanın ortasına bıraktım. Properties penceresinden text ve font özelliklerini ayarlayarak ilk uygulamamın nasıl görüneceği ile ilgili bir fikir sahibi olabileceğim artık. Eğer Windows 8 kullanmaya başlamışsanız bu projeyi kendi makinanız üzerinde rahatça çalıştırabilirsiniz. “Ya Windows 7 kullanıyorsak?” diye sormayın denemedim 😀 Ondada muhtemelen simulatoru kullanıyorsunuz…

Uygulamayı çalıştıracak olan Run butonuna geldiğimizde burada Local Machine, Simulator adında seçenekler var bunlardan biri tıpkı Windows Phone 7 uygulamalarında olduğu gibi bir tablet simulator u açar ve uygulamalarımızı orada çalıştırır. Bu simulator aşağıdaki resim gibi bir şey 🙂

Ardından simulator çalıştığına göre benim uygulamamıda gösterecektir birde ona bakalım nasıl bir şey olmuş benim sayfanın göbeğine yerleştirdiğim TextBlock.

Windows 8 Metro App uygulamasına ilk adımı atmış bulunuyoruz hayırlı olsun.

Bu konuyla alakalı daha pek çok makale çok yakında….

Bilgiyle Kalın…

M.Zeki Osmancık

 

 

Sınırsız Ağaç Yapısı ve Treeview Kullanımı 563 595 mezo

Sınırsız Ağaç Yapısı ve Treeview Kullanımı

Merhaba arkadaşlar

Bu yazımda çokça bahsedilen çokça kullanılacak olan bir kontrol yapısı ve bunun database den gelen verilerle nasıl çalıştığını göstermek isterim sizlere…

Bahsettiğimiz kontrolümüz Treeview denilen bir nesne bu nesne bizlere ağaç yapısı bulunan bilgileri rahatlıkla ve tek ekranda görmemizde bizlere kolaylık sağlayan bir kontrol peki ama nasıl bu kontrole birşeyler ekler kullanılabilir hale getirebiliriz…

Öncelikle bir DB ye ve tabloya ihtiyacım var sırası gelmişken birde SQL tablosunda sınırsız ağaç yapısından bahsetmeden olmaz heralde.  Şekildeki gibi bir veritabanı oluşturdum…

 

Buradaki mantık aslında basit eğer bir kayıt root kayıtsa yani kök kayıtsa o zaman AltKategoriID si NULL olmalıdır. Eğer girdiğimiz kategori başka bir kategori altında duruyorsa o halde hangi kategori üst ise AltKategoriID sine o kaydın ID değerini girmeliyiz. Zaten resimdeki birbirine bağlı yapıda bunu temsil eder. Birde girdiğimiz verileri inceleyin bakalım nasıl birşey varmış 😀

Burada Elektronik root yani ana kategori Bilgisayar onun altında bulunduğu için Bilgisayar kaydının AltKategoriID si Elektronik kaydının ID sine eşit Bilgisayarın altında olanlarda Bilgisayar kaydının ID sine sahip olacaktır böylelikle alt alta uzayıp giden sınırsız bir ağaç yapısına sahip olabiliriz.

Peki tablomuz tamam verilerimizide girdik e hani Treeview  derseniz onuda şöyle özetleyelim

Yeni bir Windows formuma Treeview ve button nesnemi yerleştirdim

Ardından button nesnesinin Click olayına gelerek dedim ki  :

DataRelation baglanti;private void btnListele_Click(object sender, EventArgs e){SqlConnection cnn = new SqlConnection(“Data Source = .; Initial Catalog = Deneme; User = sa; Password = 1234567?;”);SqlDataAdapter adp = new SqlDataAdapter(“Select * From Kategoriler”,cnn);DataSet ds = new DataSet();

adp.Fill(ds,”Kategoriler”);

 

baglanti = new DataRelation(“baglan”,ds.Tables[“Kategoriler”].Columns[“KategoriID”],

ds.Tables[“Kategoriler”].Columns[“AltKategoriID”]);

 

ds.Relations.Add(baglanti);

 

foreach (DataRow dr in ds.Tables[“Kategoriler”].Rows)

{

if (dr[“AltKategoriID”] == DBNull.Value)

{

TreeNode root = new TreeNode(dr[“KategoriAdi”].ToString());

root.Tag = dr[“KategoriID”];

tvAgac.Nodes.Add(root);

AltKategorileriGetir(dr,root);

}

}

tvAgac.ExpandAll();

}

 


Kodlara bakacak olursak klasik bir ADO.net ile verilerimi alıp bir DATASET e eklemişim biliyorsunuzki DATASET nesnesi içine birden

fazla DATATABLE nesnesi barındırabilen bir nesne yani sanal veritabanı gibide düşünebiliriz aslında. Peki database de bağlantılar olurda bunda olmazmı ? Olmamı tabikide olur bu bağlantıyıda DATARELATION nesnesi sağlar işte tam burada bende verilerimi çektikten sonra içindeki hangi veri ile hangi verinin eşleşeceği yani hangisinin ana ID hangisinin ona bağlı olan Altkategori olduğunu belirtip bağlantımı tamamladım. Ardından bir foreach ile Dataset içersine attığım Datatable içindeki satırları tek tek almaya başladım ve bu foreach içersinde sadece AltKategorisi NULL olanları aldım yani Root olan kök olan kayıtları aldım ve Treeview nesneme ekledim.

Peki bunun altında bişi yokmu ? Altındakini hatta onun altındaki kayıtları nasıl alacağız derseniz ondada bir metotun yardımını isteyip o metodu kendi içersinde çağırarak işimizi çözeceğiz…

 

private void AltKategorileriGetir(DataRow dr,TreeNode pNode){foreach(DataRow row in dr.GetChildRows(baglanti)){TreeNode childNode = new TreeNode(row[“KategoriAdi”].ToString());childNode.Tag = row[“KategoriID”];pNode.Nodes.Add(childNode);

AltKategorileriGetir(row,childNode);

}

}

 

Bu metodu çalıştırırkende biraz once kontrol ettiğimiz root kaydı ve oluşturulan TreeNode nesnesini parametre olarak yolladıktan sonra oluşturduğumuz bağlantı nesnesi ile Altkategorideki değerleri kontrol ediyoruz ve varsa yine TreeNode oluşturup mevcut Node altına ekliyoruz. Vee sonra kategori ve altındaki elemanları tek tek karşıma geliyor

Umarım yararlı olur

Görüşmek Üzere

M.Zeki Osmancık

 

GDI 2 _ Grafik Çizimi 426 487 mezo

GDI 2 _ Grafik Çizimi

Merhaba arkadaşlar

GDI ile ilgili önceki yazımızda neyin nasıl kullanılacağını görmüştük bu sefer bu GDI metotlarını kullanarak nasıl hesaplamalar yaparız. Seçim sonuçlarında hep görürüz bir pasta dilimi üzerinde partilerin oyları görünür ve yüzde olarak pasta grafikde bir dilim kaplarlar . Bakalım bizim partilerden hangisi ne kadar oyla pastanın neresinde duracak ???

Öncelikle WindowsForm uygulamamız üzerine 2 TextBox 1 Button ve 1 PictureBox atıyoruz.

Bu görüntüyü elde ettikten sonra yapmamız gerek pek de birşey kalmadı aslında sadece kod bloğunu açıp yazmak kalıyor 😀

string[] partiler = new string[10];int[] oylar = new int[10];int siraNo, toplamOy;

Öncelikle yukardaki gibi değerlerimi tutacağım dizilerimi  ve hesaplama yapabilmek içinse değişkenlerimi GLOBAL olarak tanımladım.

Daha sonra buton içersinde değerlerimi alıp bunları grafiksel olarak picturebox içersine çizdireceğim.

Öncelikle 10 elemanlı bir dizi oluşturduğum için dizinin boyutundan çok eleman girilmesin diye bir kontrol yapıyorum. Ardından oylar içersine değer eklerken int değerlerin girildiğinden emin oluyorum…

            if (siraNo == 10){MessageBox.Show(“10 partiden fazla olamaz???”);return;}try

{

oylar[siraNo] = int.Parse(textBox2.Text);

}

catch (Exception)

{

MessageBox.Show(“Oylarda Hata Var”);

return;

}

 

Hem partiler hemde oylar aynı indeks numaralarına yazdırılacak .

            partiler[siraNo] = textBox1.Text;toplamOy += oylar[siraNo];siraNo++;Graphics grp = this.pictureBox1.CreateGraphics();grp.Clear(pictureBox1.BackColor);

Random rnd = new Random();

int i, basAci=0,yayAci ,boy=0;

Color renk;

HatchBrush firca;

Toplam oy sayısını hesaplıyoruz.  Ardından nesnelerimizi tanımlıyoruz.  Picturebox üzerine çizim yapabilmek için Graphics nesnesi oluşturuyoruz. Picturebox da ne varsa siliyoruz. Color değişkeni ve desenli çizim için HatchBrush nesnesi oluşturuyoruz.

Index numarasına göre tüm dizi içersindeki elemanları alıp grafiksel olarak çizebilmek için bir for döngüsü oluşturuyoruz.

            for (i = 0; i <= siraNo-1; i++){yayAci = 360 * oylar[i] / toplamOy;renk = Color.FromArgb(rnd.Next(255), rnd.Next(255), rnd.Next(255));firca = new HatchBrush((HatchStyle)rnd.Next(50), renk);grp.FillPie(firca,0,80,200,200,basAci,yayAci);

 

grp.DrawString(“% ” + boy.ToString(), new Font(“Tahoma”, 8, FontStyle.Bold), Brushes.Black, 5, 80 + i * 20);

grp.FillRectangle(firca, 260, 80 + i * 20, 18, 18);

 

grp.DrawString(partiler[i] + ” = ” + oylar[i].ToString(), new Font(“Tahoma”, 8, FontStyle.Bold), Brushes.Black, 290, 80 + i * 20);

basAci += yayAci;

}

 

Çizdireceğimiz FillPie nesnesinin kaç derecelik bir açı ile çizileceğini hesaplamak için yay _aci değişkenini kullanacağız.  Random renk elde edebilmek için Color.FromArgb metodunu kullanarak rastgele renk değerlerini veriyoruz. HatchBrush üzerindede random olarak desen gelebilmesi için gerekli tanımlamayı yapıyoruz. Ardından küçük bir kare rengin hangi partiye ait olduğunu göstermek için hemen yanınada partinin adı ve oy sayısı  yazdırdıktan sonra en son tanımladığım başlangıç açısı bas_Aci değişkenini çizdiğim şeklin yay_Aci değeri kadar arttırıp yeni çizilecek olan pie için başlangıç konumunu belirliyoruz.

Ve son olarak karşımıza çıkan görüntü :

Böylelikle Graphics nesnesindeki değerlerin nasıl işimize yarayacağı biraz daha kafamızda oturmuş olur umarım…

Görüşmek Üzere.

M.Zeki OSMANCIK

GDI 401 376 mezo

GDI

Merhaba arkadaşlar

GDI  = Graphical Design Interface  ile ilgili ufak bir bilgi vermek istiyorum sizlere. GDI, Windows uygulamaları üzerinde çizim işlemleri gerçekleştirmemize olanak tanıyan sınıflardır.

Bu sınıflar ile Windows formlar üzerine veya print nesneleri ile kağıt üzerine bazı çizimler yapabilmemiz mümkün.

Öncelikle bir çizim yapabilmek için de ilk gereken bir kağıt yada çizim yapılacak alandır öncelikle bunu belirtmemiz gerekiyor

Form üzerine çizim yapabilmek için:Graphics grp = this.CreateGraphics();

 

PictureBox üzerine çizim yapabilmek için:

Graphics grp = pictureBox1.CreateGraphics();

 

Çizim alanımızı oluşturduktan sonra ile form veya picturebox üzerine ne çizdireceğimizi seçmemiz gerekiyor ama bunu seçmeden öncede çizmek için gerekli olan kalem veya içi dolu bir şekil çizeceksek fırça gerekiyor. Bunu da şu şekilde tanımlayabiliriz;

Pen kalem = new Pen(Color.Blue);kalem.Width = 5;

 

Brush firca = new SolidBrush(Color.Red) ;

 

Bu şekilde tanımladığımızda kalem ve fircanin özelliklerini değiştirebilir durumda oluyoruz. Kalemin kalınlığı vs gibi özelliklerini ayarlayabiliyoruz. Ya bunlara ihtiyacımız yoksa bunlarla uğraşmadan nasıl yaparız derseniz onun çözümüde şu şekilde…

Pens.Blue 

Brushes.Red

 

Hemen belirteyim bu şekilde kullanım tek başına mümkün olmuyor ancak gerekli kodlar içersinde bu şekilde kullanabilirsiniz biraz aşağıda bunun örneklerini göreceksiniz zaten 😉

Çizim alanı tamam kalem tamam firça tamam eee ne kaldı geriye ??? Sadece çizmek kaldı 😉

Çizim yapabilmek içinde ilk başta örneğini (instance) aldığımız Graphics nesnesini kullanacağız. Ve içersindeki çizim metotları ile form üzerine şekiller çizeceğiz….

grp.DrawLine(Pen nesnesi, X1, Y1, X2, Y2);grp.DrawLine(kalem, 50, 50, 150, 50);

Formun üzerine Line çizerken verilen koordinatlar 2 tane x ve y noktalarıdır bu iki noktayı belirtiriz ve DrawLine metodu bizim yerimize bu iki noktayı birleştirir ve şekildeki gibi bir görüntü ortaya çıkar.

Birde Dikdörtgen Yuvarlak bişiler çizelim.

grp.DrawEllipse(Pen nesnesi, X, Y, Genişlik, Yükseklik);grp.DrawEllipse(kalem, 100, 100, 100, 100);

 

grp.DrawRectangle(Pen nesnesi, X, Y, Genişlik, Yükseklik);

grp.DrawRectangle(Pens.Blue, 200, 100, 100, 100);

 

Bu şekilleri çizerkende gerekli olan veriler önce bir kalem sonra X ve Y noktası ardından çizilecek olan şeklin yükseklik ve genişlik bilgileridir.

Son olarak Pie yani kekden bahsetmek istiyorum 😀 evet sizi keklemiyorum pasta grafik olarak adlandırdımız şekli nasıl çizeriz ona bakalım…

grp.DrawPie(Pen nesnesi, X, Y, Genişlik,Yükseklik , Başlangıç Açısı, Yay Açısı); 

grp.DrawPie(kalem, 50, 200, 100, 100, 0, 270);

Şimdi birde bunların içi dolu olanları nasıl yazılıyor aralarında ne fark var görelim 😉

grp.FillEllipse(firca, 100, 100, 100, 100);grp.FillRectangle(firca, 200, 100, 100, 100);

grp.FillPie(Brushes.Purple, 50, 200, 100, 100, 0, 270);

 

 

 

GDI nesnesi sadece bu işemi yarar diyebilirsiniz 😀 Bu sadece başlangıç bir sonraki yazıda GDI nin asıl nasıl kullanılabildiğini göreceğiz 😉

Görüşmek Üzere…

 

 

XML ile Telefon Defteri Yapalım 3!! 618 381 mezo

XML ile Telefon Defteri Yapalım 3!!

Projemize kaldığımız yerden devam ediyoruz 😀
Kaydet işleminden farklı olarak mevcut olan kaydı düzenlemek için düzenleme butonumuzun Click olayına ilgili kodları yazıyoruz.

protected void Button2_Click(object sender, EventArgs e){

xmlDoc = new XmlDocument();

xmlDoc.Load(dosya);

XmlNode secilen = xmlDoc.SelectSingleNode(“Kisiler/Kisi[Ad='” + ListBox1.Text + “‘]”);

secilen[“Ad”].InnerText = TextBox1.Text;

secilen[“Soyad”].InnerText = TextBox2.Text;

secilen[“Telefon”].InnerText = TextBox3.Text;

xmlDoc.Save(dosya);

TextBox1.Text = “”;

TextBox2.Text = “”;

TextBox3.Text = “”;

TelefonlariYukle();

}

Farklı bir işlem yapmadık aslında. XmlNode iledüğümü belirledik ve InnerText ile o düğüm içersinde var olan veriyi almış olduk. Yeni değerleride yine InnerText ile yerine yazmış olduk. Bütün işlemleri element içersindeki düğümlerdeki bilgiler ile yaptık yeni kayıt için yeni düğümler ekledik mevcut düğümler ekledik. Silme işlemi içinde tabiki düğüm silmemiz gerekecek bunun içinde Sil butonuna…

protected void Button3_Click(object sender, EventArgs e){

xmlDoc = new XmlDocument();

xmlDoc.Load(dosya);

XmlNode secilen = xmlDoc.SelectSingleNode(“Kisiler/Kisi[Ad='” + ListBox1.Text + “‘]”);

xmlDoc.DocumentElement.RemoveChild(secilen);

xmlDoc.Save(dosya);

TextBox1.Text = “”;

TextBox2.Text = “”;

TextBox3.Text = “”;

TelefonlariYukle();

}

RemoveChild ile ChildNode dediğimiz seçilen düğümü silme işlemini gerçekleştirebiliyoruz.

Peki 3 temel işlemimiz bitti birde bu Xml sayfası içersinde arama yapmak istersek ?

Bunun içinde en alt kısma yerleştirdiğimiz Textbox ve Button ile bu işi çözebiliriz . Bu işlem içinde …

protected void Button4_Click(object sender, EventArgs e){

ListBox1.Items.Clear();

XPathDocument xp = new XPathDocument(dosya);

XPathNavigator xn = xp.CreateNavigator();

string sorgu = “Kisiler/Kisi[Ad='”+TextBox4.Text+”‘]/Ad”;

XPathNodeIterator ni = xn.Select(sorgu);

while (ni.MoveNext())

{

ListBox1.Items.Add(ni.Current.ToString());

}

}

İşte Xml i veritabanı olarak kullanarak yaptığımız çok basit bir telefon defteri 😉

Güle Güle kullanın 😀

Projeyi İndirebilmek için Tıklayın!!

Bilgiyle Kalın …

M.Zeki Osmancık

XML ile Telefon Defteri Yapalım 2!! 675 378 mezo

XML ile Telefon Defteri Yapalım 2!!

Bir önceki yazının devamı olarak bu yazımızdada projemizi geliştirmeye devam ediyoruz.

Listbox a kayıtlarımızı ekledikten sonra listbox üzerinde bir kaydı seçtiğimizde bilgilerin ilgili textbox lara yazılmasını istiyoruz bunun içinde Listbox kontrolünün SelectedIndexChanged olayına ilgili kodları yazıyoruz.

protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e){xmlDoc = new XmlDocument();

xmlDoc.Load(dosya);

XmlNode secilen = xmlDoc.SelectSingleNode(“Kisiler/Kisi[Ad='” + ListBox1.Text + “‘]”);

TextBox1.Text = secilen[“Ad”].InnerText;

TextBox2.Text = secilen[“Soyad”].InnerText;

TextBox3.Text = secilen[“Telefon”].InnerText;

}

Bu işlemden sonra projemizde bir adım daha atmış oluyoruz ve her kaydı seçtiğimizde o kayıtla ilgili tüm bilgiler ilgili textboxlara yazılıyor. Bu bize Update işleminde çok büyük kolaylık sağlayacak.

İlk olarak Kaydet butonunu işlevine kavuşturalım. Ve buton1 in Click olayına ilgili kodları yazalım.

protected void Button1_Click(object sender, EventArgs e){xmlDoc = new XmlDocument();

xmlDoc.Load(dosya);

XmlElement xe = xmlDoc.CreateElement(“Kisi”);

XmlNode ad = xmlDoc.CreateNode(XmlNodeType.Element,”Ad”,””);

XmlNode sAd = xmlDoc.CreateNode(XmlNodeType.Element, “Soyad”, “”);

XmlNode tel = xmlDoc.CreateNode(XmlNodeType.Element, “Telefon”, “”);

XmlAttribute xa = xmlDoc.CreateAttribute(“Tur”);

xa.Value = “Cep”;

tel.Attributes.Append(xa);

ad.InnerText = TextBox1.Text;

sAd.InnerText = TextBox2.Text;

tel.InnerText = TextBox3.Text;

xe.AppendChild(ad);

xe.AppendChild(sAd);

xe.AppendChild(tel);

xmlDoc.DocumentElement.AppendChild(xe);

xmlDoc.Save(dosya);

TextBox1.Text = “”;

TextBox2.Text = “”;

TextBox3.Text = “”;

TelefonlariYukle();

}

XmlElement: Xml dosyası içersinde bulunan bir elemanı temsil eder.

XmlNode: Eleman içersindeki her bir düğümü temsil eder.

XmlAttribute : Düğümlerin sahip olduğu özellikleri temsil eder.

Görüldüğü üzere Xml dosyamızı bir database gibi kullanarak kayıtları görüntüleyip yeni kayıtları Xml üzerine yazabiliyoruz.

Bilgiyle Kalın…

M.Zeki Osmancık

C# _ Diziler _ Foreach Döngüsü 595 199 mezo

C# _ Diziler _ Foreach Döngüsü


Merhaba arkadaşlar bu yazımızda da dizileri anlamaya çalışacağız.  Bu yazı sonunda dzi nedir , nasıl tanımlanır dizilerdeki boyut dizilerin metotları ve foreach döngüsü ile alakalı bilgi sahibi olacaksınız.

Daha önce değişkenler ile ilgili bir yazımız vardı. Hatırlarsak değişkenler program içersinde bize geçiçi süre gerekli olan değerleri tutabildiğimiz yapılardı örneğin int sayi = 5; diyerek 5 sayısını sayi değişkeninde tutabiliyordum. Peki bu sayi değişkeninde birden fazla değer tutmam gerekirse bunu gerçekleştirebilirmiyim ? Cevap değişkenlerle hayır ama Dizilerle evet.

Sizinde anlayacağınız gibi dizi değişkenleri, aynı tipte birçok veriyi bir arada tutmayı sağlar. Benzer işlemlerde kullanılan değişkenler bir dizi altında listelenebilir. Yani ben sayi değişkenimi dizi olarak tanımlarsam o zaman birden fazla değeri içersinde tutabilirim.

Dizilerin tanımını yaptıktan sonra gelin bu dizi nasıl birşeymiş nasıl yazılırmış ona bir göz atalım.  Dizi tanımları veritiplerinin yanında [] simgeleri ile yapılır.

<veri tipi> [] dizi ismi = new <veri tipi> [dizi eleman sayısı]
String[] isimler;İnt[] sayilar;

Float[] paralar;

Byte[] yaslar;

Dizilerin kaç eleman içereceği, dizi tanımlanırken ya da daha sonra belirtilebilir. Şu şekilde tanımlanabilirler:

int[] sayilar = {3, 8, 2, 6};

int[] sayilar = new int[6]{4, 2, 5, 6, 7, 0};

int[] sayilar = new int[5];

Dizilerin indis numaraları 0 dan başlar ve devam eder. Orneğin isimleri tutacağımız bir dizi tanımladık:

string[] isimler = new string[4];

değerlerini atarken yapacağımız işlem şu olacaktır.

İsimler[0]=”Zeki”;

İsimler[1]=” Yudum”;

İsimler[2]=”Ali”;

İsimler[3]=” Orhan”;

Küçük bir dizi uygulaması yapalım. Bir dizi ve elemanlarını tanımlayarak ListBox içersinde bu değeri gösterelim.

İşte bu kadar kolay bir değişken tanımlar gibi fakat içersinde birden fazla değer taşıyabilen bir değişken gibi düşünebiliriz.

Peki birden fazla boyuta sahip diziler tanımlamak mümkünmü ?  Yani tanımladığımız dizinin 1 elemanıda birkaç değere sahip olsa …

Diziler tek boyutlu olduğu gibi, birkaç boyutlu diziler de tanımlanabilir.  Örneğin :

int [,] matris = new int[5,6];

Bu diziyi tanımladığımızda önce 5 elemanlı bir dizi ardından bu dizinin her elemanı içinde 6 elemanlık bir dizi tanımlamış oluruz.  Yani 2 boyut oluşturmuş oluruz.

Bu dizide bir boyut daha olsaydı, o boyutun her elemanı için diğer boyutlardaki 30 eleman bulunacaktı. Çok boyutlu dizilerin eleman sayıları boyutlarındaki eleman sayılarını çarparak hesaplanabilir.

int [,,,,] dizi = new int[boyut1,boyut2,boyut3,… ,boyutn];

Dizilerin boyutlarınada göz attıktan sonra gelin isterseniz bir kaç metodunada bakalım.

Dizilerin Metotları

Array.Resize();

Resize metodu mevcut dizimizin eleman sayısını istediğimiz kadar arttırır. Bir örnekle bakalım bu olaya bir form üzerinde listbox textbox ve butonumuz olsun ve textbox a yazdığımız değer string bir diziye ve listbox a eklensin istiyorum. İlk etapta ne kadar değer girileceğini bilemiyeceğimizden önce 1 elemanlı bir dizi tanımlıyorum ve her eleman eklendiğinde dizi boyutunu arttırıyorum.

Array.Clear();

Dizimiz içersindeki değerleri temizlemek isteyebiliriz işte bu gibi durumlarda Array.Clear kullanıyoruz. Biraz önce yaptığımız proje üzerinde ufak değişikliklerle Clear metodunu inceleyelim.

Foreach Döngüsü

Daha önceki yazımızda bahsettiğimiz döngüler arasında bir tane daha vardı ama ona bu konunun sonunda değinmek daha mantıklı sanki.

Foreach döngümüz bir dizi veya kolaksiyonun her elemanı için yapısındaki kodları çalıştıran bir döngüdür.

foreach (<tip değişkeni > in <koleksiyon> ){

Yapılacak işlemler

}

Bilgiyle Kalın…
M.Zeki Osmancık

C# | OOP Terminolojisi 150 150 mezo

C# | OOP Terminolojisi



Access Modifier : Bir tipe veya tipin üyelerine erişimi sınırlayan private, protected, internal, public gibi kelimelerdir.

Accessible Member : Verilen tip tarafından ulaşılabilen üyedir. Bir tip ile erişilebilen bir üye başka bir üye tarafından erişilebilir olmayabilir.

Accessor : Bir özellik (Property) ile ilişkilendirilmiş Özel (private) veri alanı (data field) üyenin değerini alan veya ayarlayan metodlardır. Okunur-Yazılır özellikler get ve set erişimcilerine sahipken salt okunur özellikler sadece get erişimcisine sahiptirler.

Anonymous Method : Bir delegeye parametre olarak geçilirilen bir kod bloğudur.

Base Class : Türetilmiş sınıf (Derived Class) tarafından miras alınan sınıftır (Inherited Class).

Call Stack : Çalıştırma zamanında (runtime) programın başından başlayarak çalıştırılacak ifadeye kadar olan yapılan metod çağrılarının dizisidir.

Class : Nesneyi tanımlayan, nesneye şablon oluşturan veri tipidir. Sınıflar veri ve veriyi etkileyen metodlardan her ikisini de içerebilirler.

Constructor: Bir sınıf veya yapı üzerinde bulunan ve o tipteki nesneleri oluşturan özel metodlardır.

Delegate : Bir metodu referans eden bir tiptir. Bir delege metoda atandığında tam olarak o metod gibi davranır.

Derived Class : Başka bir taban sınıfın davranışına ve verisine erişmek, geliştirmek veya değiştirmek için miras yöntemini kullanan sınıftır.

Destructor : Örneğin sistem tarafından sonlandırılmasını hazırlayan, sınıf veya yapı üzerindeki özel bir metodtur.

Event : Bir değişikliğin bilgilendirmelerini gönderen sınıf veya yapı üyesidir.

Field: Sınıfın ya da yapının doğrudan erişilen veri üyesidir.

Generics : Jenerikler, bir sınıf ya da metodun bir tip parametresi ile tanımlanabilmesine olanak sağlarlar. İstemci kodu tipin örneğini yaratırken parametre olarak tanımlanan tipi belirli bir tipte değişken olarak tanımlar. Böyle parametrenin hangi tipte olduğu tanımlandığından sınıf ya da metodta o tip olarak kullanılabilir.

IDE (Integrated Development Environment) : Derleyici, debug edici, kod düzenleyici ve tasarım araçları gibi çeşitli geliştirme araçları için birleştirilmiş bir arayüz sağlayan uygulamalardır.

Immutable Type : Örnek yaratıldıktan sonra, örneğinin veri, alan ve özellikleri değişmeyen tiplerdir. Değer tiplerinin çoğu böyle tiplerdir.

Inaccessible Member : Belirtilen bir tip tarafından erişilemeyen bir üyedir. Bir tipe Erişilmez bir üyenin başka bir tipe de erişilmez olması gerektiğine dair bir zorunluluk yoktur.

Inheritance : C#, Miras almayı destekler. Yani bir sınıf (class) taban sınıf (base class) olarak adlandırılan sınıftan türetilir ve aynı metod ve özellikleri miras alır. Bunu sınıfa Türetilmiş Sınıf (Derived Class) denir.

Interface : Sadece public metod, olay ve delegelere ait imzaları içeren bir tiptir. Arayüzü miras alan bir nesne arayüzde imzaları tanımlanan tüm metod, olayları geliştirmek zorundadır. Sınıflar veya Yapılar (Structs) herhangi bir sayıda arayüzden miras alabilirler…

Iterator : Öteleyici, bir sınıfın içerdiği bir koleksiyon veya diziyi (array) sınıf kullanıcılarının foreach ile kullanabilmesine olanak sağlar.

Member : Bir sınıf (class) ya da yapı (struct) üzerinde tanımlana alan (field), özellik (property), metod (method) veya olaylara (events) o sınıfın üyeleri (class members) denir.

Method: Bir sınıf (class) ya da yapı (struct) için davranışı sağlayan isimlendirilmiş kod bloğudur.

Mutable Type : Örnek yaratıldıktan sonra, örneğinin veri, alan ve özellikleri değiştirilebilen tiplerdir. Referans tiplerinin çoğu böyle tiplerdir.

Nested Type : Diğer bir tipi tanımının içinde tanımlanmış tiptir.

Object : Sınıf örneğidir (instance). Bir nesne bellekte bulunur ve verisi ve bu veriler üzerinde etkisi olan metodları vardır.

Property : Özellikler, erişimcileri aracılığı ile bir veri üyesine ulaştırırlar.

Refactoring :
Bilgisayar terminolojisinde bilgisayar yazılımının çıktılarını ve işlevlerini değiştirmeden iç yapısının yeniden düzenlenerek uygulamanın geliştirilmesi, iyileştirilmesi demektir. Kısaca önceden girilmiş kodun tekrar kullanılması diyebiliriz. Visual Studio C# düzenleyicisi akıllıca kodunuzu tekrar biçimlendirebilir. Mesela işaretlediğiniz bir kod bloğunu bir hamleyle bir metoda dönüştürebilirsiniz.

Reference Type : Bir veri tipidir. Referans tipi olarak tanımlanan bir değişken verinin depolandığı konumu işaret eder.

Static : Statik olarak tanımlanan bir sınıf ya da metod “new” anahtar kelimesi ile ilklendirilmeden varolabilir.
Örneğin Main() statik bir metoddur.

Struct : Tipik olarak bazı mantıksal ilişkileri olan değişkenler içermesi için kullanılan birleşik veri tipidir. Yapılar aynı zamanda metodlar ve olaylar içerebilirler. Miras almayı desteklemezken arayüz kullanımını desteklerler. Sınıflar referans tipiyken, yapılar değer tipidir.

Value Type : Öbek (Heap) üzerine yerleştirilen referans tiplerine karşın yığın (stack) üzerine yerleştirilen veri tipidir. Yapı ve null değer alabilen (Nullable) tiplerin de olduğu gibi Nümerik tipleri de içeren Yerleşik (built-in) tiplerin hepsi değer tipleridir. Sınıf tipi ve string tipi referans tipleridir.

kaynak: http://msdn2.microsoft.com/en-us/library/ms173231.aspx

Bilgiyle Kalın…
M.Zeki Osmancık

C# _ Karar Yapıları _ If-Else & Switch 522 236 mezo

C# _ Karar Yapıları _ If-Else & Switch


Gerçek hayatta bizlerin bazı kararlar almak zorunda kaldığımız gibi programımızada karar alma yeteneğini kazandırabiliriz çıkabilecek tüm sonuçları değerlendirerek ilgili işlemi yapabilecek duruma gelebilir. Kısacası programımıza düşünme yeteneği kazandırabiliriz.

If – Else Karar Yapısı

If..Else deyimi bir Boolean ifadeyi degerlendirerek program denetimi belirtilen deyim gruplarına geçirir. Basit bir örnek olarak tatile çıkmak istiyorsunuz ve mevcut paranız 500 lira. Afirmasında  1 haftalık tatil 900 lira   ,Bfirmasında 850 lira ,Cfirmasında 450 lira ,Dfirmasındada 300 lira bu 4 firma arasında seçim yapmak gerekirse ilk iki firmayı eledik bile. C ve D firmaları arasındaki seçimimizede orada yapacağımız harcamaları göz önünde bulundurarak değerlendirecek olursak en uygun D firması olacağına karar veririz. İf yapılarıda bu şekilde çalışır. İf karar blogları aşağıda belirtilen formatta yazılır.

Bir çok program ve web sitesinde gördüğümüz kullanıcı adı ve şifrenin doğru olduğuna karar verdiğimiz basit bir program yazalım.

Swicth – Case

Mantık olarak “if else” koşul yapısına benzer. Kendisine gönderilen parametreyi değerlendirir ve ona göre ayrılan kod bloğunu çalıştırır. Yani eleme yaparak parametrenin sahip olduğu değeri ile eşitlenen kod bloğunu çalıştırır.

switch(değişken)

{

case kosul1:

//kodlar bu panele gelecek

break;

case kosul2:

//kodlar bu panele gelecek

break;

case kosuln:

//kodlar bu panele gelecek

break;

default:

//eğer hiç bir koşul desteklenmiyorsa bu koşul gerçekleşecek

break;

}

Bilgisayarımızın saatini kontrol ederek günün çeşitli zamanlarında bize karşılama mesajı çıkartan bir uygulama yazalım

Bilgiyle Kalın…
M.Zeki Osmancık

C# _ Hatalar ve Giderilmeleri _ Try-Catch 353 238 mezo

C# _ Hatalar ve Giderilmeleri _ Try-Catch


Hata Nedir ?

Programcılar veya programı kullanacak olan  son kullanıcılar kimi zaman bazı kullanım yada mantıksal hatalar yapabilirler. Bu hatalar gözden kaçabilen mantıksal hatalar olabilir son kullanıcının programı kullanması sırasında veya test aşamasında karşımıza çıkabilir. İşte bu hataların giderilmesi hata çıktığı anda işlem kod bloğunu terk etmesi için işlemlerimizi try bloğu içersinde yazıyoruz bu blog içersinde bir hata meydana geldiğinde catch bloğu ile hata durumunda ne gibi bir işlem yapacağımızı belirtiyoruz.

Hatanın Yakalama

Örnek olarak iş yerimizde çalışan sarışın bir sekreterimiz için 2 sayıyı toplaması için çok basit bir hesap makinesi yazmış olalım. Sekreterimiz bu hesap makinesini kullanırken sayısal değerler kullanmak zorunda. Peki sayısal olmayan bir değer girdiğinde programın tepkisi ne olacaktır ?

Bu sorunu program içersinde hata kontrolü yaparak çözebiliriz. Eğer işlem bloğumuzda hata oluşursa hata yakalanacak işlemden çıkacak ve hata durumunda ne yapmasını istemişsek onu yapacak.

Finally

Birde programlarımızda hata olsun yada olmasın çalışmasını istediğimiz bazı kodlar yapılmasını istediğimiz işlemler olacaktır. Bunlar hata çıkması durumunda bile çalışacak olan kod bloklarıdır. Finally blogu içersinde yer alan kodlar her ne hata olursa olsun çalışacaktır.

Bilgiyle Kalın…
M.Zeki Osmancık

C# _ Değişkenler ve Veri Tipleri 507 316 mezo

C# _ Değişkenler ve Veri Tipleri


Merhaba arkadaşlar bu yazımda sizlere değişkenler denilen yapıları anlatmaya çalışacağım. Haydi başlayalım 😉

Değişken nedir nasıl tanımlanır?
Bir program çalıştırırken tüm veriler geçici olarak hafızada tutulur. Değişkenler bu verilerin isimlendirilmesi işlemidir. Değişken mantığı günlük yaşamdada çok kullanılan bir mantıktır aslında. Aklımızdan iki sayı tutmamız istendiğinde ve bu sayılarla alakalı işlem yapmamız istendiğinde aslında isimlendirecek olursak sayi1 ve sayi2 olarak o sayıları aklımızda tutuyoruz. İşte bu sayi1 ve sayi2 sadece o an geçiçi bir süre içinde işlem yapmamız için kafamızda ürettiğimiz değişkenlerdir. Programlamadada geçiçi olarak veri tutmak istediğimizde değişkenleri kullanırız.
<veri tipi> <değişken adı>; şeklinde tanımlanırlar.
string isim;
int rakam;
Tanımlama Kuralları
•Tanımlanan değişkenlerin tipleri değişken isminden önce belirtilir.
•Değişken isimlerini belirlerken bazı noktalara dikkat etmek gerekir. Boşluk, nokta, soru işareti, noktalı virgül, çift tırnak, tek tırnak, aritmetik  operatörler, karşılaştırma ve atama operatörleri, parantezler kullanılamaz.
• Sayı ile başlayamaz.
•Visual C#.NET dilinde tanımlı anahtar kelimeler kullanılamaz.
•Değişken isimlerinde Türkçe karakter kullanılırsa, farklı dil seçenekli işletim sistemlerinde çalışma anında hata üretecektir.

Veri Tipleri

Değişkenler program içinde, tuttukları verilere ulaşmak için kullanılır. Ancak değişkenlere ulaşmak, tanımlandıkları yerde veya alt  bloklarda mümkündür. Bu kavrama değişkenlerin kapsam alanı (Scope) denir.
Kapsam alanı dışındaki bir yerden değişkene ulaşılamaz.

Veri tipi, değişkenlerin tuttukları değerlerin türünü ve bellekte tutulacak boyutunu tanımlar. Değişkenleri veri tipleri ile tanımlarken verinin  boyutuna göre bir veri tipi seçilmelidir. İki tip veri tipi mevcuttur Değer Tipleri (Value Type)  ve Referans Tipleri (Reference Type)

Değer Tipleri (Value Type)

Değer tipleri veriyi direk olarak bellek bölgesinden alırlar

Referans Tipleri (Reference Type)


Microsoft .Net ‘ e Giriş 547 203 mezo

Microsoft .Net ‘ e Giriş

Merhaba arkadaşlar programlama ile alakalı ilk makaleme tabiki işin en başından başlamam gerekiyor.  Elimden geldiğince size yararlı bilgiler sunmaya çalışacağım.Programlama dilleri ile ilgileniyorsak bu kelimeyi cok duymussunuzdur.
.NET
Peki nedir bu .Net denilen şey ?Tek başına tanımlanamayacak bir sistemler bütünüdür aslında; Microsoft tarafından geliştirilen  farklı teknoloji , araç ve programlama dillerinin bir arada, tek bir iskelet üzerinde çalışmasına olanak veren uygulama geliştirme platformudur.
Uygulama derken neyi kastettim peki , aslında o kadar geniş bir kavram ki .Net platformunda uygulama diyorsak eğer  aklınıza gelebilecek her türlü uygulamayı bu kelime içersine sığdırabiliriz. Web ,Windows,Mobile vb bir çok uygulamayı geliştirmemize olanak tanır .
.Net güzel bir şeymiş tanımını duyunca heyecanlandık . Nasıl çalışır peki ? Nasıl bu kadar geniş bir çerçevede programcılara özgürlük sunabilir. Gelin .Net içersinde kısa bir yolculuk yapalım:
Öncelikle .Net ile uygulama geliştirebilmemiz için onun kaynağını bilgisayarımıza yüklemiş olmamız gerekiyor.   BCL (Base Class Library ) Temel Sınıf Kütüphanesi  adı verilen bu kütüphane uygulama geliştirmek için gerekli olan arayüz ,sınıf ,fonksiyonları barındırır bizlerde bu arayüz sınıf ve fonksiyonları kullanalarak uygulamalarımızı kolayca geliştirebiliriz.
.Net çok güzel  ve kütüphane olmak zorunda bunları öğrendik   peki asıl soru geliyor hangi programlama dilini kullanmak gerekiyor?
Microsoft bu soruya bizim için çok radikal bir biçimde karar vermiş bile .Net platformunu destekleyen herhangi bir programlama dili cevabı sanırım bizim için yeterli . Her .Net uyumlu dilin kendine özgü bir derleyicisi vardır. Herhangi bir dilde yazılmış uygulama derlendiğinde o dilin derleyicisi kodları ortak bir dile çevirir.
Oluşan bu ortak dilin adı ise MSIL (Microsoft Intermediate Language) yani Microsoft un Ortak Dili . .Net platformu destekli programlama dillerinden herhangi biri veya birden fazlası ile bir uygulama geliştirdiğimizde o dilin derleyicileri  kodları alıp MSIL e çevirerek hepsinin aynı anda makine diline çevrilmesini sağlar.
Buraya kadar geldik yolculuğumuz sürüyor uygulamamızı yazdık derledik  MSIL e çevirdik daha sonra bu kodların işletim sistemine ulaşması gerekiyor yani makine kodlarına çevrilmesi gerekiyor bu işide
CLR devralıyor ve MSIL kodlarımızı alıp makine koduna çeviriyor ve işletim sistemine iletiyor.
Bu işlemi yaparken JIT (Just In Time) derleme yöntemini kullanarak görevini tamamlıyor.
Böylelikle  .Net platformunda geliştirdiğimiz bir uygulamamızın hangi devrelerden geçerek karşımıza geldiğini ve azda olsa .Net platformunun mantığını umarım anlayabilmişsinizdir.
Sonraki Yazılarda Görüşmek Üzere…

    Join our Newsletter

    We'll send you newsletters with news, tips & tricks. No spams here.