Avatar
josef.m
Člen
Avatar
josef.m:

Ahoj. mám tu trable s jednou funkcí. Je to editace položek v listboxu. Funkce mi píše při kliknutí chybu "Null".
Jak docílit toho, aby se tato chyba při kliknutí nezobrazovala a aby se mi v "label1" zobrazila hláška, že položka nebyla vybrána. Předem děkuji za jakoukoli pomoc.

Private Sub ListBox1_Mouse­DoubleClick(sen­der As Object, e As MouseEventArgs) Handles ListBox1.Mouse­DoubleClick

'Funkce pro úpravu položek'

Dim intIndex As Integer = ListBox1.Item­s.IndexOf(Lis­tBox1.Selecte­dItem)
Dim objInputBox As Object = InputBox("Upravit úkol :", "Úprava úkolu", ListBox1.Selec­tedItem)
If Not objInputBox = Nothing Then
ListBox1.Item­s.Remove(ListBox1­.SelectedItem)
ListBox1.Item­s.Insert(intIn­dex, objInputBox)
End If
End Sub

Odpovědět 14. října 20:54
Nic není nemožné.
Avatar
Petr Stastny
Redaktor
Avatar
Odpovídá na josef.m
Petr Stastny:

Spadl program, takže 1) to odchytávej podmínkou a když je to null, ukaž textbox se zprávou, nebo

  1. udělej try - catch block s vypsáním zprávy
 
Nahoru Odpovědět  -1 14. října 21:11
Avatar
Petr Stastny
Redaktor
Avatar
Odpovídá na josef.m
Petr Stastny:

Pozn. píšu C#, ale ve VB to bude podobné, možná i úplně stejné

if (ToZCehoToNacitas == null) ...

nebo

try{
NactiHodnotu
}catch{
UkazTextBoxSChybou
}
 
Nahoru Odpovědět  -1 14. října 21:13
Avatar
Odpovídá na josef.m
Michal Žůrek (misaz):

podmínka

If Not objInputBox = Nothing Then

ve VB nefunguje. Místo rovná se dej operátor Is, popř IsNot

If Not objInputBox Is Nothing Then

nebo

If objInputBox IsNot Nothing Then
Nahoru Odpovědět 14. října 22:47
Nesnáším {}, proto se jim vyhýbám.
Avatar
Odpovídá na Petr Stastny
Michal Žůrek (misaz):

null (resp. ve VB Nothing) se neošetřuje přes try, protože to už z principu není nikterak extra výjimečný stav a výjimky by se měly používat k ošetřování pouze výjimečných stavů.

Nahoru Odpovědět 14. října 22:49
Nesnáším {}, proto se jim vyhýbám.
Avatar
Odpovídá na Petr Stastny
Michal Žůrek (misaz):

platí to stejné jako můj předchozí komentář navíc tvůj kód je matoucí, protože ve VB se s null (Nothing) neporovnává standardně přes rovnítka, ale pomocí operátoru Is.

Nahoru Odpovědět  +1 14. října 22:50
Nesnáším {}, proto se jim vyhýbám.
Avatar
josef.m
Člen
Avatar
Odpovídá na Michal Žůrek (misaz)
josef.m:

Ahoj, nahradil jsem = hodnotou Is, ale nejde, pořád ta samá chyba.

Nahoru Odpovědět 16. října 9:56
Nic není nemožné.
Avatar
HONZ4
Člen
Avatar
Odpovídá na josef.m
HONZ4:

Taky dělám pouze C#, ale myslím, že by na začátku v události po poklepání měl být test jestli ListBox1.Selec­tedItem není null
Asi něco jako:

If ListBox1.SelectedItem IsNot  Nothing Then 'a teprve pokračovat v kódu'
 
Nahoru Odpovědět 16. října 10:31
Avatar
HONZ4
Člen
Avatar
HONZ4:

Asi bych dokázal poradit přesněji, kdybys tu dal ukázku kódu včetně funkce InputBox (ne obrázek, ale pomocí ikonky </> vložit kód)

 
Nahoru Odpovědět 16. října 10:40
Avatar
josef.m
Člen
Avatar
Odpovídá na HONZ4
josef.m:
Private Sub UpravitÚkolToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles UpravitÚkolToolStripMenuItem.Click

    'Funkce pro úpravu položek.'



    Dim intIndex As Integer = ListBox1.Items.IndexOf(ListBox1.SelectedItem)
    Dim objInputBox As Object = InputBox("Upravit úkol :", "Úprava úkolu", ListBox1.SelectedItem)
    If Not objInputBox = Nothing Then

        ListBox1.Items.Remove(ListBox1.SelectedItem)
        ListBox1.Items.Insert(intIndex, objInputBox)
    End If

End Sub
Editováno 16. října 11:01
Nahoru Odpovědět 16. října 10:59
Nic není nemožné.
Avatar
HONZ4
Člen
Avatar
HONZ4:

Ignorací toho všeho co ti kdo napíše rychlost vyřešení problému neurychlíš.

