VB – Yanıp Sönen Etiket (Flashing Label) Kontrolü Oluşturma

Bu yazımızda yanıp sönen ve kullanıcının ilgilini çeken bir etiket(Label) kontrolü geliştireceğiz. Projelerimde çoğu zaman böyle bir ifadeye, kullanıcının mutlaka okuması gereken, dikkat etmesi gereken yazılara ihtiyaç duyarım. Çoğu uygulamada da bu şekilde ifadeler mevcuttur. Yaygın olarak bu ifadeler uygulama içinde “Kalın(Bold)” ve “Altı Çizili(Underline)” olarak ayarlanırlar. Ya da kırmızı olarak renklendirilirler. Fakat yaptığım projelerde karşılaştığım kadarı ile bu belirginleştirme, kullanıcıların farketmesini sağlamıyor. Ya da kullanıcıların alışkanlıklarından ötürü dikkatlerinin oraya çekilmesini sağlamıyor. Bu konuda düşünürken, bu konuda parlak bir fikir aklıma geldi. 🙂 Evettt gerçekten parlak, hatta yanıp sönen :)) Sonunda yanıp sönen bir etiket(Label) kontrolü geliştirmeye karar verdim. Sonunda nasıl birşey mi çıktı. Buyrun aşağıdadır.

kmb-udemy-reklam

HighlightLabel.vb
Public Class HighlightLabel
Inherits Label

#Region “Initialize”

Private components As System.ComponentModel.IContainer
Friend WithEvents tmrRepater As System.Windows.Forms.Timer

Public Sub New()
Me.InitializeComponent()
End Sub

Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container()
Me.tmrRepater = New System.Windows.Forms.Timer(Me.components)
Me.SuspendLayout()
‘tmrRepater        
Me.tmrRepater.Interval = 5
‘        ‘HighlightLabel      
Me.ResumeLayout(False)

End Sub

#End Region

#Region “Events”

Public Event HighlightSpeedChanged(ByVal value As Integer)

#End Region

#Region “Properties”

Private _HighlightSpeed As Integer = 5
”’ I??kland?rman?n h?z?n? belirler.    
”’ (Minimum : 1 Maksimum : 50)  
”’   
Public Property HighlightSpeed() As Integer
Get
Return _HighlightSpeed
End Get
Set(ByVal value As Integer)

If (value < 1) Then value = 1
If (value > 50) Then value = 50

_HighlightSpeed = value

RaiseEvent HighlightSpeedChanged(value)

End Set
End Property

Private _IsHighlightEnabled As Boolean = True
Public Property IsHighlightEnabled() As Boolean
Get
Return _IsHighlightEnabled
End Get
Set(ByVal value As Boolean)
_IsHighlightEnabled = value

If (Not _IsHighlightEnabled) Then
Me.StopLabelHighlight()
End If

End Set
End Property

#End Region

#Region “Local Variables”

Dim red As Integer = 0
Dim green As Integer = 0
Dim blue As Integer = 0
Dim feeder As Integer = Me.HighlightSpeed

#End Region

#Region “Public Methods”

”’
”’ E?er IsHighlightEnabled = True ise ???kland?rmay? ba?lat?r.  
”’     
Public Sub StartLabelHighlight()

If (Me.IsHighlightEnabled) Then
Me.tmrRepater.Enabled = True
Me.tmrRepater.Start()
End If

End Sub

”’ I??kland?rmay? durdurur.      
Public Sub StopLabelHighlight()

Me.tmrRepater.Enabled = False
Me.tmrRepater.Stop()

End Sub

#End Region

#Region “Event Handlers”

Private Sub tmrRepater_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles tmrRepater.Tick

If (red + feeder >= 255) Then
feeder = (-1) * Me.HighlightSpeed
red = 255
ElseIf (red + feeder <= 0) Then
feeder = (1) * Me.HighlightSpeed
red = 0
End If

red += feeder

Me.ForeColor = Color.FromArgb(red, green, blue)
End Sub

#End Region

End Class

image Kontrolü test etmek için gerekli test formu

 

