[VB] waarde lezen van combobox en gebruiken

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • harald701
  • Registratie: November 2012
  • Laatst online: 27-07-2023
Besten,

Ik ben nieuw in visual basic en in OOP.
Het komt erop neer dat ik een x en y waarde wil doorsturen via een selecteerbare poort (x en y apart) Ik heb nu een comboboxje aangemaakt met de selecteerbare COMpoorten.
Is er een manier waarom ik de uiteindelijk geselecteerde keuze uit deze combobox in een variabele kan stoppen en deze kan gebruiken in onderstaande code?

De code voor het seriëel verzenden ziet er volgens mij zo uit;

Visual Basic .NET:
1
2
3
4
5
6
7
8
 
Sub SendSerialData(ByVal data As String)
        ' Send strings to a serial port. 
        Using com1 As IO.Ports.SerialPort =
                My.Computer.Ports.OpenSerialPort("COM1")
            com1.WriteLine(data)
        End Using
 End Sub

ik gebruik visual studio express 2012
Mvg Harald

Acties:
  • 0 Henk 'm!

  • DustMan4u
  • Registratie: Maart 2001
  • Laatst online: 10-10 21:19
Hiervoor gebruik je de 'selecteditem' property van de combobox. In jouw code zou het er als volgt uit kunnen zien:

code:
1
2
3
4
5
6
7
Sub SendSerialData(ByVal data As String)
        ' Send strings to a serial port. 
        Using com1 As IO.Ports.SerialPort =
                My.Computer.Ports.OpenSerialPort(ComboBox1.SelectedItem)
            com1.WriteLine(data)
        End Using
End Sub

Domotica: Fibaro HC2 met diverse modules in het hele huis, Nest Hello & Cam IQ | 3D: Voron Switchwire


Acties:
  • 0 Henk 'm!

  • harald701
  • Registratie: November 2012
  • Laatst online: 27-07-2023
Bedankt!

En waar juist plaats ik de variabele die ik wil zenden? is dit 'data'?

Mvg

[ Voor 9% gewijzigd door harald701 op 25-04-2015 16:54 ]


Acties:
  • 0 Henk 'm!

  • Mercatres
  • Registratie: September 2009
  • Laatst online: 12-10 17:25
Uit het voorbeeld dat je gebruikt: MSDN: How to: Send Strings to Serial Ports in Visual Basic
The WriteLine method sends the data to the serial port.
Ja dus :)

Acties:
  • 0 Henk 'm!

  • harald701
  • Registratie: November 2012
  • Laatst online: 27-07-2023
Ok.

In mijn Timer1_tick sub staat het binnenhalen van de x en y waarden. Als ik wil dat elke nieuwe waarde seriëel wordt verstuurd, hoe verzorg ik dit dan? Want ik neem aan dat een sub in een sub niet mogelijk is.

Hoe zorg ik dat mijn waarde blijft verzonden worden?

Dit is waar ik de com poort selecteer en open
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Label6.Text = "Port selected" 'overschrijft "waiting for port selection" met "Port selected"
        yFlag = 1
        ComboBox2.Enabled = False
        Button2.Enabled = False
        Using com2 As IO.Ports.SerialPort =
        My.Computer.Ports.OpenSerialPort(ComboBox2.SelectedItem)
            'com2.WriteLine(Data)
        End Using
    End Sub


En hier vermoed ik dat ik naar buiten zal moeten schrijven?

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        PictureBox1.Image = touchless.CurrentCamera.GetCurrentImage

        joyGetPos(0, joypos1) '0 is the joystick id
        Label1.Text = CStr("Joystick X-position = " & joypos1.dwXpos) 'schrijft de x positie naar label 1
        Label2.Text = CStr("Joystick Y-position = " & joypos1.dwYpos) 'schrijft de y positie naar label 2
        Label7.Text = CStr("Buttons = " & joypos1.dwButtons) 'schrijft de button waarde naar label 7

 End Sub

[ Voor 100% gewijzigd door harald701 op 25-04-2015 20:10 ]


Acties:
  • 0 Henk 'm!

  • harald701
  • Registratie: November 2012
  • Laatst online: 27-07-2023
Ik ben nu wat verder gekomen

ik heb eerst een Seriële poort gedeclareerd
Visual Basic .NET:
1
Dim com1 As IO.Ports.SerialPort = Nothing

