VisualBasic kopieren und einfügen in vb.net

Lübke

Fleet Admiral
Registriert
Aug. 2007
Beiträge
21.162
ich arbeite grad an einem program, dass ich mit den funktionen kopieren und einfügen ausstatten will. ich weis, dass mit der maus auch kopieren und einfügen geht, aber ich möchte es halt gern auch per button wie z. b. in word, excel und co. ermöglichen. allerdings gestaltet sich das weit schwieriger als angenommen.
hat jemand eine idee, wie man soetwas realisieren kann?
erstes problem ist bereits, dass durch klick auf den button der fokus weg vom makierten text hin zum button springt und das program somit nicht mehr weis, was es eigentlich kopieren soll...
 
Das realisierst du am besten über die Zwischenablage (Clipboard), google doch mal danach VB.net Zwischenablage ... wenn du konkrete Probleme bei der Umsetzung hast, wird dir hier bestimmt geholfen.
 
naja, ich hab tatsächlich n konkretes problem wie oben beschrieben. nämlich dass ich nicht weis, wie ich innerhalb des programs per button-click einen vorher makierten text lesen kann, weil die makierung ja im moment des button-klicks weg ist. genau daran scheitert es ja. bei google hab ich auch keine sinnvollen antworten gefunden. es wird zwar oft beschrieben, wie man daten aus einer datei kopiert, aber das ist ja kein kunststück...
 
Die Markierung sollte beim Button-Klick nicht verschwinden... das einzige, was passieren sollte, ist dass dein Eingabefeld den Fokus verliert... kann es sein, dass die Markierung nut angezeigt wird, so lange das Eingabefeld den Fokus besitzt?
Was für ein Eingabefeld nutzst du denn?
 
Du kannst nicht verhindern das der Focus auf dem Textfeld bleibt
 
du meinst das wahrscheinlich andersrum oder? der fokus ist dann ja auf dem button (button-click ereignes eben) es sind diverse textfelder vorhanden, sodass das programm nicht mehr weis von wo es eine kopie machen soll.
gleiches gillt auch fürs einfügen: wie kann ich dem programm sagen, dass es den inhalt der zwischenablage in das textfeld einfügen sollen, dass vor dem button angeklickt war?
 
Zuletzt bearbeitet:
Du könntest noch auf das "Leave"-Ereignis bei den einzelen Textfeldern zugreifen, dann bekommste mit wann das Control den Focus verliert

oder

Kuck dir mal dir Clipboard-Klasse auf der MSDN an
 
Ich verstehe gar nicht, wieso du so ein Problem mit dem Fokus hast oO
Es ist doch sch... egal, ob dein Textfeld den Fokus verliert (geht ja gar nicht anders), wenn du auf eine andere Schaltfläche drückst.

Das ist in etwa wie wenn du sagst du kannst keine Aspirin nehmen weil du Angst vor Spritzen hast...
 
@1668mib: und wie müsste dann der code lauten bei sagen wir mal 10 textfeldern (z. b. txtA bis txtJ)wenn du beliebig zwischen den feldern kopieren willst? wie kannst du dem programm sagen in welchem feld es lesen soll und in welchem schreiben? wenn ich nur aus einem feld lesen könnte und nur in eins schreiben gäbs ja kein problem. aber wie wenn nicht durch fokusieren kannst du ein feld zur laufzeit(!) bestimmen?

@ichhalt123: das mit dem leave-ereignis klingt interessant. wie genau arbeitet das? ich muss dazu sagen, dass das mein erstes programm ist und ich bis jetzt praktisch noch keine kenne von der materie hab...
 
Code:
Public Class Form1

    Private lastTextBox As System.Windows.Forms.TextBox

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Clipboard.SetText(lastTextBox.SelectedText)
        lastTextBox.Focus()
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        lastTextBox.Paste()
        lastTextBox.Focus()
    End Sub

    Private Sub TextBox_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.Leave, TextBox2.Leave, TextBox3.Leave
        lastTextBox = sender
    End Sub
End Class

Bei den TextBoxen eben als Leave-Ergebnis TextBox_Leave einstellen...
Ist auch nicht 100% sauber programmiert, da fehlen ein paar Sicherheitsabfragen, oder zumindest sollte lastTextBox besser initialisiert werden

Edit:
Ach ja, Button1 kopiert, Button2 fügt ein... aber das müsste ja offensichtlich sein...
 
danke, das war ein super tip :)
hatte mir das viel komplexer vorgestellt.
allerdings hab ich noch ein kleines problem damit: das programm wird mit dem fehler " der objektverweis wurde nicht auf eine objektinstanz festgelegt"
dabei wird auf die zeile "windows.forms.clipboard.SetText(lastTextBox.SelectedText)" verwiesen. ich hatte schon versucht dim clipboard as new clipboard zu deklarieren, aber das war auch sinnlos. wo liegt da der fehler?
beim einfügen sieht man übrigends, dass er tatsächlich aus der zwischenablge einfügt, bevor das programm angehalten wird.
 
Hmm vielleicht sollte lastTextBox halt auf Gültigkeit überprüft werden, oder mit einem sinnvollen Wert intialisiert

Die Gültigkeitsprüfung müsste natürlich vor den Aufrufen von
Clipboard.SetText(...)
und
lastTextBox.Pase()
stattfinden und insgesamt dann etwa so aussehen:

Code:
Public Class Form1

    Private lastTextBox As System.Windows.Forms.TextBox = Nothing

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If lastTextBox Is Nothing Then
            Exit Sub
        End If
        Clipboard.SetText(lastTextBox.SelectedText)
        lastTextBox.Focus()
    End Sub

    Private Sub TextBox_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.Leave, TextBox2.Leave, TextBox3.Leave
        lastTextBox = sender
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        If lastTextBox Is Nothing Then
            Exit Sub
        End If
        lastTextBox.Paste()
        lastTextBox.Focus()
    End Sub
End Class
 
Zurück
Oben