Focus behalten

  • VB.NET

Es gibt 23 Antworten in diesem Thema. Der letzte Beitrag () ist von kassor.

    Focus behalten

    Hallo leute,

    vorab - ich quäle mich schon seid tagen mit dem Problem und bekomme es einfach nicht hin zu lösen.
    Zu meinem Problem, ich habe eine listview wo daten ausgewählt werden können. Ist keine Item focusiert und man möchte trotzdem was verändern (die datensätze kan man ändern wenn sie makiert sind) soll er einen Fehler ausgeben <- Geht auch.

    VB.NET-Quellcode

    1. If Not ListView1.Focused() Then
    2. MessageBox.Show("Ein eintrag muss makiert sein um ihn zu bearbeiten!", "Fehler", MessageBoxButtons.OK)
    3. Exit Sub
    4. End If


    Jetzt aber wähle ich etwas aus und möchte ihn gerne bearbeiten und bestätige ihn. Der Focus bleibt nicht. Er verschwindet und dann bekomme ich die obere Messagebox angezeigt. Was muss ich tun damit es hinhaut?



    Mit Lostfocus habe ich es hinbekommen das der Focus inner liste bleibt,aber alles andere was in der Form ist lässt sich nicht mehr anklicken. Mit GotFocus gehts nicht bzw. - ich habe es nicht hinbekommen.

    Danke euch schonmal..
    gruß
    Ich brauche den Focus, sonst gehts nicht. Aber da der Focus verschwindet bringt mir der Index auch nichts. Und HideSelection auf False zu stellen bringt auch nichts, da es nicht wirklich nen Focus ist sondern nur eine Art anzeige des zuletzt selektierten items ist. Weiss keiner wie sich das lösen lässt? ;(
    Okay glaube du weisst nich was ich meine. Also, wie man auf dem Screen sieht, ist es möglich einen eintrag zu wählen und diesen links zu bearbeiten. Wenn man ihn makiert/focusiert ist er Makiert. Sobald man aber links in die Textbox o.ä. klickt verschwindet der Focus. Aber dieser Focus soll bestehen bleiben. Denn ich bin auf diesen Focus angewiesen. Verstanden? Hoffe ja :)
    Du verstehst nicht!

    Warum muss der Focus bleiben?? Focus KANN nur EIN Objekt haben entweder die Liste oder die Textbox.
    Damit der aktuelle ausgewähle Datensatz bearbeitet werden kann, wird mit dem SelectedIndex gearbeitet, der bleibt nämlich bestehen auch wenn das Item den Focus verliert. Ist kein Item markiert, so ist der SelectedIndex -1 und damit eindeutig als NICHT MARKIERT identifizierbar.

    VB.NET-Quellcode

    1. Sub ListBox1_IndexChange
    2. If Not Listbox1.SelectedIndex = -1 Then
    3. Textbox1.Text = ListBox1.Items.SelectedItem.ToString()
    4. End If
    5. End sub
    6. Sub ButtonSave_Click
    7. Listbox1.Items(Listbox1.SelectedIndex) = Textbox1.Text
    8. End Sub


    So würde der einfache Code für deine Notizbearbeiten aussehen.
    Es haut nicht hin. Das bsp. von Dodo ist für die Listbox. Ich habe eine Listview. Sag mir jetzt nicht ich hätte es nicht versucht umzuschreiben, es haut nicht hin.
    In den Beispiel (if abfrage) habe ich verzweifelt iwas gemacht,also bitte einfach übersehen ^^

    VB.NET-Quellcode

    1. If ListView1.FocusedItem.Text = "" Then
    2. MessageBox.Show("Ein Eintrag muss makiert sein um ihn bearbeiten zu können!", "Fehler", MessageBoxButtons.OK)
    3. Exit Sub
    4. Else
    5. connect.Open()
    6. command = connect.CreateCommand
    7. command.CommandText = "UPDATE notiz SET text='" + txtNotizEintrag.Text + "' WHERE text ='" + ListView1.FocusedItem.Text + "'"
    8. command.ExecuteNonQuery() ' Die Query wird ausgeführt
    9. command.Dispose()
    10. connect.Close()
    11. MessageBox.Show("Notiz erfolgreich bearbeitet!", "", MessageBoxButtons.OK, MessageBoxIcon.Information)
    12. Notiztabelleladen()
    13. Application.DoEvents()
    14. chbNotizAuswahl.Checked = False
    15. ListView1.Enabled = True
    16. ListView1.Items.Clear()
    17. Notiztabelleladen()
    18. End If
    Ganz ruhig. Wusste es nicht. Danke..


    Du warst nicht ruhig, du hast uns so hingestellt als ob wir dir das falsche vermitteln wollten und wolltest nicht einsehen dass wir es schon verstanden haben und du den falschen Lösungsansatz hast, du wolltest ja umbedingt bei deinem Focus bleiben. Deswegen habe ich es auch so deutlich geschrieben, quasie um dich wach zu rütteln!

    Selbst wenn ich Multiselection auf False mache gibts Selectedindex nicht


    Es gibt wie, Erfinder sagte, auch nur SelectedIndicies, weil sich der Namespace nicht ändert nur weil man MultiSelect ausgeschaltet hat.

    VB.NET-Quellcode

    1. If ListView1.SelectedIndicies.Length > 0 AndAlso Not ListView1.SelectedIndicies(0) = -1 Then
    2. ' Es ist ein ListView Eintrag markiert
    3. End If

    Dodo schrieb:

    Ganz ruhig. Wusste es nicht. Danke..


    Du warst nicht ruhig, du hast uns so hingestellt als ob wir dir das falsche vermitteln wollten und wolltest nicht einsehen dass wir es schon verstanden haben und du den falschen Lösungsansatz hast, du wolltest ja umbedingt bei deinem Focus bleiben. Deswegen habe ich es auch so deutlich geschrieben, quasie um dich wach zu rütteln!

    Selbst wenn ich Multiselection auf False mache gibts Selectedindex nicht


    Es gibt wie, Erfinder sagte, auch nur SelectedIndicies, weil sich der Namespace nicht ändert nur weil man MultiSelect ausgeschaltet hat.

    VB.NET-Quellcode

    1. If ListView1.SelectedIndicies.Length > 0 AndAlso Not ListView1.SelectedIndicies(0) = -1 Then
    2. ' Es ist ein ListView Eintrag markiert
    3. End If
    Uii, habs glaub verstanden :thumbsup:
    Problem:
    1. .Length gibt es nicht
    2. Ist kein Eintrag makiert und will trotzdem etwas durchführen bekomme ich nen Fehler ?(

    VB.NET-Quellcode

    1. If ListView1.SelectedIndices(0) = -1 Then
    2. MessageBox.Show("Ein Eintrag muss makiert sein um ihn bearbeiten zu können!", "Fehler", MessageBoxButtons.OK)
    3. Exit Sub
    4. Else
    5. connect.Open()
    6. command = connect.CreateCommand
    7. command.CommandText = "UPDATE notiz SET text='" + txtNotizEintrag.Text + "' WHERE text ='" + ListView1.FocusedItem.Text + "'"
    8. command.ExecuteNonQuery() ' Die Query wird ausgeführt
    9. command.Dispose()
    10. connect.Close()
    11. MessageBox.Show("Notiz erfolgreich bearbeitet!", "", MessageBoxButtons.OK, MessageBoxIcon.Information)
    12. Notiztabelleladen()
    13. Application.DoEvents()
    14. chbNotizAuswahl.Checked = False
    15. ListView1.Enabled = True
    16. ListView1.Items.Clear()
    17. Notiztabelleladen()
    18. End If


    VB.NET-Quellcode

    1. InvalidArgument=Value mit dem Wert 0 ist für index ungültig. Parametername: index '// Zeile 1
    Ich habe den Code aus dem Kopf schnell zusammen geschrieben, da kann es durchaus mal vorkommen ohne IntelliSense das mir nicht die richtigen Properties einfallen, aber ich hatte ide Hoffnung gehabt, das sowas auch selbst rausfinden wirst und wir dir nicht alles vorkauen müssen!

    Ich verweise da gerne auf den Spruch in meiner Signatur.