回答編集履歴

2

見直しキャンペーン中

2023/07/18 21:43

投稿

TN8001
TN8001

スコア9350

test CHANGED
@@ -1,195 +1,99 @@
1
- 直接の原因は`SetLeft`と`SetTop`が逆だからでしょうか(LeftがX)
1
+ 直接の原因は`SetLeft`と`SetTop`が逆だからでしょうか(`Left``X`
2
+ `e.GetPosition(this)`は、`e.GetPosition(View)`のほうがいいでしょう(レイアウト次第ですが)
2
3
 
3
- `e.GetPosition(this)``e.GetPosition(View)`のほういいでょう(レイアウト次第ですが
4
+ あと`rc.Width``rc.Height`がマイナスになった(左や上にドラッグとき、エラーになりませんか?
4
5
 
5
- あと`rc.Width` `rc.Height`がマイナスになった(左や上にドラッグした)とき、エラーになりませんか?
6
-
7
-
8
-
9
- ```C#
6
+ ```cs
10
-
11
7
  using System.Windows;
12
-
13
8
  using System.Windows.Controls;
14
-
15
9
  using System.Windows.Input;
16
-
17
10
  using System.Windows.Media;
18
-
19
11
  using System.Windows.Shapes;
20
12
 
13
+ namespace Questions237403
14
+ {
15
+ public partial class MainWindow : Window
16
+ {
17
+ private enum MUD { U, D }
18
+ private struct VD
19
+ {
20
+ public Point MouseD;
21
+ public Point MouseM;
22
+ }
23
+ private Canvas View;
24
+ private Rectangle rc;
25
+ private MUD Jotai;
26
+ private VD vd;
21
27
 
28
+ public MainWindow()
29
+ {
30
+ //InitializeComponent();
22
31
 
32
+ View = new Canvas();
33
+ View.Background = Brushes.White;
34
+ View.MouseDown += Canvas_MouseDown;
23
- namespace Questions237403
35
+ View.MouseMove += View_MouseMove;
36
+ View.MouseUp += Canvas_MouseUp;
37
+ AddChild(View);
24
38
 
25
- {
39
+ rc = new Rectangle();
26
-
27
- public partial class MainWindow : Window
40
+ rc.Stroke = new SolidColorBrush(Color.FromRgb(255, 0, 0));
28
-
29
- {
41
+ rc.Opacity = 0.5;
30
-
31
- private enum MUD { U, D }
42
+ rc.StrokeThickness = 3;
32
-
43
+ rc.Width = 0;
33
- private struct VD
44
+ rc.Height = 0;
34
-
35
- {
36
-
37
- public Point MouseD;
45
+ View.Children.Add(rc);
38
-
39
- public Point MouseM;
40
-
41
46
  }
42
47
 
48
+ private void Canvas_MouseDown(object sender, MouseButtonEventArgs e)
49
+ {
50
+ vd.MouseD = e.GetPosition(View);
43
- private Canvas View;
51
+ vd.MouseM = vd.MouseD;
52
+ Canvas.SetLeft(rc, vd.MouseD.X);
53
+ Canvas.SetTop(rc, vd.MouseD.Y);
54
+ rc.Width = vd.MouseM.X - vd.MouseD.X;
55
+ rc.Height = vd.MouseM.Y - vd.MouseD.Y;
44
56
 
45
- private Rectangle rc;
46
-
47
- private MUD Jotai;
48
-
49
- private VD vd;
50
-
51
-
52
-
53
- public MainWindow()
54
-
55
- {
56
-
57
- //InitializeComponent();
58
-
59
-
60
-
61
- View = new Canvas();
62
-
63
- View.Background = Brushes.White;
64
-
65
- View.MouseDown += Canvas_MouseDown;
66
-
67
- View.MouseMove += View_MouseMove;
68
-
69
- View.MouseUp += Canvas_MouseUp;
70
-
71
- AddChild(View);
72
-
73
-
74
-
75
- rc = new Rectangle();
76
-
77
- rc.Stroke = new SolidColorBrush(Color.FromRgb(255, 0, 0));
78
-
79
- rc.Opacity = 0.5;
57
+ Jotai = MUD.D;
80
-
81
- rc.StrokeThickness = 3;
82
-
83
- rc.Width = 0;
84
-
85
- rc.Height = 0;
86
-
87
- View.Children.Add(rc);
88
-
89
58
  }
90
59
 
60
+ private void View_MouseMove(object sender, MouseEventArgs e)
61
+ {
62
+ if(Jotai == MUD.D)
63
+ {
64
+ vd.MouseM = e.GetPosition(View);
65
+ var w = vd.MouseM.X - vd.MouseD.X;
66
+ var h = vd.MouseM.Y - vd.MouseD.Y;
91
67
 
68
+ if(0 <= w)
69
+ {
70
+ Canvas.SetLeft(rc, vd.MouseD.X);
71
+ rc.Width = w;
72
+ }
73
+ else
74
+ {
75
+ Canvas.SetLeft(rc, vd.MouseD.X + w);
76
+ rc.Width = -w;
77
+ }
92
78
 
93
- private void Canvas_MouseDown(object sender, MouseButtonEventArgs e)
79
+ if(0 <= h)
94
-
95
- {
80
+ {
96
-
97
- vd.MouseD = e.GetPosition(View);
98
-
99
- vd.MouseM = vd.MouseD;
100
-
101
- Canvas.SetLeft(rc, vd.MouseD.X);
102
-
103
- Canvas.SetTop(rc, vd.MouseD.Y);
81
+ Canvas.SetTop(rc, vd.MouseD.Y);
104
-
105
- rc.Width = vd.MouseM.X - vd.MouseD.X;
82
+ rc.Height = h;
106
-
83
+ }
84
+ else
85
+ {
107
- rc.Height = vd.MouseM.Y - vd.MouseD.Y;
86
+ Canvas.SetTop(rc, vd.MouseD.Y + h);
108
-
109
-
110
-
111
- Jotai = MUD.D;
87
+ rc.Height = -h;
112
-
88
+ }
89
+ }
113
90
  }
114
91
 
115
-
116
-
117
- private void View_MouseMove(object sender, MouseEventArgs e)
92
+ private void Canvas_MouseUp(object sender, MouseButtonEventArgs e)
118
-
119
93
  {
120
-
121
- if(Jotai == MUD.D)
94
+ Jotai = MUD.U;
122
-
123
- {
124
-
125
- vd.MouseM = e.GetPosition(View);
95
+ vd.MouseM = e.GetPosition(View);
126
-
127
- var w = vd.MouseM.X - vd.MouseD.X;
128
-
129
- var h = vd.MouseM.Y - vd.MouseD.Y;
130
-
131
-
132
-
133
- if(0 <= w)
134
-
135
- {
136
-
137
- Canvas.SetLeft(rc, vd.MouseD.X);
138
-
139
- rc.Width = w;
140
-
141
- }
142
-
143
- else
144
-
145
- {
146
-
147
- Canvas.SetLeft(rc, vd.MouseD.X + w);
148
-
149
- rc.Width = -w;
150
-
151
- }
152
-
153
-
154
-
155
- if(0 <= h)
156
-
157
- {
158
-
159
- Canvas.SetTop(rc, vd.MouseD.Y);
160
-
161
- rc.Height = h;
162
-
163
- }
164
-
165
- else
166
-
167
- {
168
-
169
- Canvas.SetTop(rc, vd.MouseD.Y + h);
170
-
171
- rc.Height = -h;
172
-
173
- }
174
-
175
- }
176
-
177
96
  }
178
-
179
-
180
-
181
- private void Canvas_MouseUp(object sender, MouseButtonEventArgs e)
182
-
183
- {
184
-
185
- Jotai = MUD.U;
186
-
187
- vd.MouseM = e.GetPosition(View);
188
-
189
- }
190
-
191
97
  }
192
-
193
98
  }
194
-
195
99
  ```

1

2020/01/25 08:46

投稿

TN8001
TN8001

スコア9350

test CHANGED
@@ -78,7 +78,7 @@
78
78
 
79
79
  rc.Opacity = 0.5;
80
80
 
81
- rc.StrokeThickness = 10;
81
+ rc.StrokeThickness = 3;
82
82
 
83
83
  rc.Width = 0;
84
84