none
動的に生成したオブジェクトのドラッグに関して RRS feed

  • 質問

  • 動的に生成したボタン(name は Button乱数) Button456542 みたいな感じです。

    と動的に生成した線があります。線のname は LineShapeButton5465-Button65531 これはButton5465とButton65531を繋いでいる線です。

    ボタンには下のコードを埋め込みドラッグできるようにしています。

        Private Sub Button_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)

     

            If e.Button = MouseButtons.Left Then

                IsDragging = True

                DiffPoint = New Point(e.X, e.Y)

            End If

     

        End Sub

        Private Sub Button_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)

            If IsDragging Then

     

                Dim Dest As Point

     

                Dest = CType(sender, System.Windows.Forms.Button).Location + New Size(e.X, e.Y) - New Size(DiffPoint)

    !!!!   tmp = "LineShape" + CType(sender, System.Windows.Forms.Button).Name + ".*"

    !!!!   tmp.X1 = Dest.X1

    !!!!   tmp.Y1 = Dest.Y1

                CType(sender, System.Windows.Forms.Button).Location = Dest

     

            End If

     

        End Sub

     

    ボタンドラッグしたときに線のX1,Y1も一緒にドラッグできるようにしたいのですが。。。

    伝えるのが下手で申し訳ありません

    上記のコードの!!!の追加分のようなことがしたいです。どのようにしたらよろしいでしょうか???

    tmp = "LineShape" + CType(sender, System.Windows.Forms.Button).Name + ".*"

    ドラッグするときは ボタンに付いてる線全部ドラッグしないといけないため LineShapeButton35421-任意の番号って意味で”.*”をつけてるんですが。。。。

     

    伝わるでしょうか?><

     

    2011年11月14日 12:04

回答

  • 以下のようにすればコントロールを列挙することができますので、それを元に操作することができます。

    第20回 コントロールをまとめる方法
    http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard20.htm

    Windowsフォーム上のすべてのコントロールを列挙するには?
    http://www.atmarkit.co.jp/fdotnet/dotnettips/224controls/controls.html

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    • 回答としてマーク mo12mo34 2011年11月15日 14:35
    2011年11月15日 4:39
    モデレータ
  • 動的に生成したボタン(name は Button乱数) Button456542 みたいな感じです。

    乱数で大丈夫ですか?乱数は、必ず別の数字が出てくるわけではないですよ?


    今存在しないオブジェクト.location
    を定義するにはどのようにしたらいいですか??
    わかりにくくてすいません。

    わかりにくいと思うなら、相手に必ず伝わると思える工夫をしてください。そうでなければ、時間がかかるだけです。たいていの質問者は、質問内容が伝わらないことが数回続くとスレッドを放棄する傾向があります。「ネットで聞けばすぐにわかる」というのは幻想で、ネット聞いてすぐにわかるためには、聞きたいことを確実に相手に伝える努力が必要です。日本は「相手の言いたいことを理解する」事が重視されますが、相手のことが何もわからないネットでは「自分の伝えたいことを漏れなく伝える」ことの方が重要です。問題が解決しなくて困るのは質問者本人なのですから、自分が伝えるべき事をしっかり伝える努力をしてください。

    「今存在しないオブジェクト」って、何ですか?これが何を意味しているのかわかりません。今存在していなくても、「ここに、動的に生成するオブジェクトを入れる」という入れ物を用意しておかなければならないのではないですか?その入れ物は、動的に生成するオブジェクトと同じ型ではないですか?

    というか、「!!!!」が付いている行とは違っていますけど?

    で、「tmp = "LineShape" + CType(sender, System.Windows.Forms.Button).Name + ".*"」となっているのでそれについての回答は示したはずですが、本当の質問は、そこではないのですね?
    「ドラッグするときは ボタンに付いてる線全部ドラッグしないといけない」
    こっちが本題ですね?つまり、「対象のボタンに付属しているライン全て」を検索する方法ですね?
    この場合、「ボタンに、付属する線を持たせる」か、「線に、付属するボタンを持たせる」か、「線とボタンの組み合わせテーブルを用意する」かのいずれかです。あるいは、「ボタンの位置と、線の位置から、対象となる線を求める」か。どれがいいかは、今どの様にオブジェクトを管理しているかがわからないので、何とも言えません。


    Jitta@わんくま同盟
    • 回答としてマーク mo12mo34 2011年11月15日 14:35
    2011年11月15日 13:02

