このSystem.Windows.Forms.Panelを有効にして、ユーザーがクリックしてドラッグした場合にウィンドウをにドラッグできるようにします。
これはできますか?複数のイベントを実装する必要がありますか?
私にとって最適なソリューションは、管理されていないコードを使用することです。これにより、HatSoftによって投稿された回答とは異なり、ウィンドウの動きがスムーズになります。
パネルの動きでウィンドウをドラッグするための3つの小さなステップ
using System.Runtime.InteropServices;
クラス内にこれらの6行を追加します
public const int WM_NCLBUTTONDOWN = 0xA1;
public const int HT_CAPTION = 0x2;
[DllImportAttribute("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
[DllImportAttribute("user32.dll")]
public static extern bool ReleaseCapture();
PanelのMouseMoveイベントは次のようになります。
private void panel1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
ReleaseCapture();
SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
}
}
少し遅れて投稿しました:)、将来また必要になるかもしれないことを誰が知っていますか。
パネルのMouseMoveイベントを使用してそれを達成することができます
例は次のようになります(申し訳ありませんがテストしていません)
private void panel1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
this.Location = new Point(Cursor.Position.X + e.X , Cursor.Position.Y + e.Y);
}
}
ここに貼り付けたこのコンポーネントを確認することをお勧めします。
これは、フォームにドロップしてから、フォーム内をドラッグしてフォームをドラッグできるコンポーネントです。
現在、パネル用に設定されています。VS C#ちょうどめちゃくちゃ私が望んでいたように私のために働くようです左クリックが押されている間、アプリケーションの左上隅をマウスの位置に設定します。
public form1()
{
InitializeComponent();
this.panel2.MouseMove += new MouseEventHandler(panel2_MouseMove);
}
public const int WM_NCLBUTTONDOWN = 0xA1;
public const int HT_CAPTION = 0x2;
[DllImportAttribute("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
private void panel2_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
Point loc1 = MousePosition;
this.Location = loc1;
}
}
Bravoのコードは完全に正常に機能しますが、移動したいパネルのパネルの->プロパティ->イベントセクションでMouseMoveイベントを明示的に有効にするまで、これを機能させることができませんでした。