2012-02-09 6 views
3

「私はJavascriptでマウスをクリックしてイメージを配置するにはどうしたらいいですか? Javaには小さなスニペットしかありませんでした。私のJava知識よりもはるかに大きい。そして、それは私が過去1週間で答えを見つけるのに最も近いところです。vb.netを使用してマウスボタンをクリックすると、画像を一度に配置/ドロップできますか?

ここに私がしたいことがあります(それは可能かどうか分かりません): 3つのボタンを備えたパネルとツールストリップがあります。各ボタンは異なる画像を表します。私はボタンをクリックして(一度)パネルに移動し、マウスボタンをクリックするたびにクリックした場所の画像をドロップします。これは、同じボタンまたは他のボタンの1つをクリックすると終了します。私は毎回画像をパネルにドラッグしたくない。言い換えれば、ボタンは押されたままであり、イベント/アクションはアクティブのままである。

ご協力いただければ幸いです。

+0

Javascript!= Java – colithium

答えて

2

ここではアプリケーションの例を示します。これは、ToolStripを使用したフォームと、各ボタンに画像が追加された2つのボタンです。各ボタンのキープロパティはCheckOnClick=Trueで、ボタンを押したままにします。

ToolStripのラジオボタンのような機能がないため、ItemClickedイベントで処理した他のToolStripButtonsを自分自身で「チェックを外す」必要があります。

Public Class Form1 
    Private _ActiveImage As Image = Nothing 

    Private Class ImagePoint 
    Public Location As Point 
    Public Image As Image 

    Public Sub New(ByVal image As Image, ByVal location As Point) 
     Me.Image = image 
     Me.Location = location 
    End Sub 
    End Class 

    Private _Images As New List(Of ImagePoint) 

    Public Sub New() 
    InitializeComponent() 
    Me.DoubleBuffered = True 
    End Sub 

    Private Sub Form1_Paint(ByVal sender As Object, ByVal e As PaintEventArgs) Handles MyBase.Paint 
    For Each imageItem As ImagePoint In _Images 
     e.Graphics.DrawImage(imageItem.Image, imageItem.Location) 
    Next 
    End Sub 

    Private Sub ToolStrip1_ItemClicked(ByVal sender As Object, ByVal e As ToolStripItemClickedEventArgs) Handles ToolStrip1.ItemClicked 
    For Each toolButton As ToolStripButton In ToolStrip1.Items.OfType(Of ToolStripButton)() 
     If toolButton.CheckOnClick Then 
     If e.ClickedItem.Equals(toolButton) Then 
      _ActiveImage = e.ClickedItem.Image 
     Else 
      toolButton.Checked = False 
     End If 
     End If 
    Next 
    End Sub 

    Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) Handles MyBase.MouseDown 
    If _ActiveImage IsNot Nothing AndAlso e.Button = MouseButtons.Left Then 
     _Images.Add(New ImagePoint(_ActiveImage, e.Location)) 
     Me.Invalidate() 
    End If 
    End Sub 
End Class 

この実施例は、単にどの位置に配置し、ペイントイベントがちょうどリストをループして画像を描画した画像を保持する単純なクラスを使用します。

画像を削除する場合は、画像をペイントする前にe.Graphics.Clear(Color.White)に電話する必要があります。

+0

個人的な経験から、すべてのペイントイベントのすべてをゼロから再描画するのは、最もシンプルなシーンを除いて、通常は悪い考えです。何かがフォームの上にドラッグされたときに、通常、多くのちらつきを取得し、無駄な作業を実行します。それを一度Bitmapに描画することは、方法です。しかし、それ以外にも、私の答えに記述されているコードを書いています。だから+1 – colithium

+0

@colithiumだからこそ私は不正行為をし、コンストラクタに 'Me.DoubleBuffered = True'を追加しました。 :-) +1右後ろ。 – LarsTech

+0

LarsTechありがとうございました。私は初心者ですので、コードをコピーしてtoolstrip1を挿入して、どのようなエラーや手がかりを得るかを確認しました。考えてみたら、どこに画像を追加するのか分かります。何も起こりません...エラーや手掛かりはありません。それで、あなたのコードに1つのイメージを使った例を私に見せてもらえますか? – UBel

1

ボタンのUIについては、ラジオボタン/チェックボックスの代替スタイルを確認してください。彼らはあなたが必要とするもののように聞こえる "トグルボタン"モードを持っています。

パネル上のマウスダウンイベントを検出し、座標を取得し、イメージコントロールを作成し、そのイメージのコピーを配置する動作を実行できますが、より良いアプローチがあります。

単一の画像コントロールでパネルを塗りつぶします(サイズ変更を処理するように塗りつぶします。画像コントロールは常にパネルと同じサイズにする必要があります)。イメージコントロールと同じサイズの新しいビットマップを作成し、関連付けます(Imageプロパティを設定します)。ビットマップ(Graphics.FromImage())のGraphicsオブジェクトを取得します。それを背景色(Color.White?)でクリア()します。

スタートアップ時に3つの画像をプリロードし、異なるボタンが選択されるたびに「アクティブなもの」を選択するコードを書き込んでください。マウスダウンイベントでは、クリックの座標を簡単に取得できます。 myGraphics.DrawImage(...)を使用して、その場所のアクティブなイメージをビットマップに描画します。その後、ビットマップをファイルに保存したり、必要に応じて何かを実行したりすることができます。これらのコンセプトのすべてには、Googleの例がたくさんあります。

イメージを「ドロップ」した後(イメージを再配置するなど)に操作したい場合は、ドロップした場所と場所を追跡するデータ構造を維持する必要があります。ポイントとイメージの参照を持つ単純なクラスで十分です。各ドロップは、これらのオブジェクトをリスト(Of ...)に追加する必要があります。次に、「現在のマウスの位置にある画像は?」などのコードを記述する必要があります。これは、リストを反復し、点/矩形交差テストを実行することによって達成できます。

+0

お返事ありがとうございます。スニペットの例を提供できますか?私は初心者であり、あなたの提案についてどうやって行くのか分かりません。 – UBel

0
Private Sub ToolStripSound_Click(sender As Object, e As EventArgs) Handles ToolStripSound.Click 

    If ToolStripSound.Checked = False Then 
     ToolStripSound.Checked = True 
    Else 
     ToolStripSound.Checked = False 
    End If 


End Sub 

Private Sub ToolStripSound_CheckedChanged(sender As Object, e As EventArgs) Handles ToolStripSound.CheckedChanged 

    ' ToolStripSound.Checked = True 
    If ToolStripSound.Checked = True Then 
     Me.ToolStripSound.Image = Global.Traffic_Lights.My.Resources.Resources.Oxygen_Icons_org_Oxygen_Status_audio_volume_high 
    Else 
     Me.ToolStripSound.Image = Global.Traffic_Lights.My.Resources.Resources.Oxygen_Icons_org_Oxygen_Status_audio_volume_muted 
    End If 

End Sub 
関連する問題