すべての返信

  • こういうことですが?→検索結果(「コントロール 検索」で検索)
    Jitta@わんくま同盟
    • 編集済み Jitta 2011年11月14日 12:10 検索結果をよく見たら、先頭の1つしかなかった
    2011年11月14日 12:09
  • 今存在しないオブジェクト.location

    を定義するにはどのようにしたらいいですか??

    わかりにくくてすいません。

    . を押しても、その段階でそれは存在していないので、怒られてしまします。

    2011年11月14日 15:25
  • 以下のようにすればコントロールを列挙することができますので、それを元に操作することができます。

    第20回 コントロールをまとめる方法
    http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard20.htm

    Windowsフォーム上のすべてのコントロールを列挙するには?
    http://www.atmarkit.co.jp/fdotnet/dotnettips/224controls/controls.html

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    • 回答としてマーク mo12mo34 2011年11月15日 14:35
    2011年11月15日 4:39
    モデレータ
  • 動的に生成したボタン(name は Button乱数) Button456542 みたいな感じです。

    乱数で大丈夫ですか?乱数は、必ず別の数字が出てくるわけではないですよ?


    今存在しないオブジェクト.location
    を定義するにはどのようにしたらいいですか??
    わかりにくくてすいません。

    わかりにくいと思うなら、相手に必ず伝わると思える工夫をしてください。そうでなければ、時間がかかるだけです。たいていの質問者は、質問内容が伝わらないことが数回続くとスレッドを放棄する傾向があります。「ネットで聞けばすぐにわかる」というのは幻想で、ネット聞いてすぐにわかるためには、聞きたいことを確実に相手に伝える努力が必要です。日本は「相手の言いたいことを理解する」事が重視されますが、相手のことが何もわからないネットでは「自分の伝えたいことを漏れなく伝える」ことの方が重要です。問題が解決しなくて困るのは質問者本人なのですから、自分が伝えるべき事をしっかり伝える努力をしてください。

    「今存在しないオブジェクト」って、何ですか?これが何を意味しているのかわかりません。今存在していなくても、「ここに、動的に生成するオブジェクトを入れる」という入れ物を用意しておかなければならないのではないですか?その入れ物は、動的に生成するオブジェクトと同じ型ではないですか?

    というか、「!!!!」が付いている行とは違っていますけど?

    で、「tmp = "LineShape" + CType(sender, System.Windows.Forms.Button).Name + ".*"」となっているのでそれについての回答は示したはずですが、本当の質問は、そこではないのですね?
    「ドラッグするときは ボタンに付いてる線全部ドラッグしないといけない」
    こっちが本題ですね?つまり、「対象のボタンに付属しているライン全て」を検索する方法ですね?
    この場合、「ボタンに、付属する線を持たせる」か、「線に、付属するボタンを持たせる」か、「線とボタンの組み合わせテーブルを用意する」かのいずれかです。あるいは、「ボタンの位置と、線の位置から、対象となる線を求める」か。どれがいいかは、今どの様にオブジェクトを管理しているかがわからないので、何とも言えません。


    Jitta@わんくま同盟
    • 回答としてマーク mo12mo34 2011年11月15日 14:35
    2011年11月15日 13:02
  • おっしゃられるとおりです。すいません><

    もっと的確に伝わるようにします。

    2011年11月15日 14:35
  • ここはあなたの疑問を解決する場ではなく、あなたが持っている情報を、他の人の情報と交換する場です。あなたが、「こういう所がわからない」という“情報”は、他にも同じようなところがわからない人がいるかもしれないという、貴重な情報なのです。それに対して、「どの様に説明すればわかってもらえるか」というのも、やはり貴重な情報です。
    わかりますか?解説記事をブログや本に書く人にとっては、「この様なネタがある」「このように書けば理解してもらいやすい」という、大変貴重な情報なんですよ。

    仕事をする上でも、上司や顧客に分かるように説明することが必要なはずです。そういうわけで、途中で投げ出さないでいただきたいです。


    Jitta@わんくま同盟
    2011年11月16日 13:24