Form3.Designer.vb
Partial Class Form3
Inherits System.Windows.Forms.Form

‘Form overrides dispose to clean up the component list.     
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub

‘Required by the Windows Form Designer    
Private components As System.ComponentModel.IContainer

‘NOTE: The following procedure is required by the Windows Form Designer    ‘It can be modified using the Windows Form Designer.      ‘Do not modify it using the code editor.     _    
Private Sub InitializeComponent()
Me.btnHizlandir = New System.Windows.Forms.Button()
Me.btnYavaslat = New System.Windows.Forms.Button()
Me.Label1 = New System.Windows.Forms.Label()
Me.HighlightLabel1 = New WindowsApplication1.HighlightLabel()
Me.SuspendLayout()

‘btnHizlandir       

Me.btnHizlandir.Location = New System.Drawing.Point(301, 97)
Me.btnHizlandir.Name = “btnHizlandir”
Me.btnHizlandir.Size = New System.Drawing.Size(75, 23)
Me.btnHizlandir.TabIndex = 1
Me.btnHizlandir.Text = “H?zland?r”
Me.btnHizlandir.UseVisualStyleBackColor = True

‘btnYavaslat        ‘        
Me.btnYavaslat.Location = New System.Drawing.Point(220, 97)
Me.btnYavaslat.Name = “btnYavaslat”
Me.btnYavaslat.Size = New System.Drawing.Size(75, 23)
Me.btnYavaslat.TabIndex = 2
Me.btnYavaslat.Text = “Yava?lat”
Me.btnYavaslat.UseVisualStyleBackColor = True        ‘        
‘Label1        ‘        
Me.Label1.AutoSize = True
Me.Label1.Location = New System.Drawing.Point(166, 102)
Me.Label1.Name = “Label1”
Me.Label1.Size = New System.Drawing.Size(31, 13)
Me.Label1.TabIndex = 3
Me.Label1.Text = “H?z : “        ‘        
‘HighlightLabel1        ‘        
Me.HighlightLabel1.AutoSize = True
Me.HighlightLabel1.Font = New System.Drawing.Font(“Microsoft Sans Serif”, 18.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(162, Byte))
Me.HighlightLabel1.HighlightSpeed = 5
Me.HighlightLabel1.IsHighlightEnabled = True
Me.HighlightLabel1.Location = New System.Drawing.Point(12, 32)
Me.HighlightLabel1.Name = “HighlightLabel1”
Me.HighlightLabel1.Size = New System.Drawing.Size(372, 29)
Me.HighlightLabel1.TabIndex = 0
Me.HighlightLabel1.Text = “Bu bir yan?p s?nen uyar? etiketidir.”        ‘        ‘Form3        ‘        
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(388, 132)
Me.Controls.Add(Me.Label1)
Me.Controls.Add(Me.btnYavaslat)
Me.Controls.Add(Me.btnHizlandir)
Me.Controls.Add(Me.HighlightLabel1)
Me.Name = “Form3”
Me.Text = “Form3”
Me.ResumeLayout(False)
Me.PerformLayout()

End Sub
Friend WithEvents HighlightLabel1 As WindowsApplication1.HighlightLabel
Friend WithEvents btnHizlandir As System.Windows.Forms.Button
Friend WithEvents btnYavaslat As System.Windows.Forms.Button
Friend WithEvents Label1 As System.Windows.Forms.Label
End Class

 

Form3.vb
Public Class Form3

Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.HighlightLabel1.StartLabelHighlight()

‘Me.HighlightLabel1.StopLabelHighlight()

‘Me.HighlightLabel1.IsHighlightEnabled = True        
‘Me.HighlightLabel1.HighlightSpeed = 10

AddHandler Me.HighlightLabel1.HighlightSpeedChanged, AddressOf HighlightLabel1_HighlightSpeedChanged

Me.Label1.Text = “H?z : “ & Me.HighlightLabel1.HighlightSpeed.ToString()

End Sub

Private Sub btnHizlandir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnHizlandir.Click
Me.HighlightLabel1.HighlightSpeed += 5
End Sub

