C# 孩子们成长到左上角而不是右下角

C# 孩子们成长到左上角而不是右下角,c#,winforms,.net-4.0,panel,C#,Winforms,.net 4.0,Panel,只有当控件向下或向右过度生长,而不是向左上过度生长时,您如何处理自动滚动 我解释:在winform中放置一个面板,并在面板内放置一个按钮。将按钮的位置设为负数,如-20,-20。滚动条不会出现 ,但答案建议移动到WPF,这在本项目中不是一个选项。这不是滚动的工作方式。面板的逻辑左上角始终为(0,0)。并且始终在左上角可见,滚动条位于0 只需将面板的AutoScrollMinSize属性放大20x20,并将所有控件移动+20、+20,即可获得与所需结果完全相同的结果。这当然会使按钮可见。并且调整了

只有当控件向下或向右过度生长,而不是向左上过度生长时,您如何处理
自动滚动

我解释:在winform中放置一个面板,并在面板内放置一个按钮。将按钮的位置设为负数,如-20,-20。滚动条不会出现


,但答案建议移动到WPF,这在本项目中不是一个选项。

这不是滚动的工作方式。面板的逻辑左上角始终为(0,0)。并且始终在左上角可见,滚动条位于0

只需将面板的AutoScrollMinSize属性放大20x20,并将所有控件移动+20、+20,即可获得与所需结果完全相同的结果。这当然会使按钮可见。并且调整了滚动条,滚动条的范围更大。如果使用AutoScroll,则只需移动控件即可


控件必须始终具有正位置。X和Y值才能在其容器内可见。

滚动并非如此。面板的逻辑左上角始终为(0,0)。并且始终在左上角可见,滚动条位于0

只需将面板的AutoScrollMinSize属性放大20x20,并将所有控件移动+20、+20,即可获得与所需结果完全相同的结果。这当然会使按钮可见。并且调整了滚动条,滚动条的范围更大。如果使用AutoScroll,则只需移动控件即可


控件必须始终具有正位置。X和Y值才能在其容器内可见。

您可以通过在(0,0)处添加按钮,然后将面板的显示区域向下和向右移动,来模拟在左上区域的面板上添加按钮

    private void Form1_Load(object sender, EventArgs e)
    {
        btnResetPosition_Click(sender, e);
    }

    private void btnMoveToUpperLeft_Click(object sender, EventArgs e)
    {
        //Set Panel View to upper-left before moving around buttons
        panel1.VerticalScroll.Value = panel1.VerticalScroll.Value = panel1.VerticalScroll.Minimum;
        panel1.HorizontalScroll.Value = panel1.HorizontalScroll.Value = panel1.HorizontalScroll.Minimum;

        //Move button1 to "upper-left"
        button1.Location = new Point(0, 0);

        //Adjust "static" controls right and down to simulate moving button1
        button2.Location = new Point(button2.Location.X + 200, button2.Location.Y + 200);
        button3.Location = new Point(button3.Location.X + 200, button3.Location.Y + 200);

        //Scroll to show "static" controls in panel
        panel1.VerticalScroll.Value = panel1.VerticalScroll.Value = panel1.VerticalScroll.Maximum;
        panel1.HorizontalScroll.Value = panel1.HorizontalScroll.Value = panel1.HorizontalScroll.Maximum;
    }

    private void btnResetPosition_Click(object sender, EventArgs e)
    {
        //Set Panel View to upper-left before moving around buttons
        panel1.VerticalScroll.Value = panel1.VerticalScroll.Value = panel1.VerticalScroll.Minimum;
        panel1.HorizontalScroll.Value = panel1.HorizontalScroll.Value = panel1.HorizontalScroll.Minimum;

        //Line up all three buttons
        button1.Location = new Point(19, 17);  // 19 and 17 are used so that when panel scrollbars appear, "static" controls appear to stay in the same place
        button2.Location = button1.Location;
        button2.Location = new Point(button1.Location.X, button1.Location.Y + 29);
        button3.Location = button2.Location;
        button3.Location = new Point(button2.Location.X, button2.Location.Y + 29);
    } 
