VB .NET Soruları..

Başlatan ÜC, 18 Şubat 2014, 01:00:54

ÜC

     Arkadaşlar kendi ihtiyacımı giderecek kadar VB6 bilgisine sahibim ama VB6 ile  yapılacak programların yeni sistemlerde kullanırken zorlanabileceğinin farkındayım. Bu yüzden .NET öğrenmek istiyorum ama bazı konularda zorlanıyorum ve yardıma ihtiyacım oluyor. Umarım ben ve benim gibi yeni öğrenmek isteyen arkadaşlardan yardımlarınızı esirgemezsiniz.Yardımcı olacak arkadaşlara şimdiden teşekkür ederim..


muhittin_kaplan

yardım ederiz tabiki.
Sen Problemlerini Yaz,  Çözüm Bulursun.

ÜC

#2
 Hemen ilk sorumu sorayım. Form1 ve Form2 diye 2 formum var. 2.Formu açıyorum ama 1.formu kapatamıyorum. Form2 açılsın , Form1 kapansın istiyorum Görünmez değil unload olsun istiyorum

Şöyle bir yöntem buldum ama yine form1 kapanmıyor

        Dim frm As New Form1
        Dim frm1 As New Form2

        frm.Show(Me)
        frm1.Close()

984sami

Öncelikle .NET projelerinde bir MainModule dosyası oluştur.  Project>"Proje Adı Properties...> açılan pencerede "application" tabı altında "Startup Object" seçicisinde "Sub Main" satırını seç.

MainModule.vb dosyanın içeriği şuna benzer olsun;

Module MainModule
    Public Const GlobalConstant As Integer = -1
    Public GlobalVariable As Integer

    Sub Main(ByVal cmdArgs() As String)
        If Process.GetProcessesByName(Process.GetCurrentProcess.ProcessName).Length = 1 Then
            Application.EnableVisualStyles()
            Application.Run(New MainForm)
        End If
    End Sub
End Module


Bu kullanım sayesinde ileri seviye kontrol senin elinde olur. Mesela program genelinde kullanacağın sabitleri (Yukarıdaki GlobalConstant), değişkenleri (Yukarıdaki GlobalVariable) burada tanımla. Bir başka örnek IF kontrolü ile programın bir kopyası çalışıyormu kontrol ediliyor. Sub Main(ByVal cmdArgs() As String) ile komut satırından parametre almak mümkün. Application.Run(New MainForm) ile başlangıç formu ile program görsel olarak çalışmaya başlıyor. Bunlar başlangıç seviyesi için gerekli bir kaç şey ve daha niceleri var. MSDN kütüphanesini sık sık kullanmalısın.

Verdiğin kodda ise frm1 zaten açık değil ki kapatabilesin. Öncelikle frm1.Show komutunu vermelisin.


ÜC

#4
Sami verdiğin kodları denedim ama bununla sanırım başlangıç formunu ayarlayabiliyoruz birde eğer program çalışıyor ise 2.defa aynı programı çalıştırmıyor ki güzel bir özellik.

Yine  form1 den form2 yi açıp form1 i kapatmayı yapmıyor sanırım bu kodlar.
Evet benim verdiğim kodda yanlışlık var önce form2 yi açıp sonra form1 kapatmaya çalışıyorum.

        Dim frm2 As New Form2
        Dim frm1 As New Form1

        frm2.Show()
        frm1.Close()

Ama form1 bu kodlarla kapanmıyor.

984sami

Alıntı yapılan: umitco - 18 Şubat 2014, 02:12:38
Ama form1 bu kodlarla kapanmıyor.

Eğer projeyi windows forms application olarak başlatmış iseniz Form1 bu tip projelerin main thread (ana iş parçacığı) formudur. (Ancak yukarıda bahsettiğim şekilde startup object olarak başka bir formda belirlenebilir) Normal olarak main form kapatıldığında program sona erer. Programın sona ermemesi için ana iş parçacığı form olmamalıdır. Bunu şu şekilde yapabilirsiniz;

Module Module1
    Sub Main(ByVal cmdArgs() As String)
        Application.EnableVisualStyles()
        Application.SetCompatibleTextRenderingDefault(False)
        Dim Frm1 As New Form1
        Frm1.Show()
        Application.Run()
    End Sub
End Module


Bu şekilde hiç bir form ana iş parçası değildir ve istediğiniz formu açar, istediğinizi kapatırsınız. Ancak bu durumda tüm formları kapatmanız programın sona ermesini sağlamaz. Programın sona ermesi için Application.Exit() komutunu kullanmalısınız.

ÜC

