Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB.NET: VB5 koodi VB.nettiin

setä [27.11.2010 12:46:49]

#

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.

neau33 [27.11.2010 22:47:06]

#

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

setä [28.11.2010 01:07:41]

#

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.

neau33 [28.11.2010 02:18:31]

#

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

setä [28.11.2010 10:35:32]

#

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.

neau33 [28.11.2010 15:39:14]

#

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.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta