按钮在按钮上

时间:2012-05-13 12:47:36

标签: c# winforms button

我的winform c#项目有问题。 在我的项目中,我有两个主要功能,一个在运行时创建按钮,另一个功能允许我在运行时移动窗体上的按钮。现在我可以做什么,如果我在其他按钮上有按钮,所以我做了一个功能,取代按钮位置,因为它在开始时但功能会产生问题,如果有人可以帮助我,这将是伟大的!

public void upandunder(Button cBtn1, Button cBtn2)
    {
        if ((cBtn1.Location.X == cBtn2.Location.X) && (cBtn1.Location.Y == cBtn2.Location.Y))
        {
            int placex = cBtn1.Location.X;
            int placey = cBtn1.Location.Y;
            cBtn1.Location.X = cBtn2.Location.Y;
            cBtn1.Location.Y = cBtn2.Location.Y;
            cBtn2.Location.X = placex;
            cBtn2.Location.Y = placey;

        }
    }

3 个答案:

答案 0 :(得分:1)

  

它让我知道errorError 1无法修改'System.Windows.Forms.Control.Location'的返回值,因为它不是变量

正确,Location属性的返回值不可编辑。根据{{​​3}}:

  

因为Point类是Visual Basic中的值类型(Structure,Visual C#中的struct),所以它是按值返回的,这意味着访问该属性会返回一个控件的左上角。因此,调整从此属性返回的X的{​​{1}}或Y属性不会影响PointLeftRight或控件的Top属性值。要调整这些属性,请单独设置每个属性值,或者使用新的Bottom设置Location属性。

因此,您需要将代码重写为以下内容:
(另外,我强烈建议将参数命名为Pointx以外的参数,因为您正在处理函数中具有x和y值的坐标... )

y

甚至更好,只需比较public void upandunder(Button btn1, Button btn2) { if ((btn1.Location.X == btn2.Location.X) && (btn1.Location.Y == btn2.Location.Y)) { Point originalLocation = btn1.Location; btn1.Location = btn2.Location; btn2.Location = originalLocation; } } 属性(Point结构the documentation)返回的两个Location值:

Point

当然,我没有看到它如何完成任何事情。首先,检查按钮是否位于彼此之上(具有完全相同的x坐标和y坐标),然后如果它们相同,则交换位置。他们已经相同的位置 - 您在执行交换代码之前测试了它们。

根据您的函数名称(public void upandunder(Button btn1, Button btn2) { if (btn1.Location == btn2.Location) { Point originalLocation = btn1.Location; btn1.Location = btn2.Location; btn2.Location = originalLocation; } } ,根据标准.NET命名约定应该upandunder)来判断,似乎您希望更改按钮的Z顺序。如果是这种情况,那么您应该调用按钮控件的overloads the == operatorBringToFront方法。

答案 1 :(得分:0)

控件上的Location属性返回一个Point。 Point结构具有您正在使用的X和Y值。我认为您不想直接访问它们,而是想提供新的位置点。

尝试一下(它适用于我的机器)

public void UpAndUnder(Button cBtn1, Button cBtn2)
{
    if (cBtn1.Location == cBtn2.Location.Y)
    {                
        Point oldPoint = new Point(cBtn1.Location.X, cBtn1.Location.Y);
        cBtn1.Location = new Point(cBtn2.Location.X, cBtn2.Location.Y);
        cBtn2.Location = oldPoint;
    }
}

答案 2 :(得分:0)

如果您想将一个按钮放在另一个按钮上,请拨打

button1.BringToFront();

这会改变button1的Z顺序并将其放在所有其他控件上。