Sorunu verdiğin kodlar ve yöntemle hallettim. Artık istediğim forma kadar uzanıp oradan  çıkabiliyorum tümden programdan. Yalnız Sub Main den başlatınca programı command penceresi  (başlat\çalıştır da CMD ile açtığımız dos penceresi) ile birlikte açılıyor program. Yalnızca tasarım zamanı değil exe yapıncada bu pencereyle birlikde çalışıyor program. Bunu engelleyebilrmiyiz ?

984sami

Properties>Application tabında Application type seçicisinde "Console Application" yerine "windows forms application" seçili olmalı.

ÜC

windows  application ile yalnızca form seçenekleri çıkıyor  , sub main yada modüller yok



984sami

Hemen altta enable visual style gibi bir checkbox var, ondaki seçeneği kaldırırsan görünür olur.

Application.EnableVisualStyles()
kodu oradan devre dışı bırakıldığı için modülde yer alır.

studio ortamına alıştığını kabul edersek artık c# kullanmanı tavsiye edebilirim. Önceki verdiğim vb kodun c# şekli;

static class Module1
{
	public static void Main(string[] cmdArgs)
	{
		Application.EnableVisualStyles();
		Application.SetCompatibleTextRenderingDefault(false);
		Form1 Frm1 = new Form1();
		Frm1.Show();
		Application.Run();
	}
}


vb.net ile c#.net aynı altyapıyı kullanıyor ve sadece yazım kuralları farklı, vb kullanmaya devam edebilirsin ancak c# ile ilerlemen ileride c ile mikro programlamada, c++ öğrenmede büyük kolaylık sağlar.

ve son olarak benim MSDN sonrası en çok başvurduğum kaynak olan http://www.codeproject.com/ sitesine üye ol. Makalelerden örnek kodlara hemen her şey bu sitede mevcut, neredeyse her soruna önceden verilmiş bir cevabı zaman kaybetmeden bulabilirsin.

ÜC

Evet hallettim , gece geç saatte gözden kaçırmışım bahsetiğin ayarı. Amacım pro olmak yada devamlı yazılım yazmak değil. Basit uygulamalar yapabilmek bana yetiyor şimdilik ,  C# için ayrıca vakit ayırabilirmiyim bilmiyorum. Yardımların için teşekür ederim , kolay gelsin..

ÜC

Tekrar Merhaba. Yeni bir sorunum var arkadaşlar.. Aşağıdaki kodlarla veritabanına bağlantı sağlıyorum

        Dim CON As New OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source = C:\Deneme.mdb")
        Dim AdP As New OleDbDataAdapter("select * From A", Con)
        Dim DaV As New DataView

        AdP.Fill(DaS, "tablo")
        DaV.Table = DaS.Tables("tablo")
        DataGridView2.DataSource = DaV       

Bununla tablodan arama yapıyorum.

        DaV.Sort = "A ASC"
        DaV.RowFilter = "A like 'S%'"         'S ile başlayanlar tabloda.

Soru 1 : Arama sonucunda veriler süzülerek geliyor tabloya ve verilerde değişiklik yapıp update edemiyorum.Veriyi buluyor ilgili alandan veri çekiyorum ama bulunan satırda update edemiyorum
Soru 2 : Aramayı süzerek değilde VB6 Find komutundaki gibi bulduğu satıra gitmesini sağlayabilirmiyim Dataviewin.

barisertekin

#12
Verileri DataGridView üzerinde listeliyorsun.

Daha sonra DataGridView üzerinden elle güncelleme yaptığında değişikliklerin kaydedilmesini istiyorsan.

DataGridView nesnesinin CellEdited tarzında bir event'i vardır. O tetiklenir ve "e" argümanında row nesnesini taşır.
Yazacağın sql update sorgusu ile verileri güncelleyebilirsin.

Zannedersem bunun otomatik yapanı da vardı. Evet buldum varmış.
http://www.codeproject.com/Articles/14759/VB-DataGridView-Automatically-Saving-Updates-to-a

--
Ayrıca o like kriterini direk sorguda yapsanız daha mantıklı olmaz mı? Boşu boşuna tüm verileri çekip sonradan eleme yapıyorsunuz.

muhittin_kaplan

yani burada

Dim AdP As New OleDbDataAdapter("select * From A", Con)

unutmadan, mümkünse

seçme select
silme delete
değiştirme update


olaylarını SQL ile yapınız. Bir sonraki aşama olan SQL SERVER üzerinde stored procedure e hazırlık olur.

ÜC

Bu tabloda grid kullanmıyorum. Yukarıda kullandığım gridi yaptığım denemelerde çıkan sonucu görüntülemek içindi kusura bakmayın bunu belirtmemişim.  Sql sorgu kullanarak çözüme ulaşmam mümkün ama ben bu verileri bir  datasete alıp dataset ile çalışarak dataset , dataview nesnelerini öğrenmek istiyorum. Yok sql sorgudan başka çaren derseniz onunla halledeceğim artık.