ドラッグした文字を自動的にTextBoxにいれるには

解決


JJJ  2006-10-14 12:57:21  No: 133710

はじめまして、こんにちわ

初めて、VisualBasic2005でアプリケーションを作り始めたのですが、
アプリケーションにWebBrowserをとりこみ、そこからドラッグして
自動的にTextBoxにドラッグした文字を入れるようにしたいのですが
自分の始めたばかりの薄い知識ではどうすることもできず、投降いたしました。

どうか、ご教授の程よろしくお願いいたします。


あん  2006-10-15 18:05:19  No: 133711

で、どこまでできてるの?
どこから答えればいいの?


ヤマ@文系  2006-10-18 02:17:33  No: 133712

textboxのdragenterとdragdropイベントなどをMSDNなど
で調べてみてください。


JJJ  2006-10-18 20:10:58  No: 133713

あんさん、ヤマ@文系さん。
ご返答、ありがとうございます。

あんさんへ>
現在は、WebBrowserでドラッグした部分を手動でドロップしてテキストボックスに入れるようにはしています。

ヤマ@文系>
MSDNで、もうちょっと調べてきます。

御両名とも、アドバイスありがとうございます。


nameless  2006-10-18 22:26:08  No: 133714

テキストボックスの何らかのイベントが発生した際にクリップボードの内容をテキストボックスに出力すればいいだけの事ではないの。


あん  2006-10-19 00:46:11  No: 133715

>クリップボードの内容
クリップボードにはいつコピーするの?


nammeless  2006-10-19 01:41:26  No: 133716

簡単に考えてました。
WEB上の文字をマウスで謎って強調されたら、そのタイミングで入れればいいのではないかと、
[CTRL]+Cでも良いし、VBでイベントが発生すればそこでクリップボードにはするばいいではないかと


あん  2006-10-19 03:22:26  No: 133717

textboxの
AllowDropプロパティをtrueにして
dragenterイベントで
e.Effect = DragDropEffects.Copy
dragdropイベントで
Sender.Text = e.Data.GetData(GetType(System.String))
でとりあえずいけます。

#やっとVS2005ができる環境になった。


JJJ  2006-10-19 08:14:46  No: 133718

nammelesさん、あんさん
御両名とも、いろいろと考えていただきありがとう、ございます。

現在は、下記のように書いているのですが、どうもうまく動作にいたりません。書き方に、間違いがあるのでしょうか。
ドラッグした文字を、左クリックをUPした瞬間にとばすという、自分の動作は下記の書き方では実現できないのでしょうか。

自分でも、いろいろ試してみたいと思います。

「AllowDropプロパティをtrueにして」という、あんさんのご指摘はすでにしてあるのですが……

 
    Private Sub TextBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TextBox1.MouseDown
        TextBox1.DoDragDrop(TextBox1.Text, DragDropEffects.Copy)

    End Sub

    Private Sub TextBox1_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TextBox1.DragEnter
        'ドラッグされている内容が文字列型に変換可能な場合
        If e.Data.GetDataPresent(GetType(String)) Then
            'コピーを許可するようにドラッグ元に通知する
            e.Effect = DragDropEffects.Copy
        End If

    End Sub

    Private Sub TextBox1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TextBox1.DragDrop
        'ドロップされた内容を表示する

        TextBox1.Text = e.Data.GetData(GetType(System.String))
    End Sub

以上です。

いろいろとアドバイスしていただきありがとうございます。


あん  2006-10-19 17:57:42  No: 133719

ブレークポイントを入れて実際実行してるか確認してみてください。


魔界の仮面弁士  2006-10-19 21:15:00  No: 133720

ドラッグというのが、テキスト範囲のドラッグ&ドロップ作業を意味するのか、
それとも単純なマウス選択を意味するのか分かりませんが、とりあえず、
こんな感じでいかがでしょう。

TextBox1, TextBox2, WebBrowser1 を貼っておいてください。

'-----------------
Imports System.Runtime.InteropServices.Marshal
Public Class Form1

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
        WebBrowser1.Navigate("http://www.google.co.jp/")
    End Sub

    Private Sub WebBrowser1_DocumentCompleted(ByVal sender As Object, ByVal e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
        WebBrowser1.Document.AttachEventHandler("onmouseup", AddressOf document_onmouseup)
    End Sub

    Sub document_onmouseup(ByVal sender As Object, ByVal e As EventArgs)
        TextBox1.Clear()
        TextBox2.Clear()

        Dim document As Object = Nothing
        Dim selection As Object = Nothing
        Dim textRange As Object = Nothing
        Try
            document = WebBrowser1.Document.DomDocument
            selection = CallByName(document, "selection", CallType.Get)
            textRange = CallByName(selection, "createRange", CallType.Method)
            TextBox1.Text = CallByName(textRange, "text", CallType.Get).ToString()
            TextBox2.Text = CallByName(textRange, "htmlText", CallType.Get).ToString()
        Finally
            ReleaseObject(textRange)
            ReleaseObject(selection)
            ReleaseObject(document)
        End Try

    End Sub

    Sub ReleaseObject(ByVal o As Object)
        If o IsNot Nothing AndAlso IsComObject(o) Then
            ReleaseComObject(o)
        End If
    End Sub
End Class
'-----------------

# 本当は、onselect イベントあたりを使いたかったんですけど、
# あのイベントは、バブルアップしないんですよね……。


JJJ  2006-10-26 09:06:31  No: 133721

魔界の仮面弁士さん、遅くなりましたがJJJと申します。
魔界の仮面弁士さんのプログラムどおりいたしましたら、自分の想像通りの動きをしてくれました!

大変ありがとうございます。

上記のものを参考に、現在作りたいものを完成させたいと思っております。

今回の質問に答えていただいた、nammelesさん、あんさん、ヤマ@文系さんの御三方もありごうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加