Genel Tartışma VB.NET - Sıkça Sorulan Sorular

Tüm Yanıtlar

  • 04 Ekim 2010 Pazartesi 12:10
    Moderatör
     
     
     

    Ortak Dil Çalışma Platformu ( Common Language Runtime ) derlemeleri (assembly) nasıl yükler?

     

     

    Bir .NET uygulaması çalıştığında Ortak Dil Çalışma Platformu (CLR)uygulamanın gerçekleştirildiği derleme versiyonuyla bağlanır. Bir derlemenin çözülmesi işlemi aşağıdaki işlemleri gerektirir :

     

    1. Konfigürasyon dosyalarının incelenmesi
    2. Daha önce referans edilmiş derlemelerin kontrol edilmesi
    3. Genel derleme önbelleğinin kontrol edilmesi
    4. Derlemenin  kod tabanında ya da probing (araştırma) sonucu tespit edilmesi.

     

    Adımlar hakkında daha detaylı bilgiyi takip eden linkten bulabilirsiniz : 

    http://msdn.microsoft.com/en-us/library/yx7xezcf.aspx

     

    Uygulama geliştiriciler çalışma zamanında herhangi bir klasörde (sadece bin klasörü değil) bulunan derlemeleri çalışma zamanında yüklemek isteyebilirler. Bu durumda kullanılabilecek 3 yol mevcuttur :

     

    • Derlemenin Genel Derleme Önbelleğine (GAC) yüklenmesi
    • <codeBase> tag'ını içeren bir uygulama konfigürasyonu dosyası (.config) kullanmak.
    • AssemblyResolve olayının kullanılması.

     

    Detaylı bilgi ve adım adım uygulama için aşağıdaki bağlantıyı ziyaret edebilirsiniz :

    http://support.microsoft.com/kb/837908

     

    İlişkili bir forum konusu :

    http://social.msdn.microsoft.com/Forums/en-US/vblanguage/thread/9507c618-0019-4d19-b4db-7287c4f053c2/


    Emre Günertürk, MSFT
    Microsoft bu servisi kullanıcılarına teknik destek verme,Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi gibi bir sorumluluk üstlenildiği anlamına gelmez.
  • 04 Ekim 2010 Pazartesi 12:12
    Moderatör
     
      Kod İçerir
     

    ByVal ve ByRef arasında ne fark vardır?

     

    Bir altprogram veya fonksiyon yazdığınızda ana programdan bu altprograma ya da fonksiyona parametre geçişi yapabilirsiniz.

     

    Eğer değişkenin değerini parametre olarak geçmek istiyorsanız ByVal sentaksını kullanmalısınız. Değişkenin değerini parametre olarak geçmekle bu değişkene o alt program veya fonksiyonda uygulanacak değişiklikler ana programda geçerli olmaz. Bu parametre geçiş yöntemi default olarak kullanılan yöntemdir.

     

    Eğer parametre olarak alt programa ya da fonksiyona gönderdiğiniz değerin değişebilmesini istiyorsanız ByRef sentaksını kullanmalısınız. Bu yolla değişkenin referansı parametre olarak verilmiş olur ve alt program veya fonksiyondan dönüldüğünde değişkenin değeri değişmiş olabilir.

     

    Bu konuda daha detaylı bilgi için aşağıdaki MSDN dokümanına göz atabilirsiniz :

    http://msdn.microsoft.com/en-us/library/ddck1z30.aspx

     

     

    Takip eden kod bölümünde bir adet değer tipinde ve yine 1 adet referans tipinde değişken tanımlanmıştır. Daha sonra bu değişkenler altprogramlara parametre olarak ByVal ve ByRef anahtar kelimeleriyle gönderilmişlerdir.

     

    Örnek Uygulama

     

    Imports System.Security
    Imports System.Security.Permissions
    Imports System.IO
    
    Public Class Form1
    
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
      Handles Button1.Click
        Dim parameter_valtype As Integer = 10
        Dim parameter_refertype As demo = New demo(1, "initial value")
    
    Console.WriteLine("the value of value type variable parameter_valtype:" & _
                 parameter_valtype.ToString)
        Console.WriteLine("pass value type variable parameter_valtype with byval modifier")
        passByval_valType(parameter_valtype)
        Console.WriteLine("the value of value type variable parameter_valtype:" & _
                 parameter_valtype.ToString)
        Console.WriteLine("")
        Console.WriteLine("pass value type variable parameter_valtype with byref modifier")
        passByref_valType(parameter_valtype)
        Console.WriteLine("the value of value type variable parameter_valtype:" & _
                 parameter_valtype.ToString)
        Console.Write(vbCrLf)
    
    Console.WriteLine("the value of reference type variable parameter_refype: " & _
                 parameter_refertype.nummember.ToString & " " & _
                 parameter_refertype.strmember)
        Console.WriteLine("pass reference type variable parameter_valtype with byval modifier" & _
                 " and modify the reference variable ")
        passByval_refType_modifyvarialble(parameter_refertype)
        Console.WriteLine("the value of reference type variable parameter_refype: " & _
                  parameter_refertype.nummember.ToString & " " & _
                  parameter_refertype.strmember)
        Console.Write(vbCrLf)
    
    Console.WriteLine("the value of reference type variable parameter_refype: " & _
                 parameter_refertype.nummember.ToString & " " & _
                 parameter_refertype.strmember)
        Console.WriteLine("pass reference type variable parameter_valtype with byval modifier")
        passByval_refType(parameter_refertype)
        Console.WriteLine("the value of reference type variable parameter_refype: " & _
                  parameter_refertype.nummember.ToString & " " & _
                  parameter_refertype.strmember)
        Console.Write(vbCrLf)
    
    Console.WriteLine("the value of reference type variable parameter_refype: " & _
                 parameter_refertype.nummember.ToString & " " & _
                 parameter_refertype.strmember)
        Console.WriteLine("pass reference type variable parameter_valtype with byref modifier")
        passByref_refType(parameter_refertype)
        Console.WriteLine("the value of reference type variable parameter_refype: " & _
                  parameter_refertype.nummember.ToString & " " & _
                  parameter_refertype.strmember)
        Console.Write(vbCrLf)
    
    Console.WriteLine("the value of reference type variable parameter_refype: " & _
                 parameter_refertype.nummember.ToString & " " & _
                 parameter_refertype.strmember)
        Console.WriteLine("pass reference type variable parameter_valtype with byref modifier" & _
                 " and modify the reference variable ")
        passByref_refType_modifyvarialble(parameter_refertype)
        Console.WriteLine("the value of reference type variable parameter_refype: " & _
                  parameter_refertype.nummember.ToString & " " & _
                  parameter_refertype.strmember)
        Console.Write(vbCrLf)
    
    End Sub
      Public Sub passByref_valType(ByRef i As Integer)
        i = i + 2
      End Sub
      Public Sub passByval_valType(ByVal i As Integer)
        i = i + 4
      End Sub
      Public Sub passByval_refType(ByVal d As demo)
        d.nummember = d.nummember * 2
        d.strmember = "passByval_refType"
      End Sub
      Public Sub passByval_refType_modifyvarialble(ByVal d As demo)
        d = New demo(11, "passByval_refType_modifyvarialble")
      End Sub
      Public Sub passByref_refType(ByRef d As demo)
        d.nummember = d.nummember * 2
        d.strmember = "passByref_refType"
      End Sub
      Public Sub passByref_refType_modifyvarialble(ByRef d As demo)
        d = New demo(d.nummember * 2, "passByref_refType_modifyvarialble")
      End Sub
    End Class
    Public Class demo
      Private _strmember As String = String.Empty
      Private _nummember As Integer = 0
      Public Sub New(ByVal num As Integer, ByVal str As String)
        _strmember = str
        _nummember = num
      End Sub
      Public Property strmember() As String
        Get
          Return _strmember
        End Get
        Set(ByVal value As String)
          _strmember = value
        End Set
      End Property
      Public Property nummember() As Integer
        Get
          Return _nummember
        End Get
        Set(ByVal value As Integer)
          _nummember = value
        End Set
      End Property
    End Class
    
    

     

     

    İlişkili bir Forum konusu :

    http://social.msdn.microsoft.com/Forums/en-US/vblanguage/thread/2b8825b6-d522-4d8e-83a9-d664d740570b/


    Emre Günertürk, MSFT
    Microsoft bu servisi kullanıcılarına teknik destek verme,Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi gibi bir sorumluluk üstlenildiği anlamına gelmez.
  • 04 Ekim 2010 Pazartesi 12:16
    Moderatör
     
      Kod İçerir
     

    Var olan bir kontrolden (user control/kullanıcı tanımlı kontrol) nasıl kalıtım alınır ve bu kontrolü toolbox'a eklenir?

     

    İşte adımlar :

     

    Adım 1 : Windows Forms kontrollerinden kalıtım alan kendi kontrollerinizi oluşturun. ( Örneğin Button,Label vb. )

     

    File -> New -> Project -> Windows Forms Control Library

    Kod sayfasına girip kalıtım alınan sınıfı kendi isteğinize göre değiştirin.

     

    Public Class UserControl1
      Inherits System.Windows.Forms.Button
    End Class
    

    Kullanacak olduğunuz her metodu veya özelliği bu sınıf içerisinde gerçekleyebilirsiniz.

    Projeyi derleyin ve bir dll dosyası haline getirin.

     

    Detaylı Bilgi :

     Var olan Windows Forms Kontrollerinden kalıtım alma?

    http://msdn2.microsoft.com/en-us/library/7h62478z.aspx

     

    Adım 2 : Kalıtım almış olan kontrolü toolbox'a eklemek.

     

    ToolBox'a sağ tıklayın -> Choose Item -> .NET Framework Components -> Browse butonuna tıklayıp dll yi gösterin.

     

    Adım 3 : Bu aşamada kontrol toolboxta görünecektir. Artık kontrolü forma sürükleyip bırakabilir kullanmaya başlayabilirsiniz.

     

    Detaylı Bilgi :

    http://msdn.microsoft.com/en-us/library/skcysbt2.aspx

    http://msdn.microsoft.com/en-us/library/00ctb4z0.aspx

    http://msdn.microsoft.com/en-us/library/7h62478z.aspx


    Emre Günertürk, MSFT
    Microsoft bu servisi kullanıcılarına teknik destek verme,Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi gibi bir sorumluluk üstlenildiği anlamına gelmez.
  • 04 Ekim 2010 Pazartesi 12:18
    Moderatör
     
     
     

    Nasıl DLL (Dynamic-link Library)gibi bir .NET bileşeni yaratılır ve bu farklı ortamlarda kullanılır?

     

     

    Bir .NET bileşeni çalıştırılabilir özel bir bileşen olup .NET projesinden elde edilir. Bu bileşenler kullanıcılara programlanabilir bir arayüz sunarlar.  .NET bileşeni oluşturmak için izlenecek adımlar aşağıdaki gibidir :

     

    1. Yeni bir Class Library projesi oluşturun.
    2. Bu sınıfın özelliklerini dışarıya açmak için public olarak tanımlayacağınız özellikler ve metodlar tanımlayın. (Bkz. Access Modifiers)
    3. Bu Class Library projesini DLL olarak derleyin (build).

     

    Derleme bittikten sonra bu DLL yi referans eden uygulamalar DLL içerisindeki servisleri kullanabilirler. Takip eden bağlantıda bu konuyla ilgili detaylı bilgiyi bulabilirsiniz.

     

    http://msdn.microsoft.com/en-us/library/ms973807.aspx

     

    İlişkili forum konusu :

    http://social.msdn.microsoft.com/forums/en-US/Vsexpressvb/thread/dd8db77e-e82c-47da-af6b-1b60dff3037a/


    Emre Günertürk, MSFT
    Microsoft bu servisi kullanıcılarına teknik destek verme,Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi gibi bir sorumluluk üstlenildiği anlamına gelmez.
  • 04 Ekim 2010 Pazartesi 12:23
    Moderatör
     
     
     

    Windows Forms uygulamalarının performansı nasıl artırılır?

     

    Bir Windows Forms uygulamasının çalışma performansının düştüğünü düşünüyorsanız takip eden linkteki makaleden bazı pratik ipucular edinebilirsiniz.

    http://msdn.microsoft.com/en-us/magazine/cc163630.aspx

     

    • Uygulamanın açılma süresinin optimize edilmesi,
    • Kontrollerin oluşturulması ve yerleştirilmesinin senkronizasyonu,
    • Çizim performansının geliştirilmesi,
    • Metin ve resimlerin görüntülenmesi,
    • Kaynakların etkin kullanımı,

     

    Genel olarak bir worker thread (BackgroundWorker sınıfı) kullanarak zaman alacak işlemlerin arkaplanda işlemesi sağlanabilir. Ayrıca artık kullanılmayacak nesnelerin zamanında bırakılması sayesinde toplam bellek ve işlemci gereksinimleri minimuma indirilerek diğer işlemler için kaynak yaratılabilir.

     

    İlişkili bir forum konusu :

    http://social.msdn.microsoft.com/Forums/en-US/vblanguage/thread/abbc2b6b-7161-4c91-a028-aaddf82b180c/


    Emre Günertürk, MSFT
    Microsoft bu servisi kullanıcılarına teknik destek verme,Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi gibi bir sorumluluk üstlenildiği anlamına gelmez.
  • 04 Ekim 2010 Pazartesi 12:25
    Moderatör
     
     
     

    Bir Windows uygulaması nasıl yerelleştirilir?

     

    Bu işlem için yerelleştirilmiş kaynak dosyalarının proje içerisine gömülmüş olması gerekir. Daha sonra derleyici her bir yerelleştirilmiş kaynak dosyası için uydu derlemeler denen yapılar kullanarak bu dosyaları derler. Bu uydu derlemeler yalnızca yerelleştirme işlemi yapan kaynak dosyalarını içerirler. Ortak Dil Çalışma Platformu (CLR) CurrentUICulture özelliğini baz alarak doğru uydu derlemeyi yükler ve böylece yerelleştirilme gerçekleştirilmiş olur.

     

    Visual Studio proje sistemi Windows Forms uygulamalarının yerelleştirilebilmesi için önemli bir destek sağlamaktadır. Visual Studio geliştirme ortamı kullanarak kaynak dosyalarını oluşturmak için 2 farklı yol vardır : birincisi form üzerinde metin veya resim dosyaları gibi yerelleştirilebilir arayüz elementleri için kaynak dosyaların proje sistemi tarafından oluşturulması ve bu sayede kaynak dosyaların uydu derlemeler haline getirilmesi,ikincisi ise projeye bir Resource File Template ekleyerek bu hazır şablon üzerinde XML Designer kullanarak özelleştirme yapılmasıdır. İkincisinin yapılmasındaki getiri ise dialog kutularında veya hata mesajlarında gösterilecek içeriğin de yerelleştirilebilmesidir.

     

    Windows Forms uygulamalarının yerelleştirilmesi konusunda daha detaylı bilgi edinmek isterseniz takip eden linklerdeki makaleleri inceleyebilirsiniz.

     

    Windows Forms uygulamalarının yerelleştirilmesi :

    http://msdn.microsoft.com/en-us/library/y99d1cd3.aspx

     

    Kaynak Dosyaları ve Yerelleştirme :

    http://msdn.microsoft.com/en-us/magazine/cc163609.aspx

     

    İlişkili bir forum konusu :

    http://social.msdn.microsoft.com/Forums/en-US/vblanguage/thread/a636d2c4-7753-4a98-9bf9-41b3f90ef9d1/


    Emre Günertürk, MSFT
    Microsoft bu servisi kullanıcılarına teknik destek verme,Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi gibi bir sorumluluk üstlenildiği anlamına gelmez.
  • 04 Ekim 2010 Pazartesi 12:31
    Moderatör
     
      Kod İçerir
     

    VB.NET projesinde multithreading özelliği doğru şekilde nasıl uygulanır?

     

     

    .NET uygulamaları çoklu görevleri multi threading (her görev için ayrı iş yolu kullanılabilmesi) kullanarak eşzamanlı olarak gerçekleştirebilirler. Bu sayede uygulamaların performansı artar ve yanıt verme sürelerinde azalmalar olur.Genel olarak  MultiThreading yaparken dikkat etmemiz gereken bazı noktalar aşağıdadır :

     

    • BackgroundWorker sınıfının kullanılması. Bu sınıf .NET Framework 2.0 tarafından sağlanır. Bu sınıfla birlikte bir işlemi ayrık bir thread ile işletebilirsiniz. Konunun sonunda bulacağınız linkte detaylı bilgi ve kod örnekleri bulunan bir MSDN dokümanı bulunmaktadır.

     

    • Uygulama içerisindeki thread'ler arasında verilerin paylaşımı. Verilerin bozulmaması için Thread senkronizasyonunun sağlanması gerekir.

     

    • Hata ayıklama. Thread fonksiyonlarındaki hataların giderilmemesi durumunda bu hatalar ana thread'in çalışmasını durdurabilir.

     

    • Asenkron metod kullanımı. Asenkron metodların kullanılması CLR (Ortak Dil Çalışma Platformu) tarafından sağlanan bir özelliktir. CLR bu mekanizmayı bir iş kuyruğu mantığıyla gerçekler. Metod parametrelerini paketler ve metod adresini işaret edecek bir kuyruğa atar. CLR bu kuyruktaki her işlem talebi için toplamda tek bir thread havuzuna sahiptir.

     

    Bir .NET uygulamasında delegate nesneleri sayesinde asenkron metodları kullanabilirsiniz. Kullanımını görmek için takip eden kod örneğini inceleyebilirsiniz.

     

     

    Asenkron metod çağrılması ile ilgili olarak takip eden makaleleri gözden geçirin:

    1. .NET Delegate kavramı :  .NET ortamında asenkron metod çağrılması:

      http://msdn.microsoft.com/en-us/magazine/cc301332.aspx

       

    2. Asenkron metod çağrılması

                     http://www.codeproject.com/KB/cs/AsyncMethodInvocation.aspx

     

    Imports System.Runtime.Remoting.Messaging
    
    Public Class Form1
    
    Public Delegate Function operationdelegate(ByVal num1 As Integer, ByVal num2 As Integer) As Integer
      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim obj As New demo1
        Dim num1 As Integer = 111
        Dim num2 As Integer = 124
        Dim del As operationdelegate
        del = New operationdelegate(AddressOf obj.add)
        del.BeginInvoke(num1, num2, AddressOf Oncallback, Nothing)
        del = New operationdelegate(AddressOf obj.subtract)
        MessageBox.Show(del.Invoke(num1, num2).ToString)
    End Sub
    
    Private Sub Oncallback(ByVal asynresult As IAsyncResult)
        Dim result As Integer = 0
        Dim obj As AsyncResult = CType(asynresult, AsyncResult)
        Dim c As operationdelegate = CType(obj.AsyncDelegate, operationdelegate)
        result = c.EndInvoke(asynresult)
        MessageBox.Show(result.ToString)
    End Sub
    
    End Class
    
    Public Class demo1
    
    Public Function add(ByVal num1 As Integer, ByVal num2 As Integer) As Integer
        Return num1 + num2
    End Function
    
    Public Function subtract(ByVal num1 As Integer, ByVal num2 As Integer) As Integer
        Return num1 - num2
    End Function
    
    End Class
    
    

     

     

    VB.NET ile multithreading kullanımı hakkında daha fazla bilgi için linkteki MSDN dokümanını inceleyebilirsiniz.

    http://msdn.microsoft.com/en-us/library/eed6swsx.aspx

     

    İlgili forum konuları :

    http://social.msdn.microsoft.com/forums/en-US/vbgeneral/thread/904de128-4dca-4a18-a48f-048e4761bd44/
    http://social.msdn.microsoft.com/Forums/en-US/vblanguage/thread/58a35975-2a71-4adc-86dd-5fc9d4605717/
    http://social.msdn.microsoft.com/forums/en-US/Vsexpressvb/thread/6e84ea77-a77c-4e05-a641-ffd8866d3f94/
    http://social.msdn.microsoft.com/forums/en-US/Vsexpressvb/thread/e1d8d23e-753d-48f7-b350-87832e0b95d6/


    Emre Günertürk, MSFT
    Microsoft bu servisi kullanıcılarına teknik destek verme,Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi gibi bir sorumluluk üstlenildiği anlamına gelmez.
  • 04 Ekim 2010 Pazartesi 12:34
    Moderatör
     
      Kod İçerir
     

    Standart bir I/O (Giriş-Çıkış) işlemi nasıl yönlendirilir?

     

    Bu işlem için Process sınıfını kullanmalı ve bu sınıfın StandardInput ve StandardOutput özelliklerini ayarlamalısınız. Aşağıdaki örneğe bir göz atın :

     

    Imports System.IO
    Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim p As New Process()
        Dim sw As StreamWriter
        Dim sr As StreamReader
        Dim err As StreamReader
        Dim psI As New ProcessStartInfo("cmd")
        psI.UseShellExecute = False
        psI.RedirectStandardInput = True
        psI.RedirectStandardOutput = True
        psI.RedirectStandardError = True
        psI.CreateNoWindow = True
        p.StartInfo = psI
        p.Start()
        sw = p.StandardInput
        sr = p.StandardOutput
        err = p.StandardError
        sw.AutoFlush = True
        If TextBox3.Text <> "" Then
          sw.WriteLine(TextBox3.Text)
        Else
          'default işlemin yapılması
          sw.WriteLine("dir \")
        End If
        sw.Close()
        TextBox1.Text = sr.ReadToEnd()
        TextBox1.Text += err.ReadToEnd()
      End Sub
    End Class 
    

     

    Detaylı bilgiyi takip eden linklerden edinebilirsiniz :

    http://social.msdn.microsoft.com/forums/en-US/Vsexpressvb/thread/62acea83-236b-4f55-8eec-25d80df5df66/
    http://www.c-sharpcorner.com/UploadFile/edwinlima/SystemDiagnosticProcess12052005035444AM/SystemDiagnosticProcess.aspx


    Emre Günertürk, MSFT
    Microsoft bu servisi kullanıcılarına teknik destek verme,Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi gibi bir sorumluluk üstlenildiği anlamına gelmez.
  • 04 Ekim 2010 Pazartesi 12:45
    Moderatör
     
      Kod İçerir
     

    Seri COM Port haberleşmesi nasıl gerçekleştirilir?

     

    Seri COM Port üzerinden haberleşmeyi sağlamak için SerialPort sınıfını kullanabilirsiniz.  Bu sınıf bir seri port kaynağını temsil eder. Ayrıca senkronize-olay güdümlü I/O sağlar,seri  sürücülere erişimi olanaklı kılar. Bu sınıfı kullanarak bir seri port dosya kaynağını kontrol edebiliriz.

     

    Kod örneğinde Seri Port'tan veri alınır ve bu veri kullanıcı arayüzü kontrollerinde gösterilir.

     

    Ön gereksinimler : Form1 üzerinde SerialPort1 ve TextBox1

     

    Public Class Form1
     
      Dim inputData As String = ""
      Public Event DataReceived As IO.Ports.SerialDataReceivedEventHandler
     
      Private Sub Form1_Load(ByVal sender As System.Object, _
              ByVal e As System.EventArgs) Handles MyBase.Load
        'Özellikler için değerlerin atanması
        SerialPort1.PortName = "COM1"
        SerialPort1.BaudRate = 9600
        SerialPort1.Parity = IO.Ports.Parity.None
        SerialPort1.DataBits = 8
        SerialPort1.StopBits = IO.Ports.StopBits.One
        SerialPort1.Handshake = IO.Ports.Handshake.None
        SerialPort1.RtsEnable = True
     
        ' Seri portun açılması
        SerialPort1.Open()
     
        'Seri Port'un çıkış tamponuna verinin yazılması
        If SerialPort1.IsOpen = True Then
          SerialPort1.Write("MicroCommand")
        End If
      End Sub
     
      ' Seri porttan verinin alınması
      Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, _
               ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) _
               Handles SerialPort1.DataReceived
        inputData = SerialPort1.ReadExisting 
        Me.Invoke(New EventHandler(AddressOf DoUpdate))
      End Sub
     
      'Alınan verinin kontrollerde gösterilmesi
      Public Sub DoUpdate()
        TextBox1.Text = TextBox1.Text & inputData
      End Sub
     
      Private Sub Form1_FormClosed(ByVal sender As System.Object, _
              ByVal e As System.Windows.Forms.FormClosedEventArgs) _
              Handles MyBase.FormClosed
        ' Seri Portu kapatmak
        SerialPort1.Close()
      End Sub
     
    End Class
    
    

     

     

    Not :

    http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.datareceived.aspx

    DataReceived olayı Seri Port'tan veri aldınığı anda ikinci bir thread tarafından çalıştırılmıştır. Bu olay ana thread tarafından değil de ikinci bir thread tarafından çalıştırıldığından bu ikinci thread'in  ana thread kontrollerine vb ulaşması ve bunlar üzerinde değişiklik yapması olasıdır. Eğer ana thread elementleri üzerinde değişiklik yapılması gerçekten gerekliyse Control.Invoke metodunu kullanarak bu değişiklik isteklerini geri çevirerek işlerin hangi thread tarafından yapılacağı ayarlanabilir.

     

    System.IO.Ports.SerialPort Sınıfı üyeleri için (özellikler,metodlar,olaylar vb.)

    http://msdn.microsoft.com/en-us/library/system.io.ports.serialport_members.aspx

     

    Konu hakkında daha detaylı bilgi için :

    http://www.innovatic.dk/knowledg/SerialCOM/SerialCOM.htm

     

    İlişkili forum konuları ve kod örnekleri :

    http://social.msdn.microsoft.com/Forums/en/vblanguage/thread/c9fef85f-949f-4f5f-8639-26205607fbce/
    http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/62ddb9a4-fe79-43bd-b43e-de2af7aeb039
    http://social.msdn.microsoft.com/Forums/en-US/vblanguage/thread/479ba2a6-10a7-47a1-baa2-ed0a4d837354/

     


    Emre Günertürk, MSFT
    Microsoft bu servisi kullanıcılarına teknik destek verme,Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi gibi bir sorumluluk üstlenildiği anlamına gelmez.
  • 04 Ekim 2010 Pazartesi 12:57
    Moderatör
     
      Kod İçerir
     

    Herhangi bir dosya uzantısı uygulamayla nasıl ilişkilendirilir?

     

     

    Bütün dosya tipi - uygulama ilişkilendirmeleri kayıt defterinde tutulur.

    Kendi uygulamanızla ilişkilendirecek bir dosya uzantısı oluşturmak istediğinizde kayıt defterine gerekli kaydın girilmesi gerekir.

     

    Örneğin ".Merhaba" uzantılı bir dosya uzantısı oluşturmak için :

     

    My.Computer.Registry.ClassesRoot.CreateSubKey(".Merhaba").SetValue("", _
         "Merhaba", Microsoft.Win32.RegistryValueKind.String)   
    My.Computer.Registry.ClassesRoot.CreateSubKey("Merhaba\shell\open\command").SetValue("", _
         Application.ExecutablePath & " ""%l"" ", Microsoft.Win32.RegistryValueKind.String)
    
    

     

    Yukarıdaki kod parçasının açıklaması:

     

    Kod

    Yaptığı iş

     

    CreateSubKey(".Merhaba")

    .Merhaba Dosya uzantısı için bir kayıt defteri girdisi oluşturur.

     

    .SetValue("", "Merhaba"...

    •  
      1. "" (veya Nothing) kayıt defteri girdisi için varsayılan değeri atar.
      2. "Merhaba"  hangi kayıt defteri girdisinin .Merhaba uzantısı ile ilgili bilgi içerdiğini gösterir.

     

    CreateSubKey("Hello" & _ "\shell\open\command")

    Bu parçacık ise "Merhaba" alt anahtarını ve "store\open\command" alt anahtarını oluşturur .Bu bilgiler dosya tipini açacak uygulamanın dizin bilgisini tutar.

     

    .SetValue("", Application.ExecutablePath & _ " ""%l"" ",...

    •  
      1. "" (veya Nothing) kayıt defteri girdisi için varsayılan değeri atar.
      2. Application.ExecutablePath bu dosya tipi ile şu anda çalışan programın ilişkilendirilmesini yapar.
      3. ""%1"" değeri ise açılan dosyanın lokasyonunu sizin programınıza gönderir.  Kesme işaretleri opsiyoneldir ancak birden fazla parametre kullanacaksanız her parametrenin etrafına koymalısınız.

     

    Detaylı bilgiye ve demo uygulamaya takip eden linkten ulaşabilirsiniz :

    http://www.codeproject.com/useritems/VBFileAssociation.asp

     

     

    Ayrıca manuel olarak Windows Explorer kullanarak dosya uzantıları programlarla ilişkilendirilebilir. Varsayılan programlar -> Dosya türü veya protokolü bir programla ilişkilendirin seçeneği ile bu işlemi gerçekleştirebilirsiniz.

     

     

    İlişkili forum konusu :

    http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/4d8760c9-b2c9-4016-b75e-1b3189b0c30b/


    Emre Günertürk, MSFT
    Microsoft bu servisi kullanıcılarına teknik destek verme,Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi gibi bir sorumluluk üstlenildiği anlamına gelmez.
  • 04 Ekim 2010 Pazartesi 13:01
    Moderatör
     
      Kod İçerir
     

    Bir Flash dosyası (swf) Windows Form uygulamasına nasıl gömülür ve bu dosya nasıl oynatılır?

     

    Bir Flash dosyasını (.swf) Windows Forms uygulamasında oynatabilmek için iki seçeneğiniz vardır :

     

    1. AxWebBrowser bileşenini kullanmak

     

    ToolBox'a sağ tık -> Choose Items -> COM Tab -> Microsoft Web Browser

    Bu işlemin ardından Microsoft Web Browser kontrolü ToolBox'ta görünecektir. Sürükle-bırak yöntemiyle forma bu kontrolü bırakın ve .swf dosyasıyla ilişkilendirin.

     

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       Me.AxWebBrowser1.Navigate("D:\flash.swf")
    End Sub
    
    

     

    İlişkili forum konusu :

    http://social.msdn.microsoft.com/forums/en-US/winforms/thread/d5fb9152-4d88-443c-958f-7dd5aa29de7e/

     

       2.Shockwave Flash nesnesini kullanmak

     

    Öncelikle Adobe Flash Player'ın sisteminizde kurulu olduğundan emin olun.

    ToolBox'a sağ tık -> Choose Items -> COM Tab -> Shockwave Flash Object

    Bu işlemin ardından Shockwave Flash Object adındaki kontrol ToolBox'ta görünecektir.Sürükle-bırak yöntemiyle forma bu kontrolü bırakın ve .swf dosyasıyla ilişkilendirin.

     

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       Me.AxShockwaveFlash1.Movie = "D:\flash.swf"
    End Sub
    
    

     

    İlişkili forum konusu :

    http://social.msdn.microsoft.com/forums/en-US/Vsexpressvb/thread/55ed8641-e93b-4c2a-94e9-67081f0a6148/


    Emre Günertürk, MSFT
    Microsoft bu servisi kullanıcılarına teknik destek verme,Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi gibi bir sorumluluk üstlenildiği anlamına gelmez.
  • 04 Ekim 2010 Pazartesi 13:07
    Moderatör
     
      Kod İçerir
     

    VB.NET ile ses veya video dosyalarını nasıl oynatılır?

     

     

    4 farklı yaklaşımla bu soruyu cevaplandırabiliriz :

     

                 1.Microsoft.DirectX.AudioVideoPlayback bileşenini kullanmak

     

    Öncelikle DirectX SDK (Software Development Kit) sisteminizde kurulu olmalıdır.

    DirectX 9.0c Redistributable
    DirectX 9.0 SDK Update

     

    Daha sonra Microsoft.DirectX.AudioVideoPlayback.dll dosyasını projenize referans olarak eklemelisiniz.

     

    Aşağıdaki kod parçasını kullanarak arka planda ses oynatabilirsiniz :

     

    Imports Microsoft.DirectX.AudioVideoPlayback  
    Public Class Form1
      Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim audioFile As Audio = New Audio("D:\MyMusic.mid")
        audioFile.Play()
      End Sub
    End Class
    
    

     

    İlişkili forum konusu :

    http://social.msdn.microsoft.com/forums/en-US/Vsexpressvb/thread/caf245b9-a7f9-42b1-9276-f8dfc1e21591/

     

    Aşağıdaki kod parçasını kullanarak bir panel yardımıyla video oynatabilirsiniz :

     

    Imports Microsoft.DirectX.AudioVideoPlayback  
    Public Class Form1
      Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim videoFile As Audio = New Audio("D:\Video1.avi")
        videoFile.Owner = Panel1
        videoFile.Play()
      End Sub
    End Class
    
    

     

    Demo :

    Playing AVI Files using DirectX 9 with C# and .NET

     

    İlişkili forum konusu :

    http://social.msdn.microsoft.com/forums/en-US/Vsexpressvb/thread/439d66c4-056d-4b84-a371-77d225355439/

     

                2.Windows Media Player kontrolünü kullanmak

     

    ToolBox'a sağ tık -> Choose Items -> COM Tab ->  Microsoft Media Player ActiveX kontrolünü bulup ekliyoruz.

    Bu işlemin ardındanWindows Media Player kontrolü ToolBox'ta görünecektir.Sürükle-bırak yöntemiyle forma bu kontrolü bırakın ve ses veya video dosyasının url bilgisini kontrole verin.

     

    AxWindowsMediaPlayer1.URL = "D:\VideoOrAudio.wmv"
    
    

     

    Media Player kontrolü otomatik olarak gösterdiğiniz dosyayı oynatacaktır.

     

    İlişkili forum konusu :

    http://social.msdn.microsoft.com/forums/en-US/vblanguage/thread/7895f313-e196-4059-8924-2d58a71bb13b/

     

                3.RealPlayer ActiveX kontrolünü kullanmak

     

    Benzer olarak Com bileşeni olarak toolbox'a eklediğiniz RealPlayer ActiveX Control'ü sürükleyip forma bırakın. Daha sonra bu kontrolün "source" özelliğine ses/video dosyasının bulunduğu dizin bilgisini girmelisiniz.

     

    AxRealAudio1.Source = "D:\VideoOrAudio.wmv"
    AxRealAudio1.AutoStart = True
    
    

     

    İlişkili forum konusu :

     

    http://social.msdn.microsoft.com/forums/en-US/vbgeneral/thread/e3fff97d-f6e0-4ac2-b7c9-ccf7cbe7f38c/

     

                4.My.Computer.Audio.Play metodunu kullanmak

     

    Bu yol daha kolay görünebilir ancak sadece wav dosyalarını oynatabilir.

     

    My.Computer.Audio.Play("C:\audio.wav", AudioPlayMode.Background)
    My.Computer.Audio.Stop()
    
    

    Emre Günertürk, MSFT
    Microsoft bu servisi kullanıcılarına teknik destek verme,Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi gibi bir sorumluluk üstlenildiği anlamına gelmez.
  • 04 Ekim 2010 Pazartesi 13:12
    Moderatör
     
      Kod İçerir
     

    VB.NET kullanarak bir web sayfası nasıl kaydedilir?

     

     

     

    3 Farklı yaklaşımla bu soruyu cevaplandırabiliriz :

     

                   1.System.Net.WebClient sınıfını kullanarak sayfayı direk olarak .html dosyası olarak kaydedebilirsiniz.

     

    Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, _
                ByVal e As System.EventArgs) Handles Button1.Click
        Dim myWebClient As New System.Net.WebClient
        myWebClient.DownloadFile("http://forums.microsoft.com/MSDN/default.aspx", _
                "C:\msdn.html")
      End Sub
    End Class
    
    

            

                2.ADODB (ActiveX Data Objects for DataBase) veya CDO (Collaboration Data Objects) bileşenlerini kullanarak tüm web sayfasını .mht dosyası olarak kaydedebilirsiniz.

    İlk olarak "Microsoft CDO For Windows 2000 Library" ve "Microsoft ActiveX Data Objects 2.5 Library" kütüphanelerini Project -> Add Reference -> COM yolunu kullanarak referans etmelisiniz.

     

    Imports ADODB
    Imports CDO
    Public Class Form1
    
    Private Sub Button1_Click(ByVal sender As System.Object, _
                ByVal e As System.EventArgs) Handles Button1.Click
        SavePage("http://forums.microsoft.com/MSDN/default.aspx", "C:\msdn.mht")
      End Sub
    
    Private Sub SavePage(ByVal Url As String, ByVal FilePath As String)
        Dim iMessage As CDO.Message = New CDO.Message
        iMessage.CreateMHTMLBody(Url, _
        CDO.CdoMHTMLFlags.cdoSuppressNone, "", "")
        Dim adodbstream As ADODB.Stream = New ADODB.Stream
        adodbstream.Type = ADODB.StreamTypeEnum.adTypeText
        adodbstream.Charset = "US-ASCII"
        adodbstream.Open()
        iMessage.DataSource.SaveToObject(adodbstream, "_Stream")
        adodbstream.SaveToFile(FilePath, _
             ADODB.SaveOptionsEnum.adSaveCreateOverWrite)
      End Sub
    
    End Class
    
    

     

    İlişkili forum konusu :

    http://social.msdn.microsoft.com/forums/en-US/Vsexpressvb/thread/c09c132c-5046-42f1-b1f8-11a5d16f458c/

     

     

               3.Bir web sayfasının içeriğini WebBrowser kontrolünü kullanarak kaydedebilirsiniz.

     

     

    Public Class Form1
    
    Private Sub Form1_Load(ByVal sender As System.Object, _
                ByVal e As System.EventArgs) Handles MyBase.Load
        WebBrowser1.Navigate("http://forums.microsoft.com/MSDN/default.aspx")
      End Sub
    
    Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, _
                ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) _
                Handles WebBrowser1.DocumentCompleted
        ' Tüm .html sayfasının .html formatında kaydedilmesi
        Dim MSDNpage As String = WebBrowser1.DocumentText
        My.Computer.FileSystem.WriteAllText("C:\msdn1.html", MSDNpage, True)
        ' Body nesnesi içeriğinin metin dosyasına kaydedilmesi
        Dim MSDNpage As String = WebBrowser1.Document.Body.InnerText
        My.Computer.FileSystem.WriteAllText("C:\msdn2.txt", MSDNpage, True)
      End Sub
    
    End Class
    
    

     


    Emre Günertürk, MSFT
    Microsoft bu servisi kullanıcılarına teknik destek verme,Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi gibi bir sorumluluk üstlenildiği anlamına gelmez.
  • 04 Ekim 2010 Pazartesi 13:16
    Moderatör
     
     
     

    VB.NET Formunda herhangi bir Office dokümanı(Word-Excel vb) nasıl açılır/gösterilir?

     

    Visual Basic .NET bir forma Office dokümanı gömmek için herhangi bir  OLE (Object Linking and Embedding) kontrolü sunmaz. Ancak aşağıdaki 2 yöntemle Office dökümanlarınızı formlarınızda kullanabilirsiniz.

     

    1. DSOFramer.ocx adındaki Visual C++ ActiveX kontrolünü kullanarak Office dökümanlarınızı ( Word dokümanları,Powerpoint sunumları,Visio çizimleri,proje dosyaları vb) formlarınızda kullanabilirsiniz.

       

      Detaylı Bilgi :

      http://support.microsoft.com/kb/311765

      Download the DsoFramer_KB311765_x86.exe package

       

      Örnek : .NET uygulamalarında Office belgeleri barındırmak

      http://blogs.msdn.com/erikaehrli/archive/2005/08/26/hostofficeinnet.aspx

       

    2. WebBrowser kontrolünü kullanarak Office dokümanları ile çalışabilirsiniz.

     

    Detaylı Bilgi :

    http://support.microsoft.com/default.aspx?scid=kb;[LN];Q304643


    Emre Günertürk, MSFT
    Microsoft bu servisi kullanıcılarına teknik destek verme,Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi gibi bir sorumluluk üstlenildiği anlamına gelmez.
  • 04 Ekim 2010 Pazartesi 13:19
    Moderatör
     
      Kod İçerir
     

    WMI(Windows Management Instrumentation/Windows Yönetim Araçları) kullanarak bir makine üzerinde donanım bilgilerine nasıl ulaşılır?

     

    İlk olarak projenize System.Management.dll dosyasını referans olarak vermeniz ve System.Management isim alanını projenizde import etmeniz gerekir.

     

    Kod örneği : Hard disk,anakart ve CPU hakkında cihaz bilgilerinin edinilmesi

     

    Ön Gereksinimler :Form üzerinde Button1,Button2,Button3 ve ListBox1

     

    Imports System.Management
    Public Class Form1
      'Hard Disk hakkında bilgi edinilmesi
      Private Sub Button1_Click(ByVal sender As System.Object, _
                ByVal e As System.EventArgs) Handles Button1.Click
        ' Donanım model ve tipinin alınması
        Dim searcher As ManagementObjectSearcher = _
                New ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive")
        For Each wmi_HD As ManagementObject In searcher.Get()
          ListBox1.Items.Add("Model:" & vbTab & wmi_HD("Model").ToString())
          ListBox1.Items.Add("Type:" & vbTab & wmi_HD("InterfaceType").ToString())
        Next wmi_HD
    
    ' Donanım seri numarasının alınması
        searcher = New ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia")
        For Each wmi_HD As ManagementObject In searcher.Get()
          If wmi_HD("SerialNumber") Is Nothing Then
            ListBox1.Items.Add("Serial No:" & vbTab & "None")
          Else
            ListBox1.Items.Add("Serial No:" & vbTab & wmi_HD("SerialNumber").ToString())
          End If
        Next wmi_HD
      End Sub
    
    'Anakart hakkında bilgi edinilmesi
      Private Sub Button2_Click(ByVal sender As System.Object, _
                ByVal e As System.EventArgs) Handles Button2.Click
        Dim searcher As ManagementObjectSearcher = _
                New ManagementObjectSearcher("select * from Win32_BaseBoard")
        For Each oReturn As ManagementObject In searcher.Get()
          ListBox1.Items.Add( _
           "MortherBoard Serial No." & Constants.vbTab & ": " & oReturn("SerialNumber").ToString)
        Next oReturn
      End Sub
    
    'İşlemci hakkında bilgi edinilmesi
      Private Sub Button3_Click(ByVal sender As System.Object, _
                ByVal e As System.EventArgs) Handles Button3.Click
        Dim searcher As ManagementObjectSearcher = _
                New ManagementObjectSearcher("select * from Win32_Processor")
        For Each oReturn As ManagementObject In searcher.Get()
          ListBox1.Items.Add("CPU ID" & Constants.vbTab & ": " & oReturn("ProcessorId").ToString)
        Next oReturn
      End Sub
    End Class
    
    

     

    Ayrıca bu işlemler için WMI Kod Geliştiricisi aracını da çok faydalı bulabilirsiniz.

    http://www.microsoft.com/downloads/details.aspx?familyid=2CC30A64-EA15-4661-8DA4-55BBC145C30E&displaylang=en  

     

     

    WMI Kod Geliştiricisi aracı VBScript,C# ve VB.NET kodlarını kullanarak veri Yönetimi veya olay bildirimleri gibi yönetim görevlerini de yapabilir.

     

    İlişkili forum konuları :

    http://social.msdn.microsoft.com/forums/en-US/Vsexpressvb/thread/f393708f-d7e3-4aa3-a624-7e8c6662f343/
    http://social.msdn.microsoft.com/Forums/en/vbgeneral/thread/8724deae-d9d9-4cd9-829b-ef4eefcb4617/


    Emre Günertürk, MSFT
    Microsoft bu servisi kullanıcılarına teknik destek verme,Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi gibi bir sorumluluk üstlenildiği anlamına gelmez.
  • 04 Ekim 2010 Pazartesi 13:22
    Moderatör
     
      Kod İçerir
     

    Sırasıyla bir PictureBox ve Image kontrolleri kullaranak nasıl resim çizilir?

     

     

    Bu işlemde yapılması gereken en önemli şey doğru Graphics nesnesini bulmaktır.

     

    Ön Gereksinimler : Form üzerinde PictureBox1,Button1 ve Button2

     

    Public Class Form1
      Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        PictureBox1.Image = Image.FromFile("D:\VBproject\2.jpg")
      End Sub
    
    'PictureBox kontrolüne resim çizmek
      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim newImage As Image = Image.FromFile("D:\VBproject\1.jpg")
        Dim g As Graphics = Me.PictureBox1.CreateGraphics
        g.DrawImage(newImage, New Rectangle(10, 10, 200, 200))
      End Sub
    
    'PictureBox.Image özelliğine resmi vermek
      Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim newImage As Image = Image.FromFile("D:\VBproject\1.jpg")
        Dim g As Graphics = Graphics.FromImage(PictureBox1.Image)
        g.DrawImage(newImage, New Rectangle(10, 10, 200, 200))
        PictureBox1.Refresh()
      End Sub
    End Class
    
    

     

    İlişkili forum konusu :

    http://social.msdn.microsoft.com/forums/en-US/vbgeneral/thread/7c7ee412-703e-46d8-84c7-b3f91dfefdc7/


    Emre Günertürk, MSFT
    Microsoft bu servisi kullanıcılarına teknik destek verme,Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi gibi bir sorumluluk üstlenildiği anlamına gelmez.
  • 04 Ekim 2010 Pazartesi 13:24
    Moderatör
     
      Kod İçerir
     

    Bir resim nesnesi ile byte türünden bir dizi arasında nasıl dönüşüm yapılır?

     

     

    MemoryStream sınıfını kullanarak resim nesnesi ve Byte dizisi arasında dönüşüm yapabilirsiniz.

     

    Imports System.IO
    Public Class Form1
      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim myImage As Image = Image.FromFile("D:\1.jpg")
        Dim imgByteArray As Byte() = Nothing
    
    'Resimden byte dizisine  
        Dim imgMemoryStream As MemoryStream = New MemoryStream()
        myImage.Save(imgMemoryStream, System.Drawing.Imaging.ImageFormat.Jpeg)
        imgByteArray = imgMemoryStream.GetBuffer()
    
    'Byte dizisinden resim nesnesine  
        imgMemoryStream = New MemoryStream(imgByteArray)
        myImage = Drawing.Image.FromStream(imgMemoryStream)
    
    End Sub
    End Class
    
    

    Emre Günertürk, MSFT
    Microsoft bu servisi kullanıcılarına teknik destek verme,Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi gibi bir sorumluluk üstlenildiği anlamına gelmez.
  • 04 Ekim 2010 Pazartesi 13:25
    Moderatör
     
      Kod İçerir
     

    Bir resmi aynı ölçekte nasıl yeniden boyutlandırılır?

     

    Bu soru için kullandığımız mantık yeni boyutta bir Bitmap nesnesi oluşturmak ve orjinal Bitmap nesnesinin içeriğini yeni olana çizmek.

     

    Ön Gereksinimler : Form üzerinde Button1, PictureBox1 ve PictureBox2

     

    Public Class Form1
      Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        PictureBox1.ImageLocation = "D:\mm.jpg"
        PictureBox2.ImageLocation = "D:\mmm.jpg"
      End Sub
    
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        resizeImage(PictureBox1.ImageLocation, PictureBox1)
        resizeImage(PictureBox2.ImageLocation, PictureBox2)
      End Sub
    
    Public Sub resizeImage(ByVal imgPath As String, ByVal picbox As PictureBox)
            Dim bm_source As Bitmap = New Bitmap(imgPath)
         
        Dim scale As Double = bm_source.Height / bm_source.Width
         
        Dim bm_dest As New Bitmap(CInt(picbox.Width), CInt(picbox.Width * scale))
          
        Dim gr_dest As Graphics = Graphics.FromImage(bm_dest)
            gr_dest.DrawImage(bm_source, 0, 0, bm_dest.Width + 1, bm_dest.Height + 1)
            picbox.Image = bm_dest
      End Sub
    End Class
    
    

     

    İlişkili forum konusu :

    http://social.msdn.microsoft.com/forums/en-US/vbide/thread/69bae6d7-eb4e-49cd-b078-704a028e9318


    Emre Günertürk, MSFT
    Microsoft bu servisi kullanıcılarına teknik destek verme,Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi gibi bir sorumluluk üstlenildiği anlamına gelmez.
  • 04 Ekim 2010 Pazartesi 13:29
    Moderatör
     
      Kod İçerir
     

    VB.NET kullanarak Windows Form uygulamasında nasıl Cursor(Fare İmleci) oluşturulur ve özelleştirilir?

     

     

    .NET uygulamalarında Form'un imlecini Form.Cursor özelliğini bir Cursor nesnesine atayarak değiştirebiliriz. Cursor nesnesi 4 kaynaktan oluşturulabilir : özelleştirilmiş bir Windows Handle, özelleştirilmiş bir Data Stream, özelleştirilmiş bir File Name veya özelleştirilmiş ResourceType  ve CursorName.

    Takip eden 4 kurucu fonksiyon bu kaynakların nasıl kullanılacağına dair örneklerdir :

    1. IntPtr

      http://msdn.microsoft.com/en-us/library/a5bbc3fe.aspx

    2. Stream

      http://msdn.microsoft.com/en-us/library/7x58z7ya.aspx

    3. String

      http://msdn.microsoft.com/en-us/library/kkw8k45d.aspx

    4. Type, String

    http://msdn.microsoft.com/en-us/library/kkw8k45d.aspx

     

    Bazı sistem imleçleri dizin yolu ve dosya isminin kullanılmasıyla direk olarak yüklenemezler çünkü bu imleçler yazılan kodun tanıyamayacağı formattadırlar.

    Bu durumda PInvoke kullanarak Windows API LoadCursorFromFile fonksiyonunu çağırmalıyız daha sonra ilk pattern'i kullanıp File Handler üzerinden Cursor objesini seçmeliyiz.

     

    Bu işlem için VB.NET kodu aşağıdaki gibidir :

     

    Private Declare Unicode Function LoadCursorFromFile Lib "user32.dll" Alias "LoadCursorFromFileW" (ByVal filename As String) As IntPtr
        
        Dim Iconfile As String = Application.StartupPath & "\kaycur1.ico"
        Dim curfile As String = Application.StartupPath & "\kaycursor.cur"
        Dim Anifile As String = Application.StartupPath & "\RedClockWiseCursor.ani"
        
        Public Sub animatedCur()
            If File.Exists(curfile) = True Then
                Dim hcur As IntPtr
                hcur = LoadCursorFromFile(curfile)
                Me.Cursor = New Cursor(hcur)
            Else
                Me.Cursor = System.Windows.Forms.Cursors.Default
            End If
    End Sub
    

    İlişkili forum konusu :

    http://social.msdn.microsoft.com/Forums/en-SG/vbgeneral/thread/40e42c91-0318-416e-bcbc-65668b6241ed


    Emre Günertürk, MSFT
    Microsoft bu servisi kullanıcılarına teknik destek verme,Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi gibi bir sorumluluk üstlenildiği anlamına gelmez.
  • 04 Ekim 2010 Pazartesi 13:32
    Moderatör
     
      Kod İçerir
     

    VB.NET kullanarak sistem varsayılan sistem imleci nasıl değiştirilir?

     

    Sistem imlecini modifiye edebilmek için takip eden kayıt defteri girdisi üzerinde değişiklik yapmamız gerekir.

    HKEY_CURRENT_USER\Control Panel\Cursors\

     

    Daha sonra, SystemParametersInfo adındaki Windows API yi SPI_SETCURSORS parametresiyle çağırır ve sistemi imleçleri yüklemeye zorlayabiliriz.

     

    VB.NET kodu :

     

    #Region "SystemParametersInfo"
        Declare Function SystemParametersInfo Lib "User32" Alias "SystemParametersInfoA" ( _
            ByVal uAction As Integer, _
            ByVal uparam As Integer, _
            ByVal lpvParam As IntPtr, _
            ByVal fuWinIni As Integer) As Integer
     
        Private Const SPI_SETCURSORS = &H57
        Private Const NULL_PTR = 0
    #End Region
     
        Private Sub ButtonSend_Click( ... ) Handles ButtonSend.Click
            SystemParametersInfo(SPI_SETCURSORS, 0, NULL_PTR, 0)
    End Sub
    

     

    İlişkili forum konusu :

    http://social.msdn.microsoft.com/forums/en-US/vbgeneral/thread/a0b5d97f-a9dd-448f-9a6a-fc2836f4f7df


    Emre Günertürk, MSFT
    Microsoft bu servisi kullanıcılarına teknik destek verme,Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi gibi bir sorumluluk üstlenildiği anlamına gelmez.
  • 04 Ekim 2010 Pazartesi 13:34
    Moderatör
     
      Kod İçerir
     

    Pencerelerle ilgili işlemler nasıl yapılır?

     

    Birçok Windows programlama senaryosu aşağıdaki durumları gerçekleştirmek için bir Windows Handle kullanmamızı gerektirir :

     

    1. Pencereye belirli mesajları göndermek
    2. Pencere üzerindeki metinlerin alınması/değiştirilmesi
    3. Pencereden alt sınıflar oluşturmak ve bu sayede pencere davranışlarını değiştirebilmek

    Vb,

     

    Eğer ilgilendiğiniz pencere .NET Windows Forms uygulamasındaysa bu pencereye direk olarak Control.Handle özelliğini kullanarak erişebiliriz.

    http://msdn.microsoft.com/en-us/library/system.windows.forms.control.handle(VS.80).aspx

     

     

    Eğer pencere sıradan bir pencere ise bu pencere üzerinde işlem yapabilmek için FindWindow ve FindWindowEx adlarındaki Windows API'leri çağırmalıyız.

     

    FindWindow fonksiyonu en üst seviye pencerelerin (sınıf ve pencere isimleri belirlenen stringlere uyan ve child window (çocuk pencere) olmayan) üzerinde işlem yapılmasına izin verir.

    http://msdn.microsoft.com/en-us/library/ms633499(VS.85).aspx

     

    FindWindowEx fonksiyonuyla belirtilen bir ana pencere üzerinden bu pencereden türeyen çocuk pencerelere ulaşılabilir

    http://msdn.microsoft.com/en-us/library/ms633500(VS.85).aspx

     

    Aşağıdaki kod parçası VB.NET üzerinde P/Invoke kullanarak bu iki API'nın tanımlanmasını göstermektedir.

     

    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
    Private Shared Function FindWindow( _
         ByVal lpClassName As String, _
         ByVal lpWindowName As String) As IntPtr
    End Function
     
    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
    Private Shared Function FindWindowEx(ByVal parentHandle As IntPtr, _
                          ByVal childAfter As IntPtr, _
                          ByVal lclassName As String, _
                          ByVal windowTitle As String) As IntPtr
    End Function
    
    
    
    Dim toplevelWindow as IntPtr = FindWindow(“classname”, ”windowcaption”)
    Dim childWindow as IntPtr = FindWindowEx(toplevelWindow, new IntPtr(0), “classname”, “windowcaption”)
    
    

     

     

    İlişkili forum konuları :

    http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/1a4c6def-a24b-4a72-8ce5-eaa00c6182f0/
    http://social.msdn.microsoft.com/Forums/en-US/vblanguage/thread/3ee8d5f9-b6d3-43c7-b486-dcb92b2edfea/


    Emre Günertürk, MSFT
    Microsoft bu servisi kullanıcılarına teknik destek verme,Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi gibi bir sorumluluk üstlenildiği anlamına gelmez.
  • 04 Ekim 2010 Pazartesi 13:41
    Moderatör
     
     
     

    P/Invoke nedir?

     

    Platform Invoke  Ortak Dil Çalışma platformu (CLR) tarafından sağlanan bir servistir. Bu servisi unmanaged DLL fonksiyonlarını managed kod üzerinden çağırmak için kullanırız (Win 32 fonksiyonunu çağırmak). P/Invoke hakkında daha detaylı bilgi için aşağıdaki makaleleri inceleyebilirsiniz.

     

    Interoperating with Unmanaged Code

    Marshaling between Managed and Unmanaged Code

    the tool P/Invoke Interop Assistant

    http://msdn.microsoft.com/en-us/library/aa288468(VS.71).aspx

     

    İlişkili forum konuları :

    http://social.msdn.microsoft.com/forums/en-US/Vsexpressvb/thread/4c486d10-fe8b-49da-a5f1-8054b82251ff/
    http://social.msdn.microsoft.com/forums/en-US/Vsexpressvb/thread/cc5ada5d-2549-4035-884d-60f7282b11f1/


    Emre Günertürk, MSFT
    Microsoft bu servisi kullanıcılarına teknik destek verme,Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi gibi bir sorumluluk üstlenildiği anlamına gelmez.
  • 04 Ekim 2010 Pazartesi 13:44
    Moderatör
     
      Kod İçerir
     

    VB.NET kullanarak bir kısayol tuşu nasıl belirlenir?

     

     

    Bu işlem için öncelikle sanal anahtar kodlarını bilmeniz gerekir.

     

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

     

    Daha sonra P/Invoke RegisterHotkey/UnregisterHotkey API'lerini kullanarak kısayol tuşu atayabilir atadığınız kısayol tuşlarını devre dışı bırakabilirsiniz.

     

    Kod Örneği : Alt+D ,Alt+Cgibi kısayol tuşlarının atanması

     

    Imports System.Runtime.InteropServices
    	
    Public Class Form1
    
    Public Const MOD_ALT As Integer = &H1 'Alt key
     Public Const WM_HOTKEY As Integer = &H312
    
    <DllImport("User32.dll")> _
     Public Shared Function RegisterHotKey(ByVal hwnd As IntPtr, _
       ByVal id As Integer, ByVal fsModifiers As Integer, _
       ByVal vk As Integer) As Integer
     End Function
    
    <DllImport("User32.dll")> _
     Public Shared Function UnregisterHotKey(ByVal hwnd As IntPtr, _
       ByVal id As Integer) As Integer
     End Function
    
    Private Sub Form1_Load(ByVal sender As System.Object, _
       ByVal e As System.EventArgs) Handles MyBase.Load
     RegisterHotKey(Me.Handle, 100, MOD_ALT, Keys.D)
     RegisterHotKey(Me.Handle, 200, MOD_ALT, Keys.C)
     End Sub
    
    Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
     If m.Msg = WM_HOTKEY Then
      Dim id As IntPtr = m.WParam
      Select Case (id.ToString)
      Case "100"
       MessageBox.Show("ALT+D ye bastınız")
      Case "200"
       MessageBox.Show("ALT+C ye bastınız")
      End Select
     End If
     MyBase.WndProc(m)
     End Sub
    
    Private Sub Form1_FormClosing(ByVal sender As System.Object, _
       ByVal e As System.Windows.Forms.FormClosingEventArgs) _
       Handles MyBase.FormClosing
     UnregisterHotKey(Me.Handle, 100)
     UnregisterHotKey(Me.Handle, 200)
     End Sub
    
    End Class
     

     

    İlişkili forum konusu :

    http://social.msdn.microsoft.com/forums/en-US/vbgeneral/thread/ced3b443-b295-4078-9632-afc3f0f44ac6/


    Emre Günertürk, MSFT
    Microsoft bu servisi kullanıcılarına teknik destek verme,Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi gibi bir sorumluluk üstlenildiği anlamına gelmez.
  • 04 Ekim 2010 Pazartesi 13:49
    Moderatör
     
     
     

    Mouse veya klavye hareketleri nasıl yakalanır?

     

    VB.NET kullanarak mouse ve klavye hareketlerini yakalamak için P/Invoke kullanarak SetWindowsHookEx,CallNextHookEx,UnhookWindowsHookEx ve GetModulehandle Windows API'leri çağrılmalıdır.

     

    Bu hareket yakalama prosedürünü sonlandırmak için ise UnhookWindowsHookEx fonksiyonunu kullanabiliriz. Burada parametre olarak SetWindowsHookEx fonksiyonundan alabileceğimiz Hook ID kullanılır.

     

    Bu konu hakkında Paul Kimmel'ın hazırladığı bir makale :

    http://www.developer.com/net/net/article.php/11087_2193301_1

     

    İlişkili forum konuları :

    http://social.msdn.microsoft.com/forums/en-US/Vsexpressvb/thread/dc85ffc5-90e0-484d-8031-ffb82188feb4/
    http://social.msdn.microsoft.com/forums/en-US/Vsexpressvb/thread/98c8e36f-c0ba-4eac-a679-8b1d32e73ce7/


    Emre Günertürk, MSFT
    Microsoft bu servisi kullanıcılarına teknik destek verme,Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi gibi bir sorumluluk üstlenildiği anlamına gelmez.
  • 04 Ekim 2010 Pazartesi 13:55
    Moderatör
     
     
     

    COM (Component Object Model) Interop nedir?

     

    COM Interop  Ortak Dil Çalışma platformu (CLR) tarafından sağlanan bir başka servistir.  .NET kodu ile COM bileşenlerinin kullanılmasına olanak sağlar. Bir COM bileşeni .NET Framework'ten önce bileşenin de içerildiği uygulamayı yaratır. Bu servis yönetimsel uygulamalarla (managed applications)  yönetimsel olmayan COM bileşenlerinin (unmanaged COM components) aralarındaki etkileşmeyi de sağlar.Ayrıca  kullanmış olduğumuz COM bileşenlerine ait olayları .NET uygulamasında yakalayıp gerekli işlemleri yapabiliriz.

     

    COM Interop hakkında MSDN makalesi :

     MSDN Dökümanı  

     

    İlişkili forum konusu :

    http://social.msdn.microsoft.com/forums/en-US/Vsexpressvb/thread/6a7e5672-d763-4dec-88ea-677e2548d1a7/


    Emre Günertürk, MSFT
    Microsoft bu servisi kullanıcılarına teknik destek verme,Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi gibi bir sorumluluk üstlenildiği anlamına gelmez.
  • 04 Ekim 2010 Pazartesi 14:03
    Moderatör
     
      Kod İçerir
     

    VB.NET ile VB6 dll dosyası nasıl çağrılır ve kullanılır?

     

    Adım 1 : Visual Basic 6 kullanarak bir ActiveX DLL uygulaması yaratın. Bu uygulamada bir public sınıf ve public metodlar tanımlayın. Bu sayede oluşacak olan DLL Visual Basic.NET içerisinden çağrılabilecektir. Projeyi derleyip DLL dosyasını oluşturun.

     

    Aşağıdaki makalede bu işlem bir demo uygulama ile beraber gösterilmiştir.

    http://www.vb-helper.com/howto_net_use_vb6_dll.html

     

    Bu örnekte VB6Project adında bir proje derlenmektedir. Projede MyVB6Class adında public bir sınıf ve yine public olarak tanımlanmış VB6SayHi adında bir alt program ve VB6ReturnHi adında bir fonksiyon tanımlanmıştır.

     

    Adım 2 : Hedef bilgisayarda oluşturduğunuz DLL dosyasını kayıt edin.

    Start -> Run Dialog ->  regsvr32 VB6Project.dll

     

    Adım 3 : VB.NET projenizde bu VB6 dll dosyasını referans olarak gösterin.

    VB.NET Projesinde -> Project -> AddReference ->  Com -> Bu aşamada ya dosyayı listeden bulacaksınız ya da browse deyip dizinden göstereceksiniz.

     

    Adım 4 : Bu aşamaya geldiğinizde artık VB.NET projesinden referens ettiğiniz DLL'nin public sınıflarına erişebilirsiniz.

     

    Dim vb6_class As New VB6Project.MyVB6Class
      vb6_class.VB6SayHi()
    
    

    Emre Günertürk, MSFT
    Microsoft bu servisi kullanıcılarına teknik destek verme,Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi gibi bir sorumluluk üstlenildiği anlamına gelmez.
  • 04 Ekim 2010 Pazartesi 14:06
    Moderatör
     
      Kod İçerir
     

    Office Word otomasyonu VB.NET'te nasıl gerçekleştirilir?

     

     

    Projenizde Add Reference diyerek "Microsoft Word Object Library" COM bileşenini referans olarak gösterin.

     

    Kod Örneği : Yeni bir Word dokümanı oluşturun, içerisine 3x5 lik bir tablo yerleştirin ve bu tabloya veri girin,ardından kaydedin.

     

    Imports Word = Microsoft.Office.Interop.Word
    Public Class Form1
      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim oWord As Word.Application = CreateObject("Word.Application")
            Dim oDoc As Word.Document = oWord.Documents.Add()
        oWord.Visible = True
    
        Dim r As Integer, c As Integer
        Dim oTable As Word.Table = oDoc.Tables.Add(oDoc.Bookmarks.Item("\endofdoc").Range, 3, 5)
        oTable.Range.ParagraphFormat.SpaceAfter = 6
        For r = 1 To 3
          For c = 1 To 5
            oTable.Cell(r, c).Range.Text = "Row" & r & "Col" & c
          Next
        Next
            oTable.Rows.Item(1).Range.Font.Bold = True
        oTable.Rows.Item(1).Range.Font.Italic = True
        oDoc.SaveAs("C:\myfile.doc", True)
        oDoc.Close()
        oWord.Application.Quit()
      End Sub
    End Class
    
    

     

    C:\myfile.doc dosyasının içeriği aşağıdaki gibi olacaktır :

     

    Row1Col1

    Row1Col2

    Row1Col3

    Row1Col4

    Row1Col5

    Row2Col1

    Row2Col2

    Row2Col3

    Row2Col4

    Row2Col5

    Row3Col1

    Row3Col2

    Row3Col3

    Row3Col4

    Row3Col5

     

    İlişkili forum konusu :

    http://social.msdn.microsoft.com/forums/en-US/vbgeneral/thread/6b9bdf3e-aea7-4eb3-a518-56e5108fa202/

     

    Detaylı bilgi : Yeni bir belge oluşturmak için Visual Basic .NET Word'den otomatikleştirme

    http://support.microsoft.com/kb/316383/


    Emre Günertürk, MSFT
    Microsoft bu servisi kullanıcılarına teknik destek verme,Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi gibi bir sorumluluk üstlenildiği anlamına gelmez.
  • 04 Ekim 2010 Pazartesi 14:09
    Moderatör
     
      Kod İçerir
     

    Office Excel otomasyonu VB.NET'te nasıl gerçekleştirilir?

     

    Projenizde Add Reference diyerek "Microsoft Excel Object Library" COM bileşenini referans olarak gösterin.

     

    Kod Örneği : Excel dokümanında hücre değerini alma/değiştirme.

     

    Imports Microsoft.Office.Interop.Excel
    Public Class Form1
     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     Dim oExcel As Object = CreateObject("Excel.Application")
     Dim oBook As Object = oExcel.Workbooks.Open("C:\Book1.xls")
     Dim oSheet As Object = oBook.Worksheets(1)
     'e.g. Read value in A2 cell 
     Dim cellValue As String = oSheet.Range("A2").Value
     'e.g. Change value in A2 cell
     oSheet.Range("A2").Value = ""
     'Save this Excel document
     oBook.SaveAs("C:\Book1.xls", True)
     oExcel.Quit()
     End Sub
    End Class
    
    

     

    Ayrıca Excel otomasyonu için aşağıdaki bağlantılardan da yararlanabilirsiniz.

     

    1. Her dizi değerini Excel'de ardışık hücrelerde saklamak

      http://social.msdn.microsoft.com/forums/en-US/vbgeneral/thread/1a41f104-73ff-4de4-9002-687b5243ba94/ 

       

    2. Yatay veya dikey ardışık hücrelerin toplamını almak

      http://social.msdn.microsoft.com/forums/en-US/vbgeneral/thread/6cbe0a15-4e21-4bd1-aad9-ea364443d3f4/ 

       

    3. Excel dosyasındaki tüm çalışma sayfalarının isimlerini alma ve belirli çalışma sayfalarını DataGridView'e bağlamak

      http://social.msdn.microsoft.com/forums/en-US/vbgeneral/thread/ce4bbe9c-7d13-44c5-a26c-4b84912a51f3/ 

       

    4. Belirli bir alan içindeki hücreleri DataGridView'e bağlamak

    http://social.msdn.microsoft.com/forums/en-US/vbgeneral/thread/91f1f3a7-05e6-4b75-934f-b49e6f0f4f54/


    Emre Günertürk, MSFT
    Microsoft bu servisi kullanıcılarına teknik destek verme,Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi gibi bir sorumluluk üstlenildiği anlamına gelmez.
  • 04 Ekim 2010 Pazartesi 14:18
    Moderatör
     
      Kod İçerir
     

    Web Browser yardımıyla basit internet tarayıcısı işlemleri nasıl yapılır? (Sayfadaki metni alma,üye girişi,arama,link verme vb.)

     

    1. En temel olarak bir WebBrowser nesnesini kullanarak web sayfasını yükleyebiliriz. Daha sonra GetElementsByTagName veya GetElementsByID fonksiyonlarını kullanarak WebBrowser.Document içindeki sayfa elemanlarına ulaşıp düzenleme işlemlerini (Sayfadaki metni alma,üye girişi,arama,link verme vb.) yapabiliriz.

     

    Ancak daha önce bu sayfa elemanlarının bilgileri için web sayfasının kaynağını görüntülemeliyiz (Sağ Tık -Sayfa kaynağını göster)

     

    Örneğin : Bir web sitesine otomatik olarak üye giriş işlemini  nasıl yaparım?

     

    http://www.website.com/login.aspx sayfasının aşağıdaki elemanlara sahip olduğunu farzedelim.

     

    <input name="UserNameTextBox" type="text" value="myUser" id="UserNameTextBox">
    <input name="PasswordTextBox" type="text" value="myUser" id="PasswordTextBox">
    <INPUT type=submit value="Login" name="LoginButton">
    
    

     

    Public Class Form1
     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      ' Adım 1: WebBrowser Kontrolü yardımıyla sayfanın yüklenmesi
      WebBrowser1.Navigate("http://www.website.com/login.aspx")
    
    System.Threading.Thread.Sleep(2000) ' Login sayfasının görüntülenmesi için 2 saniye gecikme
    
    ' Adım 2: Otomatik olarak kullanıcı adı şifrenin girilmesi 
      Dim theElementCollection As HtmlElementCollection
      theElementCollection = WebBrowser1.Document.GetElementsByTagName("input")
      For Each curElement As HtmlElement In theElementCollection
       Dim controlName As String = curElement.GetAttribute("name").ToString
       If controlName = "UserNameTextBox" Then
        curElement.SetAttribute("Value", "Username text here")
       ElseIf controlName = "PasswordTextBox" Then
        curElement.SetAttribute("Value", "Password text here")
        'Aşağıdaki gibi de elemanın değerini alabilirsiniz            'MessageBox.Show(curElement.GetAttribute("Value"))
       End If
      Next
    
    ' Adım 3: Otomatik olarak Login butonunun tıklanması
      theElementCollection = WebBrowser1.Document.GetElementsByTagName("input")
      For Each curElement As HtmlElement In theElementCollection
       If curElement.GetAttribute("value").Equals("Login") Then
        curElement.InvokeMember("click")
        ' Javascript sayesinde tıklama işlemi gerçekleştirilir
       End If
      Next
     End Sub
    End Class
    
    

                    2.WebBrowser Otomasyonu ile ilgili kod örnekleri :  


    1. Yahoo web sitesine otomatik kullanıcı girişi

      http://social.msdn.microsoft.com/Forums/en/vbgeneral/thread/0b77ca8c-48ce-4fa8-9367-c7491aa359b0/

       

    2. Otomatik olarak Windows Live veya Google üzerinden arama gerçekleştirme

      http://social.msdn.microsoft.com/forums/en-US/vbgeneral/thread/f06fcdca-ed9b-464b-ba08-edd26b0dc801/

       

    3. HTML elemanlarıne erişim : DropDownList/RadioButton/RichTextBox

      http://forums.msdn.microsoft.com/en-US/vbgeneral/thread/4ec55500-56a7-4656-b4dd-1e5871fc9806/

       

    4. Hyperlink elemanlarına erişim ve "href" özelliklerinden URL değerlerini alma,ardından My.Computer.Network.DownloadFile metodunu kullanarak dosyayı indirmek :

    http://forums.msdn.microsoft.com/en-US/vbgeneral/thread/6cd60d72-0695-4408-bf40-d858aefc8945/

     

                    3.Web sayfası üzerindeki tablo verisi için Regular Expression  kullanmanız gerekebilir. (System.Text.RegularExpressions isim alanı)

     

    İlişkili forum konusu :

    http://social.msdn.microsoft.com/forums/en-US/Vsexpressvb/thread/4795ab09-c963-4f5d-8f67-0e4717f6faed/

     

    Regular Expressions Forumu :

    http://social.msdn.microsoft.com/forums/en-US/regexp/threads/


    Emre Günertürk, MSFT
    Microsoft bu servisi kullanıcılarına teknik destek verme,Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi gibi bir sorumluluk üstlenildiği anlamına gelmez.
  • 04 Ekim 2010 Pazartesi 14:23
    Moderatör
     
      Kod İçerir
     

    Kendi internet tarayıcınızı nasıl oluşturursunuz?

     

    Çoğunlukla kendi tarayıcımızı var olan WebBrowser kontrolünü kullanarak oluştururuz. WebBrowser kontrolü basit navigason işlemlerini yapabilir.

     

    Örnek olarak : Basit bir internet tarayıcısı oluşturmak

     

    Bir TextBox kontrolünü adres barı olarak,bir Toolstrip kontrolü ve ToolStripButton larını da geri,ileri,durdur,git vb amaçlar için kullanacağız.

     

    Public Class Form1
      ' Git butonu
      Private Sub btnGo_Click(ByVal sender As System.Object, _
                ByVal e As System.EventArgs) Handles btnGo.Click
        WebBrowser1.Navigate(txtURL.Text)
      End Sub
    
    ' Adres barında Enter tuşuna basıldığında git işemi
      Private Sub txtURL_KeyDown(ByVal sender As Object, _
                ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtURL.KeyDown
        If e.KeyData = Keys.Enter Then
          btnGo.PerformClick()
          e.SuppressKeyPress = True
        End If
      End Sub
    
    ' Geri butonu
      Private Sub tsBtnBack_Click(ByVal sender As System.Object, _
                ByVal e As System.EventArgs) Handles tsBtnBack.Click
        If WebBrowser1.CanGoBack Then
          WebBrowser1.GoBack()
        End If
      End Sub
    
    ' İleri butonu
      Private Sub tsBtnForward_Click(ByVal sender As System.Object, _
                ByVal e As System.EventArgs) Handles tsBtnForward.Click
        If WebBrowser1.CanGoForward Then
          WebBrowser1.GoForward()
        End If
      End Sub
    
    ' Dur butonu
      Private Sub tsBtnStop_Click(ByVal sender As System.Object, _
                ByVal e As System.EventArgs) Handles tsBtnStop.Click
        WebBrowser1.Stop()
      End Sub
    
    ' Yenile butonu
      Private Sub tsRefreshNormal_Click(ByVal sender As System.Object, _
                ByVal e As System.EventArgs) Handles tsRefreshNormal.Click
        WebBrowser1.Refresh()
      End Sub
    
    ' Home butonu
      Private Sub tsBtnHome_Click(ByVal sender As System.Object, _
                ByVal e As System.EventArgs) Handles tsBtnHome.Click
        WebBrowser1.GoHome()
      End Sub
    
    ' Arama butonu
      Private Sub tsBtnSearch_Click(ByVal sender As System.Object, _
                ByVal e As System.EventArgs) Handles tsBtnSearch.Click
        WebBrowser1.GoSearch()
      End Sub
    End Class
    
    

     


    Emre Günertürk, MSFT
    Microsoft bu servisi kullanıcılarına teknik destek verme,Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi gibi bir sorumluluk üstlenildiği anlamına gelmez.
  • 04 Ekim 2010 Pazartesi 14:28
    Moderatör
     
      Kod İçerir

     

    Kendi internet tarayıcınıza yeni sekme özelliği nasıl eklenir,sayfanın favorilere eklenmesi veya yer imi olarak kaydedilmesi nasıl gerçekleştirilir?

     

    1.Kendi tarayıcınız için favorilere/yer imlerine ekleme özelliğini aşağıdaki gibi oluşturabilirsiniz :

     

    Öncelikle yeni bir Settings değişkeni tanımlayın :

    Project -> Properties ->  Settings adımlarını izledikten sonra aşağıdaki yapılandırmayı kullanıyoruz,

     

    Name           favList

    Type             System.Collections.Specialized.StringColleciton 

    Scope           User

    Value            (Birkaç ilk değer belirleyin.)

     

    Ön Gereksinimler : Form 1 üzerinde MenuStrip1 (ToolStripMenuItem1 ve ToolStripMenuItem2 ile birlikte) ve WebBrowser1

     

    Public Class Form1
      Private Sub Form1_Load(ByVal sender As System.Object, _
               ByVal e As System.EventArgs) Handles MyBase.Load
        ToolStripMenuItem1.Text = "Favorites"
        ToolStripMenuItem2.Text = "Add"
        WebBrowser1.Navigate("http://www.microsoft.com")
    
    ' Form açıldığında ayarların favorilere yüklenmesi
        For Each item As String In My.Settings.favList
          Dim menuItem1 As New ToolStripMenuItem
          menuItem1.Text = item.ToString
          ToolStripMenuItem1.DropDownItems.Add(menuItem1)
        Next
    
    'Favorilerdeki her ToolStripMenuItem bağlantısı için click olayının tanımlanması 
        For Each C As ToolStripItem In ToolStripMenuItem1.DropDownItems
          If TypeOf (C) Is ToolStripMenuItem Then 
            AddHandler C.Click, AddressOf ToolStripMenuItem_Click
          End If
        Next
      End Sub
    
    'Nesnenin favorilere ve favori liste ayarlarına eklenmesi  
      Private Sub ToolStripMenuItem2_Click(ByVal sender As System.Object, _
                ByVal e As System.EventArgs) _Handles ToolStripMenuItem2.Click
        Dim menuItem1 As New ToolStripMenuItem
        menuItem1.Text = WebBrowser1.Url.ToString
        ToolStripMenuItem1.DropDownItems.Add(menuItem1)
        My.Settings.favList.Add(WebBrowser1.Url.ToString)
      End Sub
    
    'Favoriler menusünden seçim yapıldığında yapılan seçime navigasyonun sağlanması 
      Private Sub ToolStripMenuItem_Click(ByVal sender As Object, _
                ByVal e As System.EventArgs)
        WebBrowser1.Navigate(sender.ToString)
      End Sub
    
    'Form kapandığında ayarların kaydedilmesi 
      Private Sub Form1_FormClosed(ByVal sender As System.Object, _
                ByVal e As System.Windows.Forms.FormClosedEventArgs) _
                Handles MyBase.FormClosed
        My.Settings.Save()
      End Sub
    End Class
    
    

     

               2.Sekmeli yapıyı internet tarayıcınıza kazandırmak için yapılacaklar;

     

    Oluşturacağınız yeni TabPage nesnesine WebBrowser'ınızı ekleyin daha sonra ise TabPage nesnesini TabControl nesnesine ekleyin.

     

    Dim wb As New WebBrowser
    wb.Navigate("URL")
    Dim tab As New TabPage("Title")
    tab.Controls.Add(wb)
    TabControl.TabPages.Add(tab)
    TabControl.SelectedTab = tab
    
    

     

    Sekme fonksiyonuna sahip tarayıcılar ile ilgili detaylı bilgi için takip eden bağlantıları inceleyebilirsiniz :

    http://social.msdn.microsoft.com/Forums/en/vbgeneral/thread/827d96b1-2868-4624-ad32-10917d87a9ed
    http://www.codeproject.com/KB/vb/TabPages.aspx

     


    Emre Günertürk, MSFT
    Microsoft bu servisi kullanıcılarına teknik destek verme,Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi gibi bir sorumluluk üstlenildiği anlamına gelmez.
  • 04 Ekim 2010 Pazartesi 14:32
    Moderatör
     
      Kod İçerir
     

    Veritabanı da içeren bir Windows Forms uygulaması ClickOnce kullanarak nasıl yayınlanır/dağıtılır?

     

    Adım 1 : Yeni bir Windows Forms uygulaması yaratın.

     

    Adım 2 : Projenize bir Data Source ekleyin (SqlDatabase.mdf gibi bir database dosyası seçin.)

     

    Adım 3 : Form1 üzerinde DataGridView1 kontrolünü tanımlayın ve veritabanı bağlantı katarını ( connection string ) |DataDirectory| kullanarak işaret edin.

     

    Imports System.Data.SqlClient
    Public Class Form1
      'Binding database table to DataGridView
      Private Sub Form1_Load(ByVal sender As System.Object, _
               ByVal e As System.EventArgs) Handles MyBase.Load
        Dim con As SqlConnection = New SqlConnection( _
          "Data Source=.;Integrated Security=True;AttachDbFilename=|DataDirectory|\SqlDatabase.mdf")
        Dim cmd As SqlCommand = _
          New SqlCommand("SELECT * FROM Table1", con)
        con.Open()
        Dim myDA As SqlDataAdapter = New SqlDataAdapter(cmd)
        Dim myDataSet As DataSet = New DataSet()
        myDA.Fill(myDataSet, "MyTable")
        DataGridView1.DataSource = myDataSet.Tables("MyTable").DefaultView
        con.Close()
        con = Nothing
      End Sub
    End Class
    

     

    Adım 4 : SqlDatabase.mdf dosyasını Solution Explorer'dan seçin ve özelliklerine bir göz atın :

    "Build Action" özelliğinin "Content" olarak ayarlandığından emin olun.

    "Copy to Output Directory" özelliği ise "Copy if newer" olarak seçilmiş olmalıdır.

     

    Adım 5 : Project -> Properties -> Publish adımlarını izledikten sonra "Application Files" butonuna tıklayarak veritabanı dosyasının listede olup olmadığını kontrol edin, ayrıca veritabanı dosyasının "Publish Status" özelliği "Data File (Auto)" olmalı, "Download Group" özelliği ise "(Required)" olmalıdır.

     

    Adım 6 :   Project -> Properties -> Publish adımlarından sonra "Publish Now" diyerek projenizi yayınlayabilirsiniz/dağıtabilirsiniz.

     

    Database dosyası "Data" klasörünün içerisinde projenizle beraber  dağıtılacaktır. Uygulamanın kurulum klasörünün içerisinde ayrıca bir exe.config dosyası da gelecektir.

  • 04 Ekim 2010 Pazartesi 14:38
    Moderatör
     
     
     

    ClickOnce kurulum dizini neresidir ve ClickOnce ile dağıtım yapmanın herhangi bazı kısıtlamaları var mıdır?

     

    ClickOnce uygulaması her kullanıcı için Application Cache'e (Uygulama önbelleği)  kurulur ( X:\Program Files\folder değil ) ve ClickOnce servisi tarafından yürütülür. ClickOnce kullanarak başa bir klasöre direk kurulum yapmanız mümkün değildir. Bu ClickOnce kurulum dizinini değiştiremeyeceğiniz anlamına gelir.

     

    ClickOnce kullanarak geliştirme yapmak çok kullanışlıdır ancak her durum için en iyi yol değildir. Aşağıda bazı kısıtlamalardan bahsedilecektir :

     

    1. ClickOnce uygulamaları sadece bir kullanıcı için kurulur. Eğer birkaç kullanıcı aynı bilgisayara farklı kullanıcı adlarıyla giriş yaparsa hepsi için ayrı ayrı kurulum gerekecektir. Her kullanıcının yararlanacağı bir kurulum yapamazsınız.

       

    2. ClickOnce kullanarak yapılan kurulumun kısayolun dizinini değiştiremezsiniz. Bunu manuel olarak kendiniz yapabilmenize karşın ClickOnce size bu imkanı sunmaz.

       

    3. ClickOnce kullanarak paylaşılan bileşenleri GAC (Global Assembly Cache) içerisine kuramazsınız. İşin aslı olağan olarak yaptığınız veritabanı oluşturma,dosya tiplerinin kayıt defterine kaydı,kayıt defteri ayarlarını konfigüre etmek haricinde hiçbirşey yapamazsınız.

     

    ClickOnce bir Program grubu menüsü kısayolu oluşturacaktır :

    Başlat -> TümProgramlar altında  "Publisher Name ->  "Product Name"

    Burada "Publisher Name" ve "Product Name" özelliklerini  

    Project -> Properties -> Publish -> "Options" butonuna tıklayarak değiştirebilirsiniz.

     

    ClickOnce'tan daha esnek ve güçlü konfigürasyonlara  ve otomasyon gereksinimlerine izin verebilmek için Windows Installer baz alınarak hazırlanmış "Setup Project" aracını kullanabilirsiniz.

     

    Aşağıda detaylı bilgi alabileceğiniz makaleler mevcuttur :

     

    ClickOnce ve Windows Installer karşılaştırma tablosu :

    http://msdn.microsoft.com/en-us/library/142dbbz4.aspx

     

    Dağıtım stratejisi seçimi :

    http://msdn.microsoft.com/en-us/library/e2444w33.aspx

     

    Ne zaman COPY yerine Windows Installer kullanacağına karar verme :

    http://msdn.microsoft.com/en-us/library/aa302347.aspx


    Emre Günertürk, MSFT
    Microsoft bu servisi kullanıcılarına teknik destek verme,Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi gibi bir sorumluluk üstlenildiği anlamına gelmez.
  • 04 Ekim 2010 Pazartesi 14:42
    Moderatör
     
      Kod İçerir
     

    Başlangıç klasöründe veya masaüstündeki uygulama kısayolları nasıl eklenir/kaldırılır?

     

    ClickOnce uygulama kısayollarını beklediğiniz şekilde oluşturmaz.

     

    Ancak projeniz .NET Framework 3.5 kullanıyorsa ve  .NET Framework 3.5 SP1 güncellemesi yapılmışsa ClickOnce kullanarak uygulamanız için bir masaüstü kısayolu oluşturabilirsiniz.

    Project -> Properties -> Publish -> Options -> Manifests -> "Create desktop shortcut" seçeneğini  tiklediğinizde bu özelliği kullanmaya başlayabilirsiniz.

     

    Eğer projeniz .NET Framework 3.5'tan önceki versiyonları kullanıyorsa ya da istediğiniz herhangi bir yerde kısayol oluşturmak istiyorsanız Windows Scripting Host (WSH) çalışma zamanı kütüphanesini (IWshRuntimeLibrary) kullanabilir ve programatik olarak kısayollar oluşturabilirsiniz.

     

    İlk olarak  AddReference -> COM sekmesi -> " Windows Script Host Object Model"  seçip projenize referans olarak ekleyin.

     

    Kod Örneği : Başlangıç klasöründe uygulama kısayolu yaratmak

     

    Ön Gereksinimler : Form1 üzerinde Button1 ve Button2

     

     

    Imports IWshRuntimeLibrary
    Public Class Form1
    
    Dim StartupFolder As String = Environment.GetFolderPath(Environment.SpecialFolder.Startup)
      Dim shortcutFilePath As String = StartupFolder & "\MyShortcut.lnk"
    
    ' Başlangıç klasörüne kısayol ekleme/kısayol oluşturma
      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim WshShell As WshShellClass = New WshShellClass
        Dim MyShortcut As IWshRuntimeLibrary.IWshShortcut
        ' Kısayolun başlangıç klasöründe oluşturulacağını belirtiyoruz
        MyShortcut = CType(WshShell.CreateShortcut(shortcutFilePath), IWshRuntimeLibrary.IWshShortcut)
        'Hedef dosyanın yolunu gösteriyoruz
        MyShortcut.TargetPath = Application.StartupPath & "\YourAppName.exe"
        ' mesela MyShortcut.TargetPath = "C:\WINDOWS\system32\calc.exe"
        MyShortcut.Save()
      End Sub
    
    'Kısayolun silinmesi işlemi
      Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        If IO.File.Exists(shortcutFilePath) Then
          IO.File.Delete(shortcutFilePath)
        End If
      End Sub
    End Class
    
    

     

     

    Dilerseniz masaüstünde de kısayolu oluşturabilirsiniz :

     

    Dim DesktopFolder As String = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)
    Dim StartMenuFolder As String = Environment.GetFolderPath(Environment.SpecialFolder.StartMenu)
    
    

    Emre Günertürk, MSFT
    Microsoft bu servisi kullanıcılarına teknik destek verme,Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi gibi bir sorumluluk üstlenildiği anlamına gelmez.
  • 04 Ekim 2010 Pazartesi 14:45
    Moderatör
     
      Kod İçerir
     

    Kullanıcı Giriş prosedürleri ve şifrenin case sensitive olması (küçük-büyük harf duyarlı olma durumu) nasıl gerçekleştirilir?

     

    Adım 1 : Örneğin MS Access Database dosyası myDB.mdb aşağıdaki alanlara sahip bir Users tablosu içersin :

     

    Username     Text
    Password      Text

     

    Adım 2 : Yeni bir Windows Forms uygulaması oluşturun ve  bir "Login Form" şablonu ekleyin :

    Project -> Add Windows Form -> "Login Form"

     

    Adım 3 : Kod Örneği

     

    Ön Gereksinimler : Login Form üzerinde txtUserName  TextBox,txtPassword TextBox,OK Button ve Cancel Button.

     

    Imports System.Data.OleDb
    Public Class LoginForm1
      ' OK butonu 
      Private Sub OK_Click(ByVal sender As System.Object, _
              ByVal e As System.EventArgs) Handles OK.Click
        Dim con As New OleDbConnection("Provider=Microsoft.jet.oledb.4.0;data source=D:\myDB.mdb")
        Dim cmd As OleDbCommand = New OleDbCommand( _
              "SELECT * FROM Users WHERE Username = '" & _
              txtUsername.Text & "' AND [Password] = '" & txtPassword.Text & "' ", con)
        con.Open()
        Dim sdr As OleDbDataReader = cmd.ExecuteReader()
        'Eğer kayıt sorgulanabiliyorsa bu doğrulamadan geçtiği anlamına gelir,daha sonra başka bir form açılır.
        If (sdr.Read() = True) Then
          MessageBox.Show("The user is valid!")
          Dim mainForm As New MainForm
          mainForm.Show()
          Me.Hide()
        Else
          MessageBox.Show("Invalid username or password!")
        End If
      End Sub
      ' Cancel butonu
      Private Sub Cancel_Click(ByVal sender As System.Object, _
              ByVal e As System.EventArgs) Handles Cancel.Click
        Me.Close()
      End Sub
    End Class
    
    

     

     

    Not : Yukarıdaki txtPassword içerisindeki şifre kontrolü büyük küçük harf duyarlı değildir.

    Şifrenin büyük-küçük harf duyarlı olmasını sağlamak için önce veritabanından DataReader nesnesi ile gelen şifreyi alın ve txtPassword kontrolü içerisindeki veriyle karşılaştırın. Örnek olarak :

     

    Imports System.Data.OleDb
    Public Class LoginForm1
      Private Sub OK_Click(ByVal sender As System.Object, _
              ByVal e As System.EventArgs) Handles OK.Click
        Dim con As OleDbConnection = New OleDbConnection( _
              "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\myDB.mdb;")
        Dim cmd As OleDbCommand = New OleDbCommand( _
              "SELECT * FROM Users WHERE Username='" & _
              txtUsername.Text & "' and [Password]='" & txtPassword.Text & "'", con)
        con.Open()
        Dim sdr As OleDbDataReader = cmd.ExecuteReader()
        ' Bu alanda yapılan kontrol ile büyük küçük harf duyarlılığı sağlanmış olur.  
        If sdr("Password") <> txtPassword.Text.ToString() Then
          MessageBox.Show("Invalid password!")
        End If
        sdr.Close()
        con.Close()
      End Sub
    End Class
    
    

    Emre Günertürk, MSFT
    Microsoft bu servisi kullanıcılarına teknik destek verme,Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi gibi bir sorumluluk üstlenildiği anlamına gelmez.
  • 04 Ekim 2010 Pazartesi 14:49
    Moderatör
     
     
     

    Veritabanına BLOB (Binary Large Object) tipinde veri (resim-doküman) nasıl kaydedilir?

     

    1. BLOB verinin ( resim,doküman vb.) saklanması noktasındaki görüş dosyanın veritabanına kaydedilmeden önce bir byte dizisi haline getirilmesi ve dizi  veritabanından alındıktan sonra tekrar dosya haline getirilmesidir.

       

      T-SQL Veri Tipi

       

      Üye Adı

      Açıklama

      Binary

      Byte tipinde dizi .  1 ile 8000 byte arasında değişen ikili veri.

      Image

      Byte tipinde dizi. 0 ile (2 üzeri 31) -1 ( ya da 2,147,483,647) byte arasında değişen ikili veri.

       

      Kod Örneği :

      http://social.msdn.microsoft.com/forums/en-US/vbgeneral/thread/0fb5fd05-3eb5-4568-9e2a-fd9ba5ed5a3e

       

    2. İkili verilerin veritabanında saklanması süreci bu verinin veritabanından alınmasına geldiğinde biraz hantallaşabilir. Bu nedenle en geniş kabul görmüş olan fikir dosya yolunun veritabanında saklanması dosyanın kendisinin ise dosya sisteminde kalmasıdır.
    3. Bunlara ek olarak SQL Server 2008 içerisinde FileStream veri tipi adında yeni bir veri tipi tanımlanmıştır. Bu veri tipi sayesinde BLOB verilerin SQL Server 2008 ve NTFS dosya sistemi kombinasyonu kullanıldığında daha rahat saklanabildiği ve erişimin kolaylaştığı görülür.Aşağıdaki makalede BLOB cinsinden verilerin SQL Server üzerinde saklanması ve alınmasıyla ilgili bilgi verilmektedir :

      http://www.codeproject.com/KB/database/Store_and_manipulat_BLOBs.aspx

       

      FileStream SQL Server Database Engine ile NTFS dosya sistemini entegre eder. Transact-SQL kullanarak FileStream verileri insert-update-search-back up- query işlemlerine tabi tutabiliriz. Win32 dosya sistemi arayüzleri veriye  erişimi olanaklı kılar.

       

      Bu konuda detaylı bilgi alınabilecek bağlantılar :

      http://msdn.microsoft.com/en-us/library/bb933993.aspx
      http://msdn.microsoft.com/en-us/library/cc949109(SQL.100).aspx


    Emre Günertürk, MSFT
    Microsoft bu servisi kullanıcılarına teknik destek verme,Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi gibi bir sorumluluk üstlenildiği anlamına gelmez.
  • 04 Ekim 2010 Pazartesi 14:52
    Moderatör
     
      Kod İçerir
     

    Basit bir veri erişim uygulaması nasıl yapılır? (Ekleme-silme-değiştirme-sayfalama vb.)

     

    Bu soru için 4 farklı yaklaşım incelenecektir :

     

    1. DataGridView kullanarak

       

      Kod Örneği :

      http://social.msdn.microsoft.com/forums/en-US/Vsexpressvb/thread/5980181e-f666-4f0a-ab50-c4ebecf96f02/

       

      Imports System.Data.OleDb
      Public Class Form1
       Dim myDA As OleDbDataAdapter
       Dim myDataSet As DataSet
       Private Sub Form1_Load(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles MyBase.Load
        Dim con As OleDbConnection = New OleDbConnection( _
            "Provider=Microsoft.jet.oledb.4.0;data source=|DataDirectory|\myDB.mdb")
        Dim cmd As OleDbCommand = New OleDbCommand("SELECT * FROM Table1", con)
        con.Open()
        myDA = New OleDbDataAdapter(cmd)
        ' Burada bir CommandBuilder nesnesi gereklidir.
        'Bu nesne otomatik olarak InsertCommand 
        'UpdateCommand ve DeleteCommand nesnelerini DataAdapter nesnesi için oluşturacaktır. 
        Dim builder As OleDbCommandBuilder = New OleDbCommandBuilder(myDA)
        myDataSet = New DataSet()
        myDA.Fill(myDataSet, "MyTable")
        DataGridView1.DataSource = myDataSet.Tables("MyTable").DefaultView
        con.Close()
        con = Nothing
       End Sub
      
      ' Verinin veritabanına tekrar kaydedilmesi işlemi
      	 Private Sub Button1_Click(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles Button1.Click
        Me.Validate()
        Me.myDA.Update(Me.myDataSet.Tables("MyTable"))
        Me.myDataSet.AcceptChanges()
       End Sub
      End Class
      
      

       

      Ayrıca veritabanı dosyasını Solution Explorer dan seçip Properties'ine gittiğinizde "copy to output directory" özelliğini "copy if newer" olarak ayarlamalısınız.

       

    2. Select/Insert/Delete/Update cümlelerini kod içerisinden çağırabilirsiniz:

       

      MS Access veritabanı için kod örneği :

      http://forums.msdn.microsoft.com/en-US/vbgeneral/thread/87913f28-992d-4705-963b-cb0ffa53d8dd/

       

      SQL Server veritabanı için kod örneği :

      http://forums.msdn.microsoft.com/en-US/vbgeneral/thread/89e1067d-16e7-44e8-b12d-d78845bf255f/

       

    3. BindingNavigator kontrolü ile birlikte Data Wizard kullanabilirsiniz.

     

    Detaylı bilgiye aşağıdaki bağlantıdan ulaşabilirsiniz:

    http://social.msdn.microsoft.com/forums/en-US/Vsexpressvb/thread/ff3f953b-da66-4f03-b4e4-981bab7d783b/

     

    Ayrıca veritabanı dosyasını Solution Explorer dan seçip Properties'ine gittiğinizde "copy to output directory" özelliğini "copy if newer" olarak ayarlamalısınız.

     

         4.   DataSet/DataTable nesneleriyle kod içerisinde çalışabilirsiniz.

     

    Detaylı bilgiye aşağıdaki bağlantıdan ulaşabilirsiniz:

    http://social.msdn.microsoft.com/forums/en-US/Vsexpressvb/thread/ff3f953b-da66-4f03-b4e4-981bab7d783b/

     


    Emre Günertürk, MSFT
    Microsoft bu servisi kullanıcılarına teknik destek verme,Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi gibi bir sorumluluk üstlenildiği anlamına gelmez.
  • 04 Ekim 2010 Pazartesi 14:55
    Moderatör
     
      Kod İçerir
     

    Veritabanındaki veriler üzerinde nasıl arama ve filtreleme yapılır?

     

    Veritabanındaki kayıtlar üzerinde arama veya filtreleme yapmak için aşağıda 2 yaklaşım incelenmiştir :

     

       1.        T-SQL Select komutu ile kayıtların filtrelenmesi 

                      Ön Gereksinimler : Form1 üzerinde DataGridView1 ve TextBox1 


    Imports System.Data.OleDb
    Public Class Form1
     
     Private Sub TextBox1_TextChanged(ByVal sender As System.Object, _
           ByVal e As System.EventArgs) Handles TextBox1.TextChanged
      Dim keywords As String = TextBox1.Text
      Dim con As OleDbConnection = New OleDbConnection( _
           "Provider=Microsoft.jet.oledb.4.0;data source=D:\myDB.mdb")
       
      Dim cmd As OleDbCommand = New OleDbCommand( _
           "SELECT * FROM Table1 WHERE Filed1 Like '%" & keywords & "%' ", con)
      
      con.Open()
      Dim myDA As OleDbDataAdapter = New OleDbDataAdapter(cmd)
      Dim myDataSet As DataSet = New DataSet()
      myDA.Fill(myDataSet, "MyTable")
      DataGridView1.DataSource = myDataSet.Tables("MyTable").DefaultView
     End Sub
    End Class
    

                    2.         DataView.RowFilter özelliğinin kullanımı ile kayıtların filtrelenmesi  

    Ön Gereksinimler : Form1 üzerinde DataGridView1 ve TextBox

     

    Imports System.Data.OleDb
    Public Class Form1
     Dim ds As DataSet
      Private Sub Form1_Load(ByVal sender As System.Object, _
          ByVal e As System.EventArgs) Handles MyBase.Load
      Dim con As OleDbConnection = New OleDbConnection( _
          "Provider=Microsoft.jet.oledb.4.0;data source=D:\myDB.mdb")
      Dim cmd As OleDbCommand = New OleDbCommand("SELECT * FROM Table1", con)
      con.Open()
      Dim myDA As OleDbDataAdapter = New OleDbDataAdapter(cmd)
      ds = New DataSet()
      myDA.Fill(ds, "MyTable")
      con.Close()
      DataGridView1.DataSource = ds.Tables("MyTable").DefaultView
     End Sub
      
     Private Sub TextBox1_TextChanged(ByVal sender As System.Object, _
           ByVal e As System.EventArgs) Handles TextBox1.TextChanged
      Dim keywords As String = TextBox1.Text
      ds.Tables("MyTable").DefaultView.RowFilter = "Field1 =" & keywords
       End Sub
    End Class
    
    

     

    Emre Günertürk, MSFT
    Microsoft bu servisi kullanıcılarına teknik destek verme,Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi gibi bir sorumluluk üstlenildiği anlamına gelmez.

  • 04 Ekim 2010 Pazartesi 15:01
    Moderatör
     
     
     

    Bazı değişiklikler yapıldıktan sonra uygulama yeniden başlatıldığında bu değişiklikler veri tabanında neden görünmüyor?

     

    Çoğunlukla projeye Data Source olarak bir veritabanı dosyası (.mdb,.mdf,.sdf vb.) eklenir ve uygulamada veriye erişim sağlanmış olur. Daha sonra veri girildikten ya da değiştirildikten sonra uygulama yeniden başlatıldığında veritabanı güncellenmemiş olarak görünür.

     

    Neden:

    Data Source eklediğinizde, Visual Studio .NET veritabanının 2 kopyasını oluşturur biri proje klasöründe biri de bin klasöründe olmak üzere. Uygulama her yeniden başlatıldığında eski olan ikincisi kopyalanır sonuç olarak temiz bir kopya elde edersiniz.

     

    Çözüm:

    Veritabanı dosyasını Solution Explorer dan seçip Properties'ine gittiğinizde "copy to output directory" özelliğini "copy if newer" olarak ayarlamalısınız.


    Emre Günertürk, MSFT
    Microsoft bu servisi kullanıcılarına teknik destek verme,Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi gibi bir sorumluluk üstlenildiği anlamına gelmez.
  • 04 Ekim 2010 Pazartesi 15:04
    Moderatör
     
      Kod İçerir
     

    VB.NET kullanarak veritabanında parametreli sorgu işlemleri nasıl yapılır?

     

    Kod Örneği : Parametreli sorgunun SQL Server veritabanı kullanılarak işletilmesi

     

    Imports System.Data.SqlClient
    Public Class Form1
      Private Sub Button1_Click(ByVal sender As System.Object, _
                ByVal e As System.EventArgs) Handles Button1.Click
        Dim con As SqlConnection = New SqlConnection( _
                "Data Source=.;Integrated Security=True;AttachDbFilename=D:\myDB.mdf")
        con.Open()
        Dim cmdText As String = _
                "INSERT INTO Customer(UserName, [Password]) VALUES (@UserName,@Password)"
        Dim cmd As SqlCommand = New SqlCommand(cmdText, con)
        With cmd.Parameters
          .Add(New SqlParameter("@UserName", txtUserName.Text))
          .Add(New SqlParameter("@Password", txtPassword.Text))
        End With
        cmd.ExecuteNonQuery()
        con.Close()
        con = Nothing
      End Sub
    End Class
    
    

     

    Kod Örneği : Parametreli sorgunun MS Access veritabanı kullanılarak işletilmesi

     

    Imports System.Data.OleDb
    Public Class Form1
      Private Sub Button1_Click(ByVal sender As System.Object, _
                ByVal e As System.EventArgs) Handles Button1.Click
        Dim con As OleDbConnection = New OleDbConnection( _
                "Provider=Microsoft.jet.oledb.4.0;data source=D:\myDB.mdb")
        con.Open()
        Dim cmdText As String = "INSERT INTO Customer(UserName, [Password]) VALUES (?,?)"
        Dim cmd As OleDbCommand = New OleDbCommand(cmdText, con)
        cmd.CommandType = CommandType.Text ‘ The default is CommandType.Text
        With cmd.Parameters
          .Add("@p1", OleDbType.VarChar).Value = txtUserName.Text
          .Add("@p2", OleDbType.VarChar).Value = txtPassword.Text
        End With
        cmd.ExecuteNonQuery()
        con.Close()
        con = Nothing
      End Sub
    End Class
    
    

     

     

    Ayrıntılı bilgiye aşağıdaki bağlantıdan ulaşabilirsiniz :

    http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbcommand.parameters.aspx

     

     


    Emre Günertürk, MSFT
    Microsoft bu servisi kullanıcılarına teknik destek verme,Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi gibi bir sorumluluk üstlenildiği anlamına gelmez.
  • 04 Ekim 2010 Pazartesi 15:05
    Moderatör
     
     
     

    IDE menüsünü kullanarak varolan bir proje farklı yerel lokasyona kaydedilebilir mi?

     

    Şu anda Visual Studio IDE'sinin "Tüm projeji farklı kaydet" gibi bir fonksiyonu mevcut değildir. Visual Studio IDE sinin kullandığı tüm "Kaydet" komutları belirlenmiş tek bir dosya içindir. Varolan bir projenin kaydedilmesi için önerilen yaklaşımlar aşağıdadır :

     

    1. Tüm proje klasörünü hedef lokasyona kopyala-yapıştır kullanarak taşımak
    2. VSS veya Team Foundation Server gibi kaynak kod yönetim araçları kullanarak amaca ulaşmak

     

    İlişkili forum konuları :

     

    http://social.msdn.microsoft.com/forums/en-US/vbide/thread/4356ddc4-3626-4049-87b5-e95e7ba264ab/
    http://social.msdn.microsoft.com/forums/en-US/csharpide/thread/440934e5-1ba8-4eac-a9b5-e24d12a2709b/
    http://social.msdn.microsoft.com/Forums/en/Vsexpressvb/thread/ae30f04f-4f43-40f4-8bb4-386896aa72bf


    Emre Günertürk, MSFT
    Microsoft bu servisi kullanıcılarına teknik destek verme,Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi gibi bir sorumluluk üstlenildiği anlamına gelmez.
  • 10 Mayıs 2011 Salı 20:57
     
     

    sayın emre günertürk,

    çok güzel olduğuna inandığım (bilgi yetersizliğimden tam göremediğimi düşünüyorum) bilgiler vermişsiniz. ben bu çalışmanın bir kısmını (loginform hazırlayıp ad ve şifre doğrulayarak programa giriş) msde 2000 yüklü olmasına rağmen kullanmadım. ama itiraf edeyim sihirbazları kullandım. sihirbazlar msde 2000 ı gizli bir şekilde kullanmış olabilir. benzer kodlarla hazırladım. vt güncellenmesi gibi sorunlarla karşılaştım.

    sorum: ben msde2000 kullanmadım diyerek, kendimi kandırmış mı oldum? yok eğer .net teknolojisinin altyapısı bunu gerektiriyor diyorsanız, yine msde2000 kullanmadan bahsettiğiniz "Veritabanı dosyasını Solution Explorer dan seçip Properties'ine gittiğinizde "copy to output directory" özelliğini "copy if newer" olarak ayarlamalısınız" yapabilir miyiz?

    deneyeceğim. ama yine de vereceğiniz cevaplar benim ne kadar doğru anladığımı anlamam için faydalı olacaktır. tabi ki eğer kabul ederseniz...

  • 09 Nisan 2012 Pazartesi 08:10
     
     

    Sevgili Emre,
    VS2010 da Oluşrurulan VB-ASP.NET Web Application örneğinden hareketle,

    Site.master içinde

    <asp:MenuItem NavigateUrl="~/MainPage.aspx" Text="Main"/>

    oluşturulan 'MainPage.aspx' sayfasının

    Kullanıcının LogIn olması halinde
    -- Menüde görünmesini
    -- Kullanıcının LogIn durumunda bu sayfayı ziyaret edebilmesini
    -- Bu sayfaya girilince de 'ChangePassword.aspx' sayfasını ziyaret edebilmesini

    Benim gibi Amatör birine anlatabilirmisin..?

    Tşk.

  • 09 Nisan 2012 Pazartesi 08:18
    Moderatör
     
     

    Merhaba,

    Sanıyorum belli bir menu item'in kullanıcı sadece login olduğunda menü içerisinde görünmesini istiyorsun. Eğer değilse direk ChangePassword sayfasına gidecek soru bu?

    İstersen ASP.NET forumunda yeni bir konu oluştur, dil olarak VB.NET kullandığından da bahset yine,böylece kullanıcıların daha çok ilgisini çekip yanıt alabilirsin.


    Microsoft bu servisi kullanıcılarına yardım etme, Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi bir sorumluluk üstlenildiği anlamına gelmez.
    Facebook Üzerinden Takip Et!
    Twitter'da Takip Et!

  • 07 Ocak 2013 Pazartesi 21:02
     
      Kod İçerir
    Ama Attik Bu Yakalama Taktikleri Deyisti sindi Anti VirusLer Sorun Cikartiyor :D