替换按钮位置

本文关键字:位置 按钮 替换 | 更新日期: 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 .