Private Sub ListBox1_DoubleClick(sender As Object, e As EventArgs) Handles ListBox1.DoubleClick
    If ListBox1.SelectedItem IsNot Nothing Then
        Dim intIndex As Integer = ListBox1.Items.IndexOf(ListBox1.SelectedItem)
        Dim objInputBox As Object = InputBox("Upravit úkol :", "Úprava úkolu", ListBox1.SelectedItem)
        If objInputBox IsNot Nothing Then
            ListBox1.Items.Remove(ListBox1.SelectedItem)
            ListBox1.Items.Insert(intIndex, objInputBox)
        End If
    End If
End Sub

Správnost InputBox nedokážu bez křišťálové koule posoudit...

Editováno 16. října 11:12
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 16. října 11:11
Avatar
josef.m
Člen
Avatar
josef.m:

Já jsem v tomto začátečník, vše dělám pouze podle návodu z internetu. Zde je celý kód.

Public Class Form1


    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load


        'Funkce pro ukládání do paměti při zavření aplikace'

        Dim values As String = My.Settings.ListBoxValues
        My.Settings.Save()
        Dim i As Int16 = 0
        Dim test As String
        If values <> "" Then
            ListBox1.Items.Clear()
            ListBox1.Items.AddRange(values.Split("|"))
        End If
        Try
            Do
                test = ListBox1.Items(i)
                i = i + 1
            Loop
        Catch
            Label2.Text = i.ToString
        End Try

        'Funkce pro polohu okna v pravém horním rohu a vysouvání.'

        Me.Visible = True

        Dim x As Integer
        Dim y As Integer

        x = Screen.PrimaryScreen.WorkingArea.Width
        y = Screen.PrimaryScreen.WorkingArea.Height - Me.Height = Top
        Do Until x = Screen.PrimaryScreen.WorkingArea.Width - Me.Width
            x = x - 1
            Me.Location = New Point(x, y)
        Loop


    End Sub


    Private Sub Form1_Click(sender As Object, e As EventArgs) Handles Me.Click
        TextBox1.Text = "Zadejte úkol"
    End Sub

    Private Sub TextBox1_Enter(sender As Object, e As EventArgs)
        TextBox1.Text = ""
    End Sub

    Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
        Dim values As New List(Of String)
        For Each item As String In Me.ListBox1.Items
            values.Add(item)
        Next
        My.Settings.ListBoxValues = String.Join("|", values.ToArray)
        My.Settings.Save()
    End Sub



    Private Sub Label1_Click(sender As Object, e As EventArgs) Handles Label1.Click
        TextBox1.Text = "Zadejte úkol"
    End Sub

    Private Sub Label2_Click(sender As Object, e As EventArgs) Handles Label2.Click
        TextBox1.Text = "Zadejte úkol"
    End Sub

    Private Sub Label3_Click(sender As Object, e As EventArgs) Handles Label3.Click
        TextBox1.Text = "Zadejte úkol"
    End Sub

    Private Sub Label4_Click(sender As Object, e As EventArgs) Handles Label4.Click
        TextBox1.Text = "Zadejte úkol"
    End Sub

    Private Sub Panel3_Click(sender As Object, e As EventArgs) Handles Panel3.Click
        TextBox1.Text = "Zadejte úkol"
    End Sub

    Private Sub OdebratVybranéToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles OdebratVybranéToolStripMenuItem.Click
        ListBox1.Items.Remove(ListBox1.SelectedItem)
        Label1.Text = "Úkol odebrán ze seznamu"

        Dim i As Int16 = 0
        Dim test As String
        Try
            Do
                test = ListBox1.Items(i)
                i = i + 1
            Loop
        Catch
            Label2.Text = i.ToString
        End Try
    End Sub

    Private Sub OdebratVšeToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles OdebratVšeToolStripMenuItem.Click
        Odebrat.Show()
    End Sub

    Private Sub UložitToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles UložitToolStripMenuItem.Click

        IO.Directory.CreateDirectory("C:\Ukoly")
        Dim w As New IO.StreamWriter("C:\Ukoly\seznam.txt")
        Dim i As Integer

        For i = 0 To ListBox1.Items.Count - 1
            w.WriteLine(ListBox1.Items.Item(i))
        Next
        w.Close()
        Label1.Text = "Úkoly byly uloženy"
    End Sub

    Private Sub PosunoutDolůToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles PosunoutDolůToolStripMenuItem.Click

        If ListBox1.SelectedIndex < ListBox1.Items.Count - 1 Then

            Dim I = ListBox1.SelectedIndex + 2
            ListBox1.Items.Insert(I, ListBox1.SelectedItem)
            ListBox1.Items.RemoveAt(ListBox1.SelectedIndex)
            ListBox1.SelectedIndex = I - 1
        End If

        Label1.Text = "Úkol byl přesunut dolů"
    End Sub

    Private Sub PosunoutNahoruToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles PosunoutNahoruToolStripMenuItem.Click

        If ListBox1.SelectedIndex > 0 Then
            Dim I = ListBox1.SelectedIndex - 1
            ListBox1.Items.Insert(I, ListBox1.SelectedItem)
            ListBox1.Items.RemoveAt(ListBox1.SelectedIndex)
            ListBox1.SelectedIndex = I
        End If

        Label1.Text = "Úkol byl přesunut nahoru"
    End Sub

    Private Sub ZavřítToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ZavřítToolStripMenuItem.Click
        Me.Close()
    End Sub

    Public Sub Button1_Click1(sender As Object, e As EventArgs) Handles Button1.Click

        ListBox1.Items.Add(TextBox1.Text.Trim)
        Label1.Text = "Úkol byl přidán do seznamu"

        Dim i As Int16 = 0
        Dim test As String

        Try
            Do
                test = ListBox1.Items(i)
                i = i + 1
            Loop
        Catch
            Label2.Text = i.ToString
        End Try

        Dim sPath As String
        Dim mySound As Media.SoundPlayer

        sPath = "click.wav"
        mySound = New Media.SoundPlayer(sPath)
        mySound.Play()
    End Sub

    Private Sub TextBox1_KeyPress(KeyAscii As Integer)
        If KeyAscii = 13 Then
            KeyAscii = 0
        End If
    End Sub

    Private Sub TextBox1_Click1(sender As Object, e As EventArgs) Handles TextBox1.Click
        TextBox1.Clear()
    End Sub

    Private Sub TextBox1_KeyDown(sender As Object, e As KeyEventArgs) Handles TextBox1.KeyDown

        'Funkce pro odeslání položky při zmáčknutí klávesy "Enter"'

        If e.KeyCode = Keys.Enter Then
            e.SuppressKeyPress = True
            Button1.PerformClick()
        End If
    End Sub

    Private Sub TextBox1_Leave(sender As Object, e As EventArgs) Handles TextBox1.Leave


        If TextBox1.Text = "" Then
            TextBox1.Text = "Zadejte úkol"
        End If
    End Sub


    Private Sub ListBox1_MouseDoubleClick(sender As Object, e As MouseEventArgs) Handles ListBox1.MouseDoubleClick

        'Funkce pro úpravu položek'

        Dim intIndex As Integer = ListBox1.Items.IndexOf(ListBox1.SelectedItem)
        Dim objInputBox As Object = InputBox("Upravit úkol :", "Úprava úkolu", ListBox1.SelectedItem)
        If Not objInputBox Is Nothing Then
            ListBox1.Items.Remove(ListBox1.SelectedItem)
            ListBox1.Items.Insert(intIndex, objInputBox)
        End If
    End Sub



    Private Sub OtevřítToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles OtevřítToolStripMenuItem.Click

        'Funkce pro otevírání souboru .txt z uložené pozice.'

        Dim r As New IO.StreamReader("C:\Ukoly\seznam.txt")
        While (r.Peek() > -1)
            ListBox1.Items.Add(r.ReadLine)

        End While
        r.Close()

        Label1.Text = "Úkoly byly nahrány"
    End Sub

    Private Sub KopírovatToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles KopírovatToolStripMenuItem.Click

        If ListBox1.SelectedItems.Count > 0 Then

            Clipboard.SetText(ListBox1.SelectedItems(0))

        End If

        Label1.Text = "Úkol zkopírován do schránky"
    End Sub

    Private Sub VložitToolStripMenuItem1_Click(sender As Object, e As EventArgs) Handles VložitToolStripMenuItem1.Click

        TextBox1.Paste()
        Label1.Text = "Úkol byl vložen"
    End Sub

    Private Sub UpravitÚkolToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles UpravitÚkolToolStripMenuItem.Click

        'Funkce pro úpravu položek.'



        Dim intIndex As Integer = ListBox1.Items.IndexOf(ListBox1.SelectedItem)
        Dim objInputBox As Object = InputBox("Upravit úkol :", "Úprava úkolu", ListBox1.SelectedItem)
        If Not objInputBox = Nothing Then

            ListBox1.Items.Remove(ListBox1.SelectedItem)
            ListBox1.Items.Insert(intIndex, objInputBox)
        End If

    End Sub

    Private Sub OToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles OToolStripMenuItem.Click
        informace.Show()
    End Sub

    Private Sub NastaveníToolStripMenuItem_Click(sender As Object, e As EventArgs)
        nastavent.Show()
    End Sub

    Private Sub HledatToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles HledatToolStripMenuItem.Click
        hledat.Show()
    End Sub
End Class
Nahoru Odpovědět 16. října 11:26
Nic není nemožné.
Avatar
HONZ4
Člen
Avatar
HONZ4:
  1. na první pohled vidím, že jsi tam ani nedoplnit to, co jsem ti napsal
  2. nevidím funkci InputBox
  3. pokud vb neprobíráte ve škole, tak jsi měl raději začít s C# (pro začátečníka vhodnější + na internetu najdeš víc materiálu) (A můj názor na vb: "syntaxe VB je šílená").
Editováno 16. října 11:34
 
Nahoru Odpovědět  +1 16. října 11:33
Avatar
josef.m
Člen
Avatar
Odpovídá na josef.m
josef.m:

Dik, nevšiml jsem si toho upraveného kódu. Funguje.

Nahoru Odpovědět 16. října 11:43
Nic není nemožné.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 14 zpráv z 14.