Private Sub btnYavaslat_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnYavaslat.Click
Me.HighlightLabel1.HighlightSpeed -= 5
End Sub

Private Sub HighlightLabel1_HighlightSpeedChanged(ByVal value As Integer)
Me.Label1.Text = “H?z : “ & value.ToString()
End Sub

End Class

Sonuç :

HighlightSpeed” özelliği ile hızlandırabilir ya da yavaşlatabilirsiniz..

IsHighlightEnabled” özelliği ile etkisizleştirebilirsiniz..

HighlightSpeedChanged” olayını yönetebilirsiniz..

 Resim 1Resim 1  Resim 2Resim 2
 Resim 3Resim 3 Resim 4Resim 4
 Resim 5Resim 5
Reklamlar

C# – DataGridViewCheckboxCell ‘de Checkbox Değer Değişimini Yakalamak

Bir DataGridView üzerinde oluşturduğunuz Checkbox içeren kolonda, Checkbox’ın değerinin değişimini yakalamak istiyorsanız.. DataGridView ‘in iki adet event’ine şu kodları yazmanız gerekebilir. Tabii farklı yollarda mevcuttur. Fakat ben genelde aşağıdaki yöntemi kullanıyorum..

DataGridView’ın;

CurrentCellDirtyStateChanged” olayında, datagridview ‘ın editing(düzenleme, değişiklik yapma) işlemini sonlandırıyorum.
CellContentClick” olayında ise artık elimde işaretlenmiş ya da iaşreti kaldırılmış bir checkbox mevcuttur. İşleyecek kodumuzu buraya dolduruyoruz.. 🙂

Aşağıdaki kod ile DataGridView üzerinde bir checkbox kolon değeri değiştiğinde, checkbox hücresi hariç diğer hücrelerin yazı renginin kırmızı olması ve üstü çizilmesi sağlanmaktadır..


private void dgvItems_CellContentClick(object sender, DataGridViewCellEventArgs e)

{

    if (this.dgvItems.CurrentCell == null) return;

 

    if (this.dgvItems.CurrentCell.GetType() == typeof(DataGridViewCheckBoxCell))

    {

        if (this.dgvItems.CurrentCell.GetType() == typeof(DataGridViewCheckBoxCell))

        {

            bool isSelected = bool.Parse(this.dgvItems.CurrentRow.Cells[0].Value.ToString());

            DataGridViewCellStyle newStyle = new DataGridViewCellStyle();

            newStyle.ApplyStyle(this.dgvItems.RowTemplate.DefaultCellStyle);

 

            if (isSelected)

            {

                newStyle.ForeColor = Color.Red;

                newStyle.Font = new Font(this.dgvItems.RowTemplate.DefaultCellStyle.Font, FontStyle.Strikeout);

            }

 

            foreach (DataGridViewCell cell in this.dgvItems.CurrentRow.Cells)

            {

                if (cell.GetType() != typeof(DataGridViewCheckBoxCell))

                    cell.Style = newStyle;

            }

        }

    }

}

private void dgvItems_CurrentCellDirtyStateChanged(object sender, EventArgs e)

{

    this.dgvItems.EndEdit();

}


C# – Plugin Tabanlı Uygulama Geliştirme Part – 1

Microsoft ‘un MSN ‘i üzerinde eklenti geliştirmeyi çoğumuz duymuşuzdur. Duymayanlar varsa onlara “Işıl Orhanel ‘in makalesini” okumalarını tavsiye ederim. Gerçekten çok ilginç fikirler ve yardımcı eklentiler geliştirebiliyorsunuz. Fakat benim anlatmak istediğim, MSN’e eklenti geliştirmek değil. Benim hoşuma giden Microsoft’un MSN için eklenti geliştirebilmede kurduğu yapı.

Yukarıda bahsettiğim makaleyi okuyunca orada göreceksiniz ki, Visual Studio .NET ile bir “ClassLibrary” projesi açıp MSN ‘in yüklü olduğu konumdaki “MesengerClient.dll” referansını projenize ekleyip kolayca geliştirme yapabilyorsunuz. Tabii ki bu referans’ın size izin verdiği ölçüde MSN ‘e erişebiliyorsunuz. İşte beni etkileyen de bu yapı. “MesengerClient.dll” referansı ekleme ile eklenti geliştirme projenize başlıyorsunuz. Sonrasında bir Interface uyguluyorsunuz ve class’ınızda bir “Initialize” metodu geliyor. Bu metot size “MessengeClient” isimli bir parametre sunuyor. İşte olayın kritik noktası burası, bu parametre(nesne) ile siz MSN ‘de mesaj gönderme, mesaj alma, durum değişikliği, msn kapatma vs. gibi olaylara kod yazabiliyorsunuz. Messenger ‘a eklentinizi geliştirip yüklediğinizde, messenger ilk önce kendi event’ini (mesela mesaj yollama işlemini) sonra sizin yazdığınız kodu çalıştırıyor ve sizinde msn’de emeğiniz geçmiş oluyor. 🙂 Burada dikkat ettiyseniz eklenti geliştirmeyi bu Initialize metodunda gönderilen Messenger nesnesi ile yapıyorsunuz. O yüzden onun dışına çıkamıyorsunuz. Yani mesela MSN arka plan veya ayarlar bölümünde bir değişiklik yapamıyorsunuz.

İşte bu çok güzel bir yöntem yani biz neden bu yapıyı kendi geliştirdiğimiz uygulamalarda da uygulamayalım. Yani mozilla firefox’u görüyorsunuz. Bir web tarayıcı ama popüleritesinin bence %70’ini kullanıcıların üzerinde eklenti geliştirebilmesini ve daha fazla özellik kazandırabilmesine borçlu. Hatta kullanıcılar eklentilerden istediklerini yükleyebiliyorlar.

Aslında bu çok başarılı bir strateji yani böylece uygulama üzerinde geliştiricilerinde emeğinin geçmesi ve hoş şeyler üretebilmelerini sağlarken, bir nevi uygulamanızında masrafsız bir şekilde büyümesini sağlıyorsunuz. Geliştiricilerin düşünemediğiniz özellikler kazandırabildiğini görüyorsunuz. En önemlisi kullanıcılara uygulamanızı kendilerine özelleştirebilme imkanı veriyorsunuz. Bence bunlar firefox’un yayılmasında çok önemli etkenler. Neyse konuyu uzatmadan bende bu şekilde geliştirmeye açık bir yöntemli uygulama geliştirmek isteyerek bu konuda Microsoft’un bunu nasıl gerçekleştirdiğini araştırdım, denedim, kurguladım ve bir dizi karışık kodun ardından çok daha sade bir yöntem ile bu işi çözmek beni çok mutlu etti. Bu konuyu sizinlede paylaşmak istedim. 🙂

Biz de bu yönteme benzer bir şekilde nasıl uygulama geliştireceğiz yani eklenti tabanlı bir uygulama bunu yazılı ve video ‘lu olarak okuyabilir veya izleyebilirsiniz..

Makale için tıklayınız..
Video dersi için tıklayınız..
Proje dosyası için tıklayınız..

C# – File Info Writer (Dosya Bilgi Yazıcı)

Hoşgeldin düzen, rahatlık, kolaylık 🙂 Belki bu kelimeler ilk satırda birşey ifade etmiyor ama ilerleyen satırlarda çok anlam ifade edeceğine inanıyorum. Bir süredir üzerinde çalıştığım bir uygulamayı dün akşam itibariyle bitirmenin mutluluğunu yaşıyorum. Peki ne mi bu uygulama? Aslında isminden az çok belli olsada bu uygulamayı tam anlatmaya yetmiyor..


Bir klasör hiyerarşisi yazıcısı, kaydedicisi 🙂 Peki bu ne demek. Aslında uygulamanın yaptığını kısaca anlatsam daha mantıklı olacaktır. File Info Writer uygulaması ile seçtiğiniz bir klasör’ün tüm alt klasör ve dosyaları ile hiyerarşisini ekranda ağaç yapısında görebildiğiniz bir uygulama.


