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 Class
Kiitos 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 Class
Kiitos 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.