• ベストアンサー

C# FlowLayoutPanelのコントロール

sean9の回答

  • ベストアンサー
  • sean9
  • ベストアンサー率86% (26/30)
回答No.1

こんにちは。 ソースはざっくりした説明なので、改変してください。 (1)マウスダウン時に移動開始して (2)マウスムーブに合わせて (3)マウスダウン時に移動を終了、マウス位置によってFlowLayoutPanelの何番目かを判断 といった感じでどうでしょうか。 以下のサンプルはflowLayoutPanel1にpictureBox1からpictureBox3の3つのPictureBoxが横並びにある場合になります。 また、picureBox1が1番左にある場合に動かすことができます。 余計なものは入れず、考え方を説明できたらとおもいます。 public partial class Form1 : Form { private bool _onMoving = false; //ドラッグ中かどうか private Point _mouseLocation = new Point(0, 0); private Form _tempBox; //ドラッグ中のPictureBoxを見せるためのフォーム public Form1() { InitializeComponent(); } private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { var pictureBox = sender as PictureBox; //フォームの設定をします。PictureBoxでもいいのですが、半透明処理なども考慮しこちらのほうが楽かと。 //背景にpictureBox1のImageなどを貼り付けてください。 _tempBox = new Form(); _tempBox.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; _tempBox.MinimumSize = new System.Drawing.Size(10, 10); _tempBox.Size = pictureBox.Size; _tempBox.BackColor = pictureBox.BackColor; _tempBox.Visible = true; _tempBox.Opacity = 0.5; _tempBox.ShowInTaskbar = false; _mouseLocation = e.Location; _onMoving = true; } private void pictureBox1_MouseMove(object sender, MouseEventArgs e) { if (_onMoving) { Point location = new Point(MousePosition.X - _mouseLocation.X, MousePosition.Y - _mouseLocation.Y); _tempBox.Location = location; } } private void pictureBox1_MouseUp(object sender, MouseEventArgs e) { //ポジションの判定 //今回は横並びにのみ対応させました。ご自身のFlowLayoutPanelの状況にあわせて判定してください。 int pictureBox2CenterX = pictureBox2.Location.X + pictureBox2.Width / 2; int pictureBox3CenterX = pictureBox3.Location.X + pictureBox3.Width / 2; if (pictureBox2CenterX < e.X && e.X < pictureBox3CenterX) { flowLayoutPanel1.Controls.SetChildIndex(pictureBox1, 1); } else if (pictureBox3CenterX < e.X) { flowLayoutPanel1.Controls.SetChildIndex(pictureBox1, 2); } _onMoving = false; _tempBox.Close(); } } ドラッグ中の描画が不要なようであれば、当然MouseMoveイベントの処理や_tempBox:フォームは要りません。 お役に立てれば幸いです。

tmg_890
質問者

お礼

ありがとうございました!! 並べ替えで詰まっていて参考にさせていただきようやく列と行の両方の並べ替えをすることができました!!!

関連するQ&A

  • コントロールのドラック&ドロップ

    コンニチワ VBでフォームに配置したコントロールを ドラック可能にして フォーム上でドラック&ドロップを 検出してドラック前の位置から ドロップ後の位置にコントロールを 移動させたいのですが どうしてもずれたりして 上手く配置されません どなたか同じようなことをやったことがある方 ベストなやり方 わかる方教えて下さい よろしくお願いします

  • C#:C#のFormから、WindowsのExplorerへのD&Dした時のパスの取得

    C#のプログラム歴1ヵ月の新参者です。 (C,C++の経験はありません。) C#のListViewのアイテムを、WindowsのExplorerに ドラッグ&ドロップしたときの、フォルダパスを C#側で拾いたいのですが、拾い方がわからず困っています。   ネットで検索してみたのですが、WindowsのExplorerから C#側へのドラッグ&ドロップの解説は沢山あるのですが、 Windows Explorerへのドラッグ&ドロップの解説をしてくれる所が、全く見つけられずトホホな状況になっています。 C#だけでの実装では無理なのでしょうか? すいませんが、よろしくお願いいたします。

  • VisualBasic2008を使い、画像のドラッグ&ドロップをしたい

    VisualBasic2008を使い、画像のドラッグ&ドロップをしたい まだVB2008の勉強を始めたばかりの初心者です。 PictureBox1~PictureBox4に表示されている画像をドラッグ&ドロップでPictureBox5にコピーして表示させたいのですが、どのようなプログラムにすればいいのかが分かりません。 PictureBox5には何度でもPictureBox1~PictureBox4の画像をドラッグ&ドロップで入れ替えができ、PictureBox1~PictureBox4の画像はそのままになるようにしたいです。 よろしくお願いします。

  • .netのAjaxでドラッグアンドドロップ

    AtlasがAjaxControlToolkitに包含されるようになったときいておりますが、 AjaxControlToolkitを使って、web上でドラッグアンドドロップを実装しようとしています。 間違えないようにコメントしておきますが、 ここで申しております、ドラッグアンドドロップは コントロールをマウスで移動できるようにすることです。 iGoogleのようなコントロールの移動です。 しかしながら、なかなか参考サイトなどがみつからず、 実装できておりません。 asp.net2.0でドラッグアンドドロップの実装方法はどうしたらいいのでしょうか?

  • C++でのドラッグ&ドロップ

    メッシュのドラッグ&ドロップをやりたいのですが、いまいちやり方がわかりません。 マウスのレイとの接触判定はできているのですが、3Dにおいてドラッグ&ドロップを行うにはどのようにすればよいのでしょうか?

  • PictureBoxのドラッグ&ドロップについて

    PictureBox1をドラッグ&ドロップしてPictureBox2に画像を移したいのですが、 どうすればいいのかわかりません。 テキストボックスでの作り方だったらわかるのですが・・・。 教えて下さい。

  • ドラッグ&ドロップについて

    現在、Webブラウザ上でJavaScriptを使ったツリー表示をしており、 ツリー内のフォルダに対してドラッグ&ドロップを実装したいと思っています。 そこで質問なのですが、マウスの座標を取得して実装する様な方法では無く、ドラッグ・ドロップ対象のIDを取得して実装する方法はあるのでしょうか? ブラウザはIE6対応のみを想定しています。 ご存知でしたら、どうぞ宜しくお願いします。

  • 「右クリック でドラッグ&ドロップ」で縦横の移動できるようにしたいです。

    お世話になります。 VB6で質問です。   form [ 1000*1000 ] << A picturebox [300*300 ] << B [A]の真中に[B]を配置して、[B]を「右クリック でドラッグ&ドロップ」で縦横の移動できるようにしたいです。 下記のようにしたところ、マウスのみで動いてしまい「右クリック」が関連しません。 Private Sub picturebox_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)  picturebox.Top = Y End Sub  この場合のプログラムを教えて欲しいです。

  • c:\をドラッグ&ドロップしたい

    DragAcceptFiles,DragQueryFile,DragFinish及びWM_DROPFILES でディレクトリをドラッグ&ドロップしてディレクトリ名を受け取るプログラムを作ったのですが c:\,a:\等のドラッグ&ドロップが拒否されます。 どうしたらc:\などをドラッグ&ドロップしたときそのディレクトリ名を受け取れるようにできるでしょうか?

  • マックでコントロールパネルフォルダにスクリーンセイバーの

    ファイルをドラッグドロップしろっていうんですけど、 コントロールパネルにドロップってどうするんですかね ダウンロードしてきたスクリーンセイバーの テキストに書いてあるんです。

    • ベストアンサー
    • Mac