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..
yardım ederiz tabiki.
Sen Problemlerini Yaz, Çözüm Bulursun.
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()
Ö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.
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.
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.
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 ?
Properties>Application tabında Application type seçicisinde "Console Application" yerine "windows forms application" seçili olmalı.
windows application ile yalnızca form seçenekleri çıkıyor , sub main yada modüller yok
(http://i.hizliresim.com/KnydbN.jpg) (http://hizliresim.com/KnydbN)
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/ (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.
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..
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.
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 (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.
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.
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.
O zaman istediğiniz bu. Şunu da belirtmeliyim ki sorduğunuz soruları anlamak çok güç. Daha net sormalısınız.
connectionToSQL = new SqlConnection(SQLConnString);
connectionToSQL.Open();
var cmd = new SqlCommand("SELECT * FROM A",connectionToSQL);
var da = new SqlDataAdapter(cmd);
var b = new SqlCommandBuilder(da);
foreach (DataRow r in dt.Rows)
{
r.Cells[0] = "Test";//Atıyorum Adı Kolonu
r.Cells[1] = "Test";//Atıyorum Soyadı Kolonu
r.SetModified();
}
da.Update(dt);
C# kodu fakat aynısını vb.net ile yazabilirsin. Çok benzerdir.
Bu kodlar aradığım bir satırı değiştirecek şeklinde olursa olabilir ama sql sorguyu arama yapmak için değil update için gerektiğinde kullanmak istiyorum.
Ben Viual Basic 2005 Express edition kullanıyorum Yani aşina değilim verdiğin kodlara.
VB6 da bir nesneyi kopyala yapıştır yaptığımızda o nesne bir dizin gibi oluşturuluyor. Örn texbox için text(0) , text(1) , text(2) şeklinde oluyor kopyalanan nesne ama bunu .NET te bulamadım.Nesneyi TextBox(0) şeklindede isimlendiremiyorum hata veriyor. Bilen arkadaşlar yardımcı olabilirmi ?
Tekrar merhaba. Uzun zamandır uğraştığım ama netice alamadığım bir konuda yardımlarınızı rica ediyorum.
Bu kodlarla bağlantı yapıyorum.
Dim Con As New OleDb.OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source = C:\Deneme.mdb")
Dim AdP As New OleDb.OleDbDataAdapter("select * From A", Con)
Dim CoMBu As OleDb.OleDbCommandBuilder
Dim DaS As New DataSet
AdP = New OleDb.OleDbDataAdapter("select * from A", Con)
CoMBu = New OleDb.OleDbCommandBuilder(AdP)
CoMBu.ConflictOption = ConflictOption.OverwriteChanges
AdP.Fill(DaS, "tablo")
DataGridView1.DataSource = DaS.Tables("tablo")
Bu kodlarlada datasete ekleme ve update yapıyorum
DaS.Tables("tablo").Rows.Add()
Dim Sayi As Integer
Sayi = DaS.Tables("tablo").Rows.Count - 1
DaS.Tables("tablo").Rows(Sayi).Item("A") = TextBox1.Text
DaS.Tables("tablo").Rows(Sayi).Item("B") = TextBox2.Text
AdP.Update(DaS, "tablo")
Fakat eklediğim satırların ID alanına (ID otamatik sayı alanım) atanan otomatik sayıyı tabloda göremiyorum.Bu eklemeden sonra veritabanında eklediğim satırların eklendiğini görebiliyorum
Resimde görünen son 2 alan yeni eklediğim kayıt.
(http://www.upload.gen.tr/uploads/4/TPzVA-t_429141.jpg) (http://www.upload.gen.tr/d.php/www/TPzVA/429141.jpg.html)
Bunu çözmeden hiçbirşey yapamıyorum...