与其设置按钮的位置(-20,-20),不如将其设置为(0,0)。 接下来,遍历面板中的所有其他控件,并将它们分别向右移动20像素和向下移动20像素。 最后,向下向右滚动面板

    private void Form1_Load(object sender, EventArgs e)
    {
        btnResetPosition_Click(sender, e);
    }

    private void btnMoveToUpperLeft_Click(object sender, EventArgs e)
    {
        //Set Panel View to upper-left before moving around buttons
        panel1.VerticalScroll.Value = panel1.VerticalScroll.Value = panel1.VerticalScroll.Minimum;
        panel1.HorizontalScroll.Value = panel1.HorizontalScroll.Value = panel1.HorizontalScroll.Minimum;

        //Move button1 to "upper-left"
        button1.Location = new Point(0, 0);

        //Adjust "static" controls right and down to simulate moving button1
        button2.Location = new Point(button2.Location.X + 200, button2.Location.Y + 200);
        button3.Location = new Point(button3.Location.X + 200, button3.Location.Y + 200);

        //Scroll to show "static" controls in panel
        panel1.VerticalScroll.Value = panel1.VerticalScroll.Value = panel1.VerticalScroll.Maximum;
        panel1.HorizontalScroll.Value = panel1.HorizontalScroll.Value = panel1.HorizontalScroll.Maximum;
    }

    private void btnResetPosition_Click(object sender, EventArgs e)
    {
        //Set Panel View to upper-left before moving around buttons
        panel1.VerticalScroll.Value = panel1.VerticalScroll.Value = panel1.VerticalScroll.Minimum;
        panel1.HorizontalScroll.Value = panel1.HorizontalScroll.Value = panel1.HorizontalScroll.Minimum;

        //Line up all three buttons
        button1.Location = new Point(19, 17);  // 19 and 17 are used so that when panel scrollbars appear, "static" controls appear to stay in the same place
        button2.Location = button1.Location;
        button2.Location = new Point(button1.Location.X, button1.Location.Y + 29);
        button3.Location = button2.Location;
        button3.Location = new Point(button2.Location.X, button2.Location.Y + 29);
    } 
要运行示例代码,请将“panel1”添加到名为“Form1”的表单中。将panel1的大小更改为(111115)。将三个按钮添加到panel1中,分别称为“button1”、“button2”和“button3”。将两个按钮添加到表单中,分别称为“BtnoVetoupPerLeft”和“btnResetPosition”。将示例代码粘贴到表单1.cs中