Dit wordt uitgevoerd na het selecteren van de seriële poort.
Visual Basic .NET:
1
2
3
4
5
6
7
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Label5.Text = "Port selected" 'overschrijft "waiting for port selection" met "Port selected"
        ComboBox1.Enabled = False
        Button1.Enabled = False
        com1 = My.Computer.Ports.OpenSerialPort(ComboBox1.SelectedItem)

    End Sub


Maar het naar buiten sturen lukt nog niet.
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        PictureBox1.Image = touchless.CurrentCamera.GetCurrentImage

        joyGetPos(0, joypos1) '0 is the joystick id
        Label1.Text = CStr("Joystick X-position = " & joypos1.dwXpos) 'schrijft de x positie naar label 1
        Label2.Text = CStr("Joystick Y-position = " & joypos1.dwYpos) 'schrijft de y positie naar label 2
        Label7.Text = CStr("Buttons = " & joypos1.dwButtons) 'schrijft de button waarde naar label 7

        com1.WriteLine(joypos1.dwXpos)
        'com2.WriteLine(joypos1.dwYpos)

    End Sub

Op deze manier krijg ik de error:
"An unhandled exception of type 'System.NullReferenceException' occurred in webcamcapture.exe

Additional information: De objectverwijzing is niet op een exemplaar van een object ingesteld."

Iemand die weet wat hier misloopt?

Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 23:34
Je wil in Visual Studio het programma debuggen en op het moment dat het programma crasht even naar de stacktrace kijken (is een window voor). Dan kijken op welk punt in jouw programma het eruit knalt.
Een nullreference betekent dat je een object niet het geinstantieerd. Mijn gok als ik jouw code bekijk is dat Timer1_Tick al wordt uitgevoerd voordat Button1_Click is uitgevoerd. Op dat moment komt die bij regel 9 van Timer1_Tick aan, waar je probeert een functie aan te roepen op een niet bestaand object.

Mocht je verder nog niet weten hoe je moet debuggen is het misschien handig om naar deze YouTube video te kijken: https://www.youtube.com/watch?v=C0vDKXIq_9A
Overigens is er ook een Visual Studio 2013 community edition. Dit is ook gratis, maar heeft wat meer mogelijkheden dan VS2012 Express. Misschien handig om daar tzt ook nog naar te kijken, al zou VS2012 Express voorlopig ook wel voldoen.

Acties:
  • 0 Henk 'm!

  • Damic
  • Registratie: September 2003
  • Laatst online: 07:14

Damic

Tijd voor Jasmijn thee

Al wat ik aanraak werk niet meer zoals het hoort. Damic houd niet van zijn verjaardag


Acties:
  • 0 Henk 'm!

  • harald701
  • Registratie: November 2012
  • Laatst online: 27-07-2023
Bedankt voor de snelle reacties.
Omdat het een enkel project is, blijf ik voorlopig liever bij de 2012 versie.
En wanneer ik debug zie ik inderdaad dat de seriële poort nog niet toegewezen is, hoe verhelp ik dit het best volgens jullie?

Mvg Harald

[ Voor 8% gewijzigd door harald701 op 26-04-2015 00:41 ]


Acties:
  • 0 Henk 'm!

  • harald701
  • Registratie: November 2012
  • Laatst online: 27-07-2023
Ik weet niet of het de meest juiste oplossing is maar ik heb het als volgt opgelost:

Ik heb een variabele gemaakt; xFlag
Wanneer er op button1 geklikt wordt wordt xFlag '1' gemaakt.

In Timer1 test ik of xFlag <> 1, en als dat waar is, wordt de waarde over de gewenste poort naar buiten geschreven.

Acties:
  • 0 Henk 'm!

  • epic007
  • Registratie: Februari 2004
  • Laatst online: 07-10 10:46
Ja, je zou ook de timer pas kunnen starten in de Button1_Click Chandler.

Acties:
  • 0 Henk 'm!

  • Damic
  • Registratie: September 2003
  • Laatst online: 07:14

Damic

Tijd voor Jasmijn thee

MSDN: SerialPort.IsOpen Property (System.IO.Ports)
Visual Basic:
1
if com1.isopen then 'ga verder

Al wat ik aanraak werk niet meer zoals het hoort. Damic houd niet van zijn verjaardag

Pagina: 1