Peki gördükte ne oldu zaten klasörü açıyorum ve görüyorum 🙂 dediğinizi tahmin ediyorum. Aslında bu uygulamayı geliştirmemdeki amaç veri depolamamda bana yardımcı olması içindir. Şöyle ki gerek bilgisayarımda olsun(hard disk’im full dolmuş :)) gerekse de cd çantamda olsun. Bir sürü cd ve hatta dvd var. Bir süre sonra hangi cd ya da dvd ‘de hangi uygulamalarınızın olduğunu unutmaya başlıyorsunuz. Cd ya da dvd ‘yi takıp içine bakmak ise üşengeçlik hattını aşamadığınızdan pek hevesli gelmiyor. Hadi bu hattı aştınız diyelim. Peki bir sürü cd ya da dvd ‘den kaç tanesine bakacaksınız. Bu iş zamanla sinir ,stres oranını biraz arttırıyor. 🙂 Bu konuda kendime kolaylık getirmesi açısından bir uygulama geliştirmeye karar verdim ve sonunda bu ürün çıktı.


Uygulama, yukarıda da belirttiğim gibi seçtiğiniz bir klasör’ü içindeki klasör ve dosya hiyerarşisi ise bir ağaç yapısında görüntülemenizi sağlıyor. Bu yapıyı, bir “açıklama” yazısı ile uygulamanın veritabanına kaydedebiliyorsunuz. Sonradan bu klasör’ü cd ya da dvd ‘ye yazdırdığınızda bu “açıklama” ifadesini cd ya da dvd yüzeyine yazaraktan, cd ya da dvd ‘yi etiketlemiş oluyorsunuz. Bundan sonra ise çantaya attığınız bu cd ya da dvd ‘yi çantaya uğramadan 🙂 içinde hangi dosyaların olduğunu hatta hangi klasör altında olduğuna kadar görebiliyorsunuz. Verdiğiniz “açıklama” ifadeleri ile istediğiniz kadar cd ya da dvd içeriğini uygulama veritabanına atabilirsiniz. Sonra da arama kısmını kullanarak, aradığınız dosyaların hangi “açıklama”(etiketli) cd ya da dvd ‘de olduğunu görebilirsiniz.


Buraya kadar herşey güzel ve benim sorunlarımı bir nebze olsa rahatlatıyor. Ama benim istediğim daha fazlasıydı 🙂 Bu nedenle daha çok özellik ekledim. 🙂 Bunlardan biri şu ki, mesela bu program yok ve elimde cd ya da dvd çantam var. Peki ben nasıl bileceğim. Hangi cd ya da dvd’imde aradığım uygulamanın olduğunu, tabii burada cd ya da dvd ‘ye verdiğiniz etiket(isim) bir yere kadar tahmin etmenizi sağlayabilir. Fakat birden fazla “Program Arşivi” ismiyle etiketlediğiniz cd ya da dvd ‘lerinizde hangisinde hangi uygulamanın olduğunu nereden hatırlayacaksınız. Tabii bu benim gibi bol bol uygulama kullananlar için geçerli 🙂 İşte bunu da düşünerek uygulamaya bir de WORD dökümanına, seçili klasör hiyerarşisini yazan bir özellik ekledim. Bu işlem ile görüntülediğiniz klasör hiyerarşisini bir Word dökümanına aktarabiliyorsunuz. Bu aktarma sonrasında ise, size sadece “Yazdır” demek kalıyor. Word dökümanını yazdırıp cd çantanızda cd ya da dvd nizin yanına koyabilirsiniz. 🙂 Bu da benim sorunlarımı tamaiyle çözüyor.


Eklediğim ufak birkaç özellik daha mevcut bunlar;

  1. Kaydettiğiniz hiyerarşilerden istediğinizi kaldırabilmeniz.
  2. Kaydettiğiniz hiyerarşilerden istediğiniz dosya ya da klasör bilgisini kaldırabilmeniz.
  3. Veritabanı verilerinizin tümünü silebilmeniz.
  4. Kaydettiğiniz tüm hiyerarşilerin grafiğini ve hangisinde kaç dosya olduğunu görebilmeniz.
  5. Veritabanı yedeğini alabilmeniz.