请注意,移动滚动条的代码看起来很有趣,因为存在一个错误,即仅将滚动条设置为该值会导致滚动条不更新。(

您可以通过在(0,0)处添加按钮,然后将面板的显示区域向下和向右移动,来模拟将按钮添加到面板左上方区域

    private void Form1_Load(object sender, EventArgs e)
    {
        btnResetPosition_Click(sender, e);
    }

    private void btnMoveToUpperLeft_Click(object sender, EventArgs e)
    {
        //Set Panel View to upper-left before moving around buttons
        panel1.VerticalScroll.Value = panel1.VerticalScroll.Value = panel1.VerticalScroll.Minimum;
        panel1.HorizontalScroll.Value = panel1.HorizontalScroll.Value = panel1.HorizontalScroll.Minimum;

        //Move button1 to "upper-left"
        button1.Location = new Point(0, 0);

        //Adjust "static" controls right and down to simulate moving button1
        button2.Location = new Point(button2.Location.X + 200, button2.Location.Y + 200);
        button3.Location = new Point(button3.Location.X + 200, button3.Location.Y + 200);

        //Scroll to show "static" controls in panel
        panel1.VerticalScroll.Value = panel1.VerticalScroll.Value = panel1.VerticalScroll.Maximum;
        panel1.HorizontalScroll.Value = panel1.HorizontalScroll.Value = panel1.HorizontalScroll.Maximum;
    }

    private void btnResetPosition_Click(object sender, EventArgs e)
    {
        //Set Panel View to upper-left before moving around buttons
        panel1.VerticalScroll.Value = panel1.VerticalScroll.Value = panel1.VerticalScroll.Minimum;
        panel1.HorizontalScroll.Value = panel1.HorizontalScroll.Value = panel1.HorizontalScroll.Minimum;

        //Line up all three buttons
        button1.Location = new Point(19, 17);  // 19 and 17 are used so that when panel scrollbars appear, "static" controls appear to stay in the same place
        button2.Location = button1.Location;
        button2.Location = new Point(button1.Location.X, button1.Location.Y + 29);
        button3.Location = button2.Location;
        button3.Location = new Point(button2.Location.X, button2.Location.Y + 29);
    } 
与其设置按钮的位置(-20,-20),不如将其设置为(0,0)。 接下来,遍历面板中的所有其他控件,并将它们分别向右移动20像素和向下移动20像素。 最后,向下向右滚动面板

    private void Form1_Load(object sender, EventArgs e)
    {
        btnResetPosition_Click(sender, e);
    }

    private void btnMoveToUpperLeft_Click(object sender, EventArgs e)
    {
        //Set Panel View to upper-left before moving around buttons
        panel1.VerticalScroll.Value = panel1.VerticalScroll.Value = panel1.VerticalScroll.Minimum;
        panel1.HorizontalScroll.Value = panel1.HorizontalScroll.Value = panel1.HorizontalScroll.Minimum;

        //Move button1 to "upper-left"
        button1.Location = new Point(0, 0);

        //Adjust "static" controls right and down to simulate moving button1
        button2.Location = new Point(button2.Location.X + 200, button2.Location.Y + 200);
        button3.Location = new Point(button3.Location.X + 200, button3.Location.Y + 200);

        //Scroll to show "static" controls in panel
        panel1.VerticalScroll.Value = panel1.VerticalScroll.Value = panel1.VerticalScroll.Maximum;
        panel1.HorizontalScroll.Value = panel1.HorizontalScroll.Value = panel1.HorizontalScroll.Maximum;
    }

    private void btnResetPosition_Click(object sender, EventArgs e)
    {
        //Set Panel View to upper-left before moving around buttons
        panel1.VerticalScroll.Value = panel1.VerticalScroll.Value = panel1.VerticalScroll.Minimum;
        panel1.HorizontalScroll.Value = panel1.HorizontalScroll.Value = panel1.HorizontalScroll.Minimum;

        //Line up all three buttons
        button1.Location = new Point(19, 17);  // 19 and 17 are used so that when panel scrollbars appear, "static" controls appear to stay in the same place
        button2.Location = button1.Location;
        button2.Location = new Point(button1.Location.X, button1.Location.Y + 29);
        button3.Location = button2.Location;
        button3.Location = new Point(button2.Location.X, button2.Location.Y + 29);
    } 
要运行示例代码,请将“panel1”添加到名为“Form1”的表单中。将panel1的大小更改为(111115)。将三个按钮添加到panel1中,分别称为“button1”、“button2”和“button3”。将两个按钮添加到名为“BtnoVetoupPerLeft”和“btnResetPosition”的表单中。将示例代码粘贴到Form1.cs中


请注意,移动滚动条的代码看起来很有趣,因为有一个错误,将滚动条设置为该值会导致滚动条不更新。()

表单向上和向左的增长是否真的会将所有控件向右和向下移动并调整大小?控件的左上角总是用坐标(0,0),所以每当你把某物放在负坐标中时,屏幕上就看不见。你可以自己试试。无论是面板还是形状都不会长大。我只希望当面板的子控件的位置为负值时,面板上会出现滚动条。你认为有可能吗?@Rafael我认为你做不到。所有的
可见区域
始终包含(0,0)作为可能的最左上点。所有(-x,-y)点都将不在视图中。我真不明白你为什么想要这样的东西?因为坐标只是相对的。Hi@king king发生的事情是,我允许用户动态创建控件,并将它们放置在面板中。偶尔,控件的放置方式会使X或Y坐标为负数。我以前从来没有注意过这样一个事实:卷轴只在右上角起作用。。。直到现在我还需要它。现在我读了你们所有人的评论,它的可见区域从0,0开始听起来很合理。这是我昨天的课。表单的上下增长不是真的会左右移动所有控件并调整大小吗?控件的左上角总是用坐标(0,0),所以每当你把某物放在负坐标中时,屏幕上就看不见。你可以自己试试。无论是面板还是形状都不会长大。我只希望当面板的子控件的位置为负值时,面板上会出现滚动条。你认为有可能吗?@Rafael我认为你做不到。所有的
可见区域
始终包含(0,0)作为可能的最左上点。所有(-x,-y)点都将不在视图中。我真不明白你为什么想要这样的东西?因为坐标只是相对的。Hi@king king发生的事情是,我允许用户动态创建控件,并将它们放置在面板中。偶尔,控件的放置方式会使X或Y坐标为负数。我以前从来没有注意过这样一个事实:卷轴只在右上角起作用。。。直到现在我还需要它。现在