替换按钮位置
本文关键字:位置 按钮 替换 | 更新日期: 2023-09-27 18:34:36
我的 C# winform 项目有问题。
在我的项目中,我有一个功能,如果按钮在同一区域,则可以将按钮的位置切换到其旧位置。
private void myText_MouseUp(Object sender, MouseEventArgs e( {
Point q = new Point(0, 0);
Point q2 = new Point(0, 0);
bool flag = false;
int r = 0;
foreach (Control p in this.Controls)
{
for (int i = 0; i < counter; i++)
{
if (flag)
{
if (p.Location.X == locationx[i] && p.Location.Y == locationy[i])
{
oldx = e.X;
oldy = e.Y;
flag = true;
r = i;
}
}
}
}
foreach (Control p in this.Controls)
{
for (int j = 0; j < counter; j++)
{
if ((locationx[j] == p.Location.X) && (locationy[j] == p.Location.Y))
{
Point arrr = new Point(oldx, oldy);
buttons[j].Location = arrr;
buttons[r].Location = new Point(locationx[j], locationy[j]);
}
}
}
}
The problem with this code is that if they are in the same area, the buttons do not switch their locations. Instead they goes to the last button location.
如果有人能帮助我,那对我有很大帮助:)
if
语句的计算结果始终为 true。这意味着最终的j
循环将执行以下操作:
// last time round the i loop, i == counter-1
// and q == new Point(locationx[counter-1], locationy[counter-1])
for (int j = 0; j < counter; j++)
{
Point q2 = new Point(locationx[j], locationy[j]);
buttons[i].Location = q2;
buttons[j].Location = q;
}
这样做的最终结果是每个按钮的Location
都设置为 q
,即
new Point(locationx[counter-1], locationy[counter-1])
为什么if
语句总是计算为true
.好吧,首先让我们看一下if
语句中的几个or
子句:
|| ((q.Y >= q2.Y) && (q.X <= q2.X))
|| ((q.Y >= q2.Y) && (q.X == q2.X))
这相当于
|| ((q.Y >= q2.Y) && (q.X <= q2.X))
包含==
测试的行对条件的最终结果绝对没有影响。事实上,所有包含==
的行都可以类似地处理。这留下:
|| ((q.Y >= q2.Y) && (q.X <= q2.X))
|| ((q.Y >= q2.Y) && (q.X >= q2.X))
|| ((q.Y <= q2.Y) && (q.X >= q2.X))
|| ((q.Y <= q2.Y) && (q.X <= q2.X))
我们可以凝结
|| ((q.Y >= q2.Y) && (q.X <= q2.X))
|| ((q.Y >= q2.Y) && (q.X >= q2.X))
到
|| ((q.Y >= q2.Y)
和类似
|| ((q.Y <= q2.Y) && (q.X >= q2.X))
|| ((q.Y <= q2.Y) && (q.X <= q2.X))
与
|| ((q.Y <= q2.Y)
合
|| ((q.Y >= q2.Y)
|| ((q.Y <= q2.Y)
您可以看到if
条件的计算结果始终为 true
.