Ayrıca uygulama tamamen açık kaynak kodludur. Yani yazılım ile ilgilenen arkadaşlar içinde eğitici ve üzerinde değişiklik yapıp yeni özellikler ekleyip çıkarabilecekleri bir şekilde aşağıdan indirebilirsiniz.

Uygulama Kaynak Kodları :

http://cid-f2e617aff724ee2b.skydrive.live.com/embedrowdetail.aspx/Video%20Derslerim/Applications/FileInfoWriterSolution.rar


Uygulamanın Setup Dosyası :
http://cid-f2e617aff724ee2b.skydrive.live.com/embedrowdetail.aspx/Video%20Derslerim/Applications/FileInfoWriterInstaller.rar


Uygulamayı Anlatan Video :
http://cid-f2e617aff724ee2b.skydrive.live.com/embedrowdetail.aspx/Video%20Derslerim/Applications/FileInfoWriter.wmv

XML ile Telefon Defteri Uygulaması

Veritabanı olarak XML kullanarak Visual C#.NET dili ile telefon defteri uygulaması geliştirme videosu. XML ile ilgili diğer görsel derslerde öğrenilenlerin gerçek hayatta kullanılarak bir masaüstü uygulamasının geliştirilmesi örneği. Uygulama XML’den veri listeleme, XML’e veri ekleme, XML veri düzeltme, XML’den veri silme işlemlerini içerir. Ayrıca windows uygulamaları geliştirme pratikliliği ve düşünce yöntemini anlatmaktadır. XML işlemlerinde “System.Xml.Linq” namespace’i kullanılmıştır.

Bu ve benzeri uygulamalarıma sürekli yer vererek yazılım geliştirmede gerekli olan kurgulama ve hayal gücünün ilgili arkadaşlarda yeşermesini sağlayacağımı düşünüyorum. Birilerine yardımcı oluyorsa ne mutlu bana. 🙂 Aşağıda uygulama videolarını bulabilirsiniz. 4 bölüm olarak kaydettim. ilk bölümün içinde projenin tamamını bulabilirsiniz. 4 bölüm yaklaşık 2,5 sa gibi bir süre sürmektedir. Konunun daha pratik, yalın, eğitici ve kolay bir anlatımından dolayı bu süreyi bulmuştur.. İlgilenen arkadaşların zevkle izleyeceğini düşünüyorum.
Herkese iyi çalışmalar..

http://cid-f2e617aff724ee2b.skydrive.live.com/embedrowdetail.aspx/Video%20Derslerim/XML%20Egitimi/XML%20ile%20Telefon%20Defteri%20Uygulamas%c4%b1%20-%20B%c3%b6l%c3%bcm%201.rarhttp://cid-f2e617aff724ee2b.skydrive.live.com/embedrowdetail.aspx/Video%20Derslerim/XML%20Egitimi/XML%20ile%20Telefon%20Defteri%20Uygulamas%c4%b1%20-%20B%c3%b6l%c3%bcm%202.rarhttp://cid-f2e617aff724ee2b.skydrive.live.com/embedrowdetail.aspx/Video%20Derslerim/XML%20Egitimi/XML%20ile%20Telefon%20Defteri%20Uygulamas%c4%b1%20-%20B%c3%b6l%c3%bcm%203.rarhttp://cid-f2e617aff724ee2b.skydrive.live.com/embedrowdetail.aspx/Video%20Derslerim/XML%20Egitimi/XML%20ile%20Telefon%20Defteri%20Uygulamas%c4%b1%20-%20B%c3%b6l%c3%bcm%204.rar
http://cid-f2e617aff724ee2b.skydrive.live.com/embedrowdetail.aspx/Video%20Derslerim/XML%20Egitimi/WinXmlTelefonDefteriProjesi.rar

Form’lar Arası Veri Okuma

Farklı formlar içeren bir windows uygulamasında, bir form’dan diğer form’daki veriye erişme yöntemi ve veri okuma yöntemini içeren kendi video dersim..