Avatar billede steensommer Praktikant
28. april 2006 - 21:37 Der er 12 kommentarer og
1 løsning

ContextMenuStrip hø-klik menu

Hej
VB .Net windows projekt. Jeg har nærmest lavet en "tabel" med textboxe der indeholder personoplysninger ud af "x-aksen" og en ny person for hver række.

I første kolonne har jeg oprettet en hø-klik menu (ContextMenuStrip). Jeg har problem med at henvise til den celle jeg hø-klikkede i. Hvis jeg skriver følgende:

        If TextBox1.Focused Then
            MsgBox("Seng 1,1")
        ElseIf TextBox2.Focused Then
            MsgBox("Seng 1,2")
        End if

så får jeg ikke den celle jeg hø-klikkede i men i stedet den celle jeg pt står i (jeg håber ikke at det blev for snørklet)

Hvordan kan man referere til den textbox man klikkede i?

vh Steen
Avatar billede nielle Nybegynder
29. april 2006 - 08:01 #1
Et bud:

    Private Sub ContextMenuStrip1_Opening(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles ContextMenuStrip1.Opening
        Dim source As TextBox = Me.ContextMenuStrip1.SourceControl

        If source.Equals(Me.TextBox1) Then
            MsgBox("Seng 1,1")
        ElseIf source.Equals(Me.TextBox2) Then
            MsgBox("Seng 1,2")
        End If
    End Sub
Avatar billede steensommer Praktikant
29. april 2006 - 08:12 #2
...men hvilket bud - det fungerer til punkt og prikke. Tak for det - svar lige for point :0)
Et lille tillægsspørgsmål (blot hvis du skulle vide det): Contextmenuen vises selv om textboxen er tom. Kan man undgå at den gør det?
vh Steen
Avatar billede nielle Nybegynder
29. april 2006 - 08:26 #3
Værsgod:

    Private Sub ContextMenuStrip1_Opening(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles ContextMenuStrip1.Opening

        Dim source As TextBox = Me.ContextMenuStrip1.SourceControl

        If source.Text.Trim = "" Then
            e.Cancel = True
        Else
            If source.Equals(Me.TextBox1) Then
                MsgBox("Seng 1,1")
            ElseIf source.Equals(Me.TextBox2) Then
                MsgBox("Seng 1,2")
            End If
        End If

    End Sub
Avatar billede steensommer Praktikant
29. april 2006 - 08:55 #4
Tja så er det bare at sige tusinde tak for hjælpen :0)
Avatar billede steensommer Praktikant
29. april 2006 - 08:56 #5
...hvad betyder .trim?
Avatar billede nielle Nybegynder
29. april 2006 - 08:58 #6
Trim() fjerner mellemrum fra hver ende af en tekst.

Ved at inkludere den, så sikre du dig at det også fungere selv om brugeren skriver et antal blanktegn i tekst-feltet. :^)
Avatar billede nielle Nybegynder
29. april 2006 - 09:00 #7
Det burde nok have været:

If source.Text.Trim() = "" Then

- i stedet for:

If source.Text.Trim = "" Then

- men VB.Net er øjensynligt ikke så nærtagende på det punkt. :^)
Avatar billede steensommer Praktikant
29. april 2006 - 09:06 #8
OK - tak!
Kan du også svare på det her - så  er det mere end godt: Hvis men har en variabel man gerne vil anvende når man eksempelvis klikker på 1 item i contextmenuen hvorledes skal den variabel så dim'es?

eksempel:
If source.Equals(Me.TextBox1) Then
                HCV = me.textbox1.text
                Cpr = me.textbox73.text
            ElseIf source.Equals(Me.TextBox2) Then
              ' MsgBox("Seng 1,2")
            End If

med andre ord hvorledes skal HCV og Cpr dim'es hvis de skal kunne bruges i click-menuen?
vh Steen
Avatar billede nielle Nybegynder
29. april 2006 - 09:11 #9
Hvis de kun skal bruges der, og ikke andre steder, ja så er det der at de skal Dim'es.

    Private Sub ContextMenuStrip1_Opening(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles ContextMenuStrip1.Opening

        Dim source As TextBox = Me.ContextMenuStrip1.SourceControl

        If source.Text.Trim() = "" Then
            e.Cancel = True
        Else
            If source.Equals(Me.TextBox1) Then
                Dim HCV As String = Me.TextBox1.Text
                Dim Cpr As String = Me.TextBox73.text
                MsgBox("Seng 1,1")
            ElseIf source.Equals(Me.TextBox2) Then
                MsgBox("Seng 1,2")
            End If
        End If

    End Sub
Avatar billede steensommer Praktikant
29. april 2006 - 09:16 #10
...også selv om de skal bruges i eksempelvis:

ToolStripMenuItem1_Click
Avatar billede nielle Nybegynder
29. april 2006 - 09:19 #11
Nej, for så er det jo ikke *kun* der at de skal bruges. ;^)

Så skal de "ud" hvor at de kan ses fra resten af form'en:

Public Class Form1

    Private HCV As String = ""
    Private Cpr As String = ""

    Private Sub ContextMenuStrip1_Opening(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles ContextMenuStrip1.Opening

        Dim source As TextBox = Me.ContextMenuStrip1.SourceControl

        If source.Text.Trim() = "" Then
            e.Cancel = True
        Else
            If source.Equals(Me.TextBox1) Then
                HCV = Me.TextBox1.Text
                Cpr = Me.TextBox73.Text
                MsgBox("Seng 1,1")
            ElseIf source.Equals(Me.TextBox2) Then
                MsgBox("Seng 1,2")
            End If
        End If

    End Sub
End Class
Avatar billede steensommer Praktikant
29. april 2006 - 09:21 #12
Igen tusinde tak for de mange gange hjælp - nu kan jeg vist heller ikke få mere for den "25-øre" :0)

vh Steen
Avatar billede nielle Nybegynder
29. april 2006 - 09:24 #13
Selv tak for point :^)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester