はじめまして、こんにちわ
初めて、VisualBasic2005でアプリケーションを作り始めたのですが、
アプリケーションにWebBrowserをとりこみ、そこからドラッグして
自動的にTextBoxにドラッグした文字を入れるようにしたいのですが
自分の始めたばかりの薄い知識ではどうすることもできず、投降いたしました。
どうか、ご教授の程よろしくお願いいたします。
で、どこまでできてるの?
どこから答えればいいの?
textboxのdragenterとdragdropイベントなどをMSDNなど
で調べてみてください。
あんさん、ヤマ@文系さん。
ご返答、ありがとうございます。
あんさんへ>
現在は、WebBrowserでドラッグした部分を手動でドロップしてテキストボックスに入れるようにはしています。
ヤマ@文系>
MSDNで、もうちょっと調べてきます。
御両名とも、アドバイスありがとうございます。
テキストボックスの何らかのイベントが発生した際にクリップボードの内容をテキストボックスに出力すればいいだけの事ではないの。
>クリップボードの内容
クリップボードにはいつコピーするの?
簡単に考えてました。
WEB上の文字をマウスで謎って強調されたら、そのタイミングで入れればいいのではないかと、
[CTRL]+Cでも良いし、VBでイベントが発生すればそこでクリップボードにはするばいいではないかと
textboxの
AllowDropプロパティをtrueにして
dragenterイベントで
e.Effect = DragDropEffects.Copy
dragdropイベントで
Sender.Text = e.Data.GetData(GetType(System.String))
でとりあえずいけます。
#やっとVS2005ができる環境になった。
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
以上です。
いろいろとアドバイスしていただきありがとうございます。
ブレークポイントを入れて実際実行してるか確認してみてください。
ドラッグというのが、テキスト範囲のドラッグ&ドロップ作業を意味するのか、
それとも単純なマウス選択を意味するのか分かりませんが、とりあえず、
こんな感じでいかがでしょう。
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と申します。
魔界の仮面弁士さんのプログラムどおりいたしましたら、自分の想像通りの動きをしてくれました!
大変ありがとうございます。
上記のものを参考に、現在作りたいものを完成させたいと思っております。
今回の質問に答えていただいた、nammelesさん、あんさん、ヤマ@文系さんの御三方もありごうございました。
ツイート | ![]() |