sMerhaba Arkadaşlar;
Şimdiye kadar Visual Studio ile yazılım geliştirdik. Peki nimetlerinden ne kadar yararlanıyoruz? Daha doğrusu ne kadar farkındayız? Bu makalede sizlerle çok fazla seslendirilmeyen Visual Studio kullanım teknikleri ve VS Macro'lar üzerine konuşacağız.
Hızlı kod yazabilmek için temel gereksinim; editörü hızlı kullanabilmektir. Ne kadar hızlı mouse kulanırsak kullanalım, hiç bir zaman klavyede eriştiğimiz hızlara erişemeyiz( en azından benim ve çevremdeki arkadaşlar için böyle :). Bu da bizi Visual Studio kullanımında da klavye'ye yönelmemiz gerektiği gerçeğiyle karşılaştırır. O zaman hemen sık kullanılan Visual Studio Klavye Kısayollarına bakalım. Bunların broşür halinin şuradan da indirebilirsiniz.
- Ctrl+. (Shift+Alt+F10un yaptığını yapıyor; using eklemek, gerektiğinde method oluşturmak vb. işlemlerde)
- F12 - Go to Definiton
- Alt+F12 - Find Symbol
- Shift+Alt+F12 - Quick Find Symbol(Seçtiğin bir string'i Symbol olarak direk arar. En çok Web.Config gibi yerlerde işe yarıyor.)
- Ctrl+Shift+F - Find In Files - Tüm bulduğu eşleşenleri liste halinde gösterir.
- Shift+F12 - Find All References
- Ctrl+Shift+A - Add New Item
- Shift+Alt+C - Add New Class
- Ctrl+W,S - Solution Explorer
- Ctrl+W,E - Error List
- Ctrl+F4 - Close Current Tab
- Ctrl+Tab - Açık pencereler arasında dolaşmanı sağlıyor
- Ctrl+ - : Bir kod satırından uzak bir satıra atladıysan Geri gelmeni sağlıyor. "Go to Definition" gibi atlamalarında da sayfalar arası atlama falan da yapabiliyorsun.(Navigate Backward)
- Ctrl+Shift+ - : Navigate Forward
- F7 - View Code : Shift+F7 - View Designer
- Ctrl+K, S - Surround with (Snippet'le sorrund etmek için(#region,foreach,if vb.))
- Ctrl+M,M - Bulunduğun bölümü collapse eder
- Ctrl+M,O - Tüm bölümleri(region, method ne varsa) collapse eder.
- Shift+F9 - Quick Watch
- F9 - Toggle Break Point - Break point koyar.
- Debug işlemlerinde F10,F11,Shift+F11,Shift+F5,F5 gibi bildiğiniz şeyler...
İhtiyaçlarınıza göre bu kısayolları ezberleyin derim. Kısa sürede kod yazma hızınızdaki artışı fark edeceksiniz. Çünkü mouse kullanımı etkileşimli(mouse'in ekranın neresine gittiğini görüp hızını ayarlamanız gerekmekte); ancak klavye kullanımı otonom(klavyeye bakmadan tuşlara basar ve istediğiniz sonucu alırsınız) bir harekettir. Klavye kullanımındaki otonom hareket, zihinizi kod yazarken mouse'den kurtarıp daha etkili kod yazmanızı sağlayacaktır.
Visual Studio'da Regular Expressions
Visaul Studio'nun çok fazla kullanılmayan nimetlerinden biri de Regular Expression'lar. Arama işlemlerinde işlerinizi ne kadar kolaylaştırdığını fark ettiğiniz de bilmeden geçirdiğiniz günlere acıyacaksınız.
Mesela kodlarınızdaki tüm tek satırda yazılan int propertyleri bulmak istiyorsunuz. Arama penceresinde "Use Regular Expressions" seçtikten sonra "int.*{.*}" yazmanız yeterli :) Nasıl ama kolay değil mi? Ya da sık kullanabileceğimiz boş satırları silme işlemi için "\n:b*\n" aratıp, "\n" ile replace edebilirsiniz.":b" burada özel bir karakter kısmını ifade eder, tab ya da space.. * ise RegEx'den bildiğimiz şekilde çalışır: 0 ya da sonsuz tane tekrar..
Özellikle HTML ve XML kullanımlarında işinizi oldukça kolaylaştıracaktır. Find & Replace özelliğinde daha özel işler yapabilirsiniz de.. Mesela seçtiğiniz bir XML taginin başına ve sonuna özel bir tag ekleyebilirsiniz.
Burada önemli nokta Özel karakterlere hızlı erişim için arama textbox'ının yanındaki ">" butonunu kullanabilirsiniz. Diğer tüm anahtar karakterlere adresinden erişebilirsiniz.
Visual Studio Macros
Macro'lar tekrarlanan işler yaparken işlerimizi kolaylaştırmak için elimiz ayağımız oluyor. Visual Basic olması bir dezavantaj olsa da, online C#2Vb Code Converter'lar oldukça işinize yarayabilir.
2 türlü kullanabilirsiniz. Ctrl+Shift+R kısayolu ile geçici(temporary) Macro kaydedip, Ctrl+Shift+P ile de bu Macro'yu çalıştırabilirsiniz. Aynı zamanda bu kaydettiğiniz macroları Visual Basic kodu olarak da Macro Explorer üzerinden görüntüleyebilirsiniz. Sık kullandığım, ve bu kaydedilmiş Macro'lara bakarak oluşturduğum bir kaç Macro örneğini sunayım size:
IIS Worker Process'e Attach olmanızı sağlayan Macro Kodu
Sub AttachToW3wp()
Dim attached As Boolean = False
Dim proc As EnvDTE.Process
For Each proc In DTE.Debugger.LocalProcesses
If (Right(proc.Name, 8) = "w3wp.exe") Then
proc.Attach()
attached = True
Exit For
End If
Next
If attached = False Then
MsgBox("w3wp.exe çalışmıyor")
End If
End Sub
Aktif dosyayı sadce çalıştırıldığı anda göstern Macro Kodu(Bu özellik zaten Visual Studio'da var ama sürekli aktif olması dez avantaj olduğu için böyle bir çözüm güdülmüş. Ben de bu kodu başka bir yerde gördüm :)
Public Sub LocateFileInSolutionExplorer()
DTE.ExecuteCommand("View.TrackActivityinSolutionExplorer")
DTE.ExecuteCommand("View.TrackActivityinSolutionExplorer")
DTE.ExecuteCommand("View.SolutionExplorer")
End Sub
Açık olan tüm dökümanlara Format Document komutunu veren kod bloğu
Sub FormatEachOpenedPage()
For Each doc As Document In DTE.Documents
doc.Activate()
DTE.ExecuteCommand("Edit.FormatDocument")
doc.Save()
Next
End Sub
DB'de bir alandaki değeri çekip, bu veriyi bir dosya olarak Solution'a ekleyen Macro kodu.. Mail templateini DB'de tutan bir kod bloğu gördüm. HTML editör olmadığı için oldukça zor değiştiriliyordu. Bende Visual Studio üzerine çalışabileceğim bir ortam oluşturdum.
Sub LoadAllMail()
'Dim selectedfileName As String = DTE.ActiveDocument.Selection.Text
Dim adap As New OracleDataAdapter("SELECT * FROM CC_MAILTEMPLATE where ISACTIVE=1 MAILCODE IN (' + selectedfileName + ') ", Helpers.RealConStr)
Dim commandWin As EnvDTE.CommandWindow
commandWin = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindCommandWindow).Object
Dim dTable As New DataTable()
adap.Fill(dTable)
For Each row As DataRow In dTable.Rows
DTE.Windows.Item(Constants.vsWindowKindSolutionExplorer).Activate()
DTE.ActiveWindow.Object.GetItem("DBSources\" + Helpers.DefaultProject + "\MailTemplate").Select(vsUISelectionType.vsUISelectionTypeSelect)
Try
DTE.ItemOperations.AddNewItem("Visual C# Items\General\Text File", row("MAILCODE").ToString() + ".html")
DTE.ActiveDocument.Selection.SelectAll()
DTE.ActiveDocument.Selection.Delete()
DTE.ActiveDocument.Selection.Insert(row("BODY_TR_TR").ToString())
Catch ex As Exception
commandWin.OutputString("Yüklenemedi " + row("MAILCODE").ToString())
End Try
Next
End Sub
Alttaki de bu dosyadan tekrar veritabanına gönderen kod bloğudur.
Sub SaveMail()
DTE.ActiveDocument.Selection.SelectAll()
Dim name As String = DTE.ActiveDocument.Name.Split(".")(0)
Dim con As New OracleConnection(OttoHelpers.ConStr)
Dim cmd As New OracleCommand()
cmd.Connection = con
'
cmd.CommandText = "UPDATE CC_MAILTEMPLATE SET BODY = :MAILBODY WHERE MAILCODE='" + name + "' AND ISACTIVE=1"
cmd.Parameters.AddWithValue("MAILBODY", DTE.ActiveDocument.Selection.Text.ToString())
Try
con.Open()
cmd.Transaction = con.BeginTransaction()
Dim affectedRows As Int32 = cmd.ExecuteNonQuery()
If affectedRows = 1 Then
cmd.Transaction.Commit()
MsgBox("Güncellenen kayıt sayısı:" + affectedRows.ToString())
End If
Catch ex As Exception
cmd.Transaction.Rollback()
MsgBox("Transaction Geri Alındı (Rollback) !")
Finally
If con.State = ConnectionState.Open Then
con.Close()
End If
End Try
DTE.ActiveDocument.Selection.StartOfLine(vsStartOfLineOptions.vsStartOfLineOptionsFirstText)
End Sub
Bu kodlar size de neler yapılabileceği ile ilgil oldukça iyi fikirler vermiştir diye düşünüyorum.
Umarım bu İp Uçları( [Tips & Tricks] ) işinize yarar ve size kolaylık sağlar.
Herkese iyi çalışmalar dilerim.