回答編集履歴
1
実装すべき点について追記
answer
CHANGED
@@ -4,4 +4,60 @@
|
|
4
4
|
こういうツールがあったりします。
|
5
5
|
|
6
6
|
「TouchToolkit for WinForms」
|
7
|
-
[https://www.grapecity.co.jp/developer/controls/winforms/touchtoolkit](https://www.grapecity.co.jp/developer/controls/winforms/touchtoolkit)
|
7
|
+
[https://www.grapecity.co.jp/developer/controls/winforms/touchtoolkit](https://www.grapecity.co.jp/developer/controls/winforms/touchtoolkit)
|
8
|
+
|
9
|
+
#追記
|
10
|
+
|
11
|
+
実装しなければならない点は3つあると思います。
|
12
|
+
|
13
|
+
(1) マウスが押されたら、Panel1 の Capture を true にし、マウスが離されるまでの動きに Panel1 の位置を追従させる。
|
14
|
+
|
15
|
+
(2) マウスが離されたら、スライドさせて消すのか、元に戻すのかの判定。
|
16
|
+
|
17
|
+
マウスの動きを記録し、どのくらいの速さでスライドさせるのかの判断が難しいです。
|
18
|
+
ここを誤ると違和感のある動作になってしまいます。
|
19
|
+
|
20
|
+
(3) AnimateWindow をつかって Panel1 をスライドする.
|
21
|
+
|
22
|
+
これは以下にサンプルを書きます。
|
23
|
+
AnimateWindow の使い方についてはどこかのサイトに載っているでしょう。
|
24
|
+
ボタン1つとパネルをフォームに張り付けて、以下のコードを実行してください。
|
25
|
+
ボタンを押すと、パネルが左から右にスライドして消えます。
|
26
|
+
```C#
|
27
|
+
namespace QA257985
|
28
|
+
{
|
29
|
+
using System;
|
30
|
+
using System.Windows.Forms;
|
31
|
+
using System.Runtime.InteropServices;
|
32
|
+
|
33
|
+
public partial class Form1 : Form
|
34
|
+
{
|
35
|
+
public Form1()
|
36
|
+
{
|
37
|
+
InitializeComponent();
|
38
|
+
}
|
39
|
+
|
40
|
+
private const int
|
41
|
+
AW_NONE = 0,
|
42
|
+
AW_HOR_POSITIVE = 0x00000001,
|
43
|
+
AW_HOR_NEGATIVE = 0x00000002,
|
44
|
+
AW_VER_POSITIVE = 0x00000004,
|
45
|
+
AW_VER_NEGATIVE = 0x00000008,
|
46
|
+
AW_CENTER = 0x00000010,
|
47
|
+
AW_HIDE = 0x00010000,
|
48
|
+
AW_ACTIVATE = 0x00020000,
|
49
|
+
AW_SLIDE = 0x00040000,
|
50
|
+
AW_BLEND = 0x00080000;
|
51
|
+
|
52
|
+
[DllImport("user32.dll")]
|
53
|
+
private static extern bool AnimateWindow(IntPtr hWnd, int dwTimeMSec, int dwFlags);
|
54
|
+
|
55
|
+
private void button1_Click(object sender, EventArgs e)
|
56
|
+
{
|
57
|
+
panel1.Visible = true;
|
58
|
+
AnimateWindow(panel1.Handle, 400, AW_HIDE | AW_SLIDE | AW_HOR_POSITIVE);
|
59
|
+
panel1.Visible = false;
|
60
|
+
}
|
61
|
+
}
|
62
|
+
}
|
63
|
+
```
|