質問するログイン新規登録

回答編集履歴

1

実装すべき点について追記

2020/05/01 12:13

投稿

KOZ6.0
KOZ6.0

スコア2740

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
+ ```