Asensin Visual Basic 2010 Expressin. Millä konstilla vähimmällä vaivalla saa VB5 koodit portattua VB.nettiin. Esim. mulla on useissa projekteissa käytetty indeksoituja kontrolleja. Kuinka tuo ratkaistaan VB.netissä, jossa ei vastaavaa indeksointia ole.
Heippa setä!
voit rakennella vaikkapa tyypin johon indeksoit esim. nappeja...
(eri asia onko järkevää, johonkin se koodi on kirjoitettava)
Imports System.Windows.Forms
Public Partial Class MainForm
Private Structure ButtonStruct
Dim [button] As Button
Dim index As Integer
End Structure
Private MyButtons(0) As ButtonStruct
Private IsInitialized As Boolean = False
Private HasButtons As Boolean = False
Public Sub New()
Me.InitializeComponent()
End Sub
Sub MainForm_Load(sender As Object, e As EventArgs)
Dim buttons As Integer = -1
If Me.Controls.Count > 0 Then
For i As Integer = Me.Controls.Count -1 To 0 Step -1
If TypeOf(Me.Controls(i)) Is Button Then ' _
'And Me.Cntrols(i).Name.IndexOf("IndeksiNappi") > -1 Then
buttons += 1: HasButtons = True
ReDim Preserve MyButtons(buttons)
MyButtons(buttons).button = Ctype(Me.Controls(i), Button)
MyButtons(buttons).index = buttons
End If
Next
End If
End Sub
Sub MainForm_Shown(sender As Object, e As EventArgs)
IsInitialized = True
End Sub
Sub Button1_Click(sender As Object, e As EventArgs)
MyButtonsDoEvent(CType(sender, Button))
End Sub
Sub Button2_Click(sender As Object, e As EventArgs)
MyButtonsDoEvent(CType(sender, Button))
End Sub
Sub MyButtonsDoEvent(ThisButton As Button)
If Not IsInitialized Or Not HasButtons Then
Exit Sub
End If
Dim index As Integer = -1
For Each Item In MyButtons
If Item.button Is ThisButton Then
index = Item.index: Exit For
End If
Next
If index > - 1 Then
Select Case index
Case 0: MsgBox("Jee!")
Case 1: MsgBox("Jee!, Jee!")
End Select
End If
End Sub
End ClassKiitos Nea. Huh, pahalta näyttää VB5:een verraten.
Huomasin myös toisen hankaluuden. Jos haluan antaa tai tulostaa numeroita TextBoxilla, huomasin ettei toimi kuin Val-funktio, jolla saan stringin vaikka kokonaisluvuksi. Mutta kun pitäisi kokonaisluku saada tekstiruutuun ei näytä onnistuvan millään.
Miksi ihmeessä on menty takapakkia VB5:stä tai vielä pahemmin VB6:sta VB.nettiin, jolla suoraan sanoen rääkätään VB5/VB6-ohjelmoijaa. Ihan kuin siirtyisi Mersusta Ladaan josta puuttuu pyörät. Ehkä mielipiteeni johtuu siitä, etten ole keksinyt vielä VB.netin vahvuuksia jos niitä on.
Heippa taas setä!
Etpä näytä vielä kekanneen VB.NET'n hienouksia..., mutta tässä uutta & vanhaan
textBox1.Text = (100.555).ToString
MsgBox(Val(textBox1.Text.Replace(",",".")))Tässä hieman enemmän EXTREMEÄ eli jos haluat alkaa leikkimään indeksoinnilla niin...
'väännetty SharpDevelop 4.0 Beta 4:lla
Imports System.Windows.Forms
'Vaihdoin pääformin deigner osion (MainForm.Designer.vb)
'kaikkien formille lisäämieni tapahtumien osoitteet osoittamaan yden ainoan EventHadlerin tapahtuman osoitteeseen - MainForm_Click
'(muutetut alla olevassa esimerkissä kahdesta alempi vaihtoehto)
'Näkyvät ainakin vanhemmissa Visual Basic .NET versioissa Formin koodi-ikkunassa #Region designer generated code - Do not change this code...tai jotain
'AddHandler Me.button1.Click, AddressOf Me.Button1_Click
'AddHandler Me.button1.Click, AddressOf Me.MainForm_Click
'AddHandler Me.button2.Click, AddressOf Me.Button2_Click
'AddHandler Me.button2.Click, AddressOf Me.MainForm_Click
'AddHandler Me.textBox1.TextChanged, Me.TextBox1_TextChanged
'AddHandler Me.textBox1.TextChanged, AddressOf Me.MainForm_Click
'AddHandler Me.textBox2.TextChanged, AddressOf Me.TextBox2_TextChanged
'AddHandler Me.textBox2.TextChanged, AddressOf Me.MainForm_Click
Public Partial Class MainForm
Private Structure ButtonStruct
Dim [button] As Button
Dim index As Integer
End Structure
Private Structure TextBoxStruct
Dim [textbox] As TextBox
Dim index As Integer
End Structure
Private MyButtons(0) As ButtonStruct
Private MyTextBoxes(0) As TextBoxStruct
Private IsInitialized As Boolean = False
Private HasButtons As Boolean = False
Private HasTextBoxes As Boolean = False
Public Sub New()
Me.InitializeComponent()
End Sub
Sub MainForm_Load(sender As Object, e As EventArgs)
Dim buttons As Integer = -1
Dim textboxes As Integer = -1
If Me.Controls.Count > 0 Then
For i As Integer = Me.Controls.Count -1 To 0 Step -1
If TypeOf(Me.Controls(i)) Is Button Then
'And Me.Cntrols(i).Name.IndexOf("IndeksiNappi") > -1 Then
buttons += 1: HasButtons = True
ReDim Preserve MyButtons(buttons)
MyButtons(buttons).button = Ctype(Me.Controls(i), Button)
MyButtons(buttons).index = buttons
ElseIf TypeOf(Me.Controls(i)) Is TextBox Then
textboxes += 1: HasTextBoxes = True
ReDim Preserve MyTextboxes(textboxes)
MyTextboxes(textboxes).textbox = _
Ctype(Me.Controls(i), TextBox)
MyTextboxes(textboxes).index = textboxes
End If
Next
End If
End Sub
Sub MainForm_Shown(sender As Object, e As EventArgs)
IsInitialized = True
End Sub
Sub MainForm_Click(sender As Object, e As EventArgs)
If TypeOf(sender) Is Button Then
MyButtonsDoEvent(CType(sender,Button))
ElseIf TypeOf(sender) Is TextBox Then
MyTextboxesDoEvent(CType(sender, TextBox))
End If
End Sub
Sub MyButtonsDoEvent(ThisButton As Button)
If Not IsInitialized Or Not HasButtons Then
Exit Sub
End If
Dim index As Integer = -1
For Each Item In MyButtons
If Item.button Is ThisButton Then
index = Item.index: Exit For
End If
Next
If index > - 1 Then
Select Case index
Case 0: MsgBox("Jee!")
Case 1: MsgBox("Jee!, Jee!")
End Select
End If
End Sub
Sub MyTextBoxesDoEvent(ThisTextBox As TextBox)
If Not IsInitialized Or Not HasTextBoxes Then
Exit Sub
End If
Dim index As Integer = -1
For Each Item In MyTextBoxes
If Item.textbox Is ThisTextBox Then
index = Item.index: Exit For
End If
Next
If index > - 1 Then
Select Case index
Case 0: label1.Text = MyTextBoxes(index).textbox.Text
Case 1: MyTextBoxes(index).textbox.Text = label1.Text
End Select
End If
End Sub
End ClassKiitos kovasti Nea. Olen tosiaan noviisi VB.netissä vaikka olen melkoisesti ohjelmia vääntänyt VB5:llä vuodesta 96 lähtien ja sitä ennen muilla Basiceilla. Löytyyköhän VB.nettiin suomenkielistä tutoriaalia.
Olen rakennellut indeksoiduista labeleista taulukoita mutta VB.netissä kannattanee käyttää valmiita taulukoita. Excel tai Calc on turhan raskas kalu noihin juttuihin.
Heippa taas setä!
Esim. Docendo'lta löytyy tämä, mutta olen itse kokenut niin, että Microsoft Windows SDK for Windows 7 and .NET Framework 4 löytyy täältä on aivan MUST, kun alkaa tutustumaan vähänkään syvemmin .NET Frameworkin resursseihin.
Taulukoiden rakentelu peruskontrolleista on ihan yes, siinä oppii paljon.
Olen rakennellut Excel/VBA'lla (jossa ei ole indeksoituja kontrolleita) moisen viritelmän. Elikä rakensin Excelin sisään oman Access-tyyppisen graafisen scrollattavan tietokantahallinta hilpakkeen (käyttää JET 4.0 moottoria) käyttäen taulukoituun tyyppiin dynaamisesti asetettavia tietuekenttiä (= labelleja & kenttien arvojen syöttöön yhtä tekstiboxia joka siirtyy kulloinkin valitun labellin päälle). Ainoa asia mikä hieman tökkii on sarakkeiden leveyden muuttaminen hiirellä lennossa mikä johtuu vain siitä, että macro-koodi käännetään suoritettaessa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.