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:フォームは要りません。
お役に立てれば幸いです。
この回答へのお礼
お礼日時:2013/03/19 18:28
ありがとうございました!!
並べ替えで詰まっていて参考にさせていただきようやく列と行の両方の並べ替えをすることができました!!!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Windows 10 タスクバー上に表示されたアドレス・ボックス? 1 2023/04/30 17:37
- モニター・ディスプレイ マルチモニタでのカーソルの動き方 1 2022/06/15 14:59
- Illustrator(イラストレーター) プロパティパネルを元に戻せますか 3 2022/05/07 16:44
- Photoshop(フォトショップ) 【Photoshop】画像拡大時に急激に画面外まで拡大してしまうのを制御したい 1 2023/08/25 03:04
- Excel(エクセル) Excel ヘルプの[ロック解除]、<c0>、</c0> の意味は何ですか? 1 2023/02/20 16:58
- Word(ワード) 表の縦罫線を移動するピッチ 1 2022/10/12 12:24
- Word(ワード) Word文書のドラッグ操作による配置調整。 1 2022/10/16 19:24
- マウス・キーボード マウスのクリックボタンの調子が良くないです。 ドラッグ&ドロップしようとするとよく開いてしまいます。 4 2022/03/23 18:20
- マウス・キーボード タッチパッドでドラッグしたい 1 2023/08/08 20:41
- Excel(エクセル) エクセルのワークシートを簡単に別ファイルにする方法は? 5 2023/01/11 14:50
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【C#】別フォームも同時に閉じ...
-
C# フォームを閉じてもプログラ...
-
C#で、ある条件でFormが自動で...
-
エクセルで作った新しいウイン...
-
グラフの交点の求め方(Excel)
-
「アイテムは収集されました」...
-
フォントの大きさ
-
c言語でキーボードから2点の座...
-
コントロールの書式設定で、“コ...
-
ドロップダウンリストのフォン...
-
コンボボックス内の文字サイズ変更
-
UWSCで特定のChromeのタブをア...
-
PCで「使用可能な場合はグラフ...
-
Excel VBAでのMultipageの選択
-
MFCのタイマーのつかい方を教え...
-
エクセルである点からの距離で...
-
Excelの上下を固定したい
-
ダイアログの上のテキストボッ...
-
NVIDIAのシェーダーキャッシュ
-
VBAのフォント変更(エクセルか...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【C#】別フォームも同時に閉じ...
-
C#で、ある条件でFormが自動で...
-
C# フォームを閉じてもプログラ...
-
C# 自分自身のコントロールを指...
-
C#でテキストボックスをクリッ...
-
別フォームからdatagridviewの削除
-
C# FlowLayoutPanelのコントロ...
-
OutLookのメール受信通知 (C#)
-
【C#】サブフォームからメイン...
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
グラフの交点の求め方(Excel)
-
フォントの大きさ
-
コンボボックス内の文字サイズ変更
-
コントロールの書式設定で、“コ...
-
エクセルのコントロールツール...
-
マインクラフト(pc版)で座標...
-
VBAのフォント変更(エクセルか...
-
検索の画面がでなくなってしま...
-
勝手にウィンドウが開いて止ま...
おすすめ情報