【问题标题】:Create, Drag drop and resize controls on runtime在运行时创建、拖放和调整控件大小
【发布时间】:2013-04-22 06:36:28
【问题描述】:

我正在尝试创建一个表单,其中包含以编程方式创建的面板和能够拖放和调整大小的控件,就像 Microsoft Visual Studio IDE 一样。

我创造了这样的东西。应该有这么多的线(蓝色的)和这么多的盒子(黄色的),我可以在蓝线内移动黄色的盒子。一切都可以在设计时使用定义的控件。

这里有源代码

    public partial class Form1 : Form
{
    bool allowResize = false;
    public Form1()
    {
        InitializeComponent();           

        panel1.AllowDrop = true;
        panel2.AllowDrop = true;
        panel3.AllowDrop = true; 
        panel4.AllowDrop = true;

        panel1.DragEnter += panel_DragEnter;
        panel2.DragEnter += panel_DragEnter;
        panel3.DragEnter += panel_DragEnter;
        panel4.DragEnter += panel_DragEnter;


        panel1.DragDrop += panel_DragDrop;
        panel2.DragDrop += panel_DragDrop;
        panel3.DragDrop += panel_DragDrop;
        panel4.DragDrop += panel_DragDrop;

        panelMove.MouseDown += panelMove_MouseDown;        

    }

    void panelMove_MouseDown(object sender, MouseEventArgs e)
    {
        panelMove.DoDragDrop(panelMove, DragDropEffects.Move);
    }

    void panel_DragEnter(object sender, DragEventArgs e)
    {
        e.Effect = DragDropEffects.Move;
    }

    void panel_DragDrop(object sender, DragEventArgs e)
    {
        ((Panel)e.Data.GetData(typeof(Panel))).Parent = (Panel)sender;
    }

    private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
    {
        allowResize = true;
    }

    private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
    {
        allowResize = false;
    }

    private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
    {
        if (allowResize)
        {
            this.panelMove.Height = pictureBox1.Top + e.Y;
            this.panelMove.Width = pictureBox1.Left + e.X;
        }
    }       
}

但我不知道如何在运行时创建这些控件(蓝色和黄色框)。

【问题讨论】:

  • 创建自己的设计师从来都不是一个错误。 VS 让它看起来太容易了,但这是一项非常大量的工作。至少在你自己的程序中利用现有的设计器,检查这个magazine article
  • 我可以推荐 WPF 吗?它更加强大和可定制。看看this Diagram Designer
  • @HighCore 我没试过,但看起来值得一试

标签: c# winforms visual-studio-2010 drag-and-drop resize


【解决方案1】:

您应该检查ControlAnchor 属性。 Anchor 允许控件在运行时自动调整大小。

使用 Anchor 属性来定义控件如何自动 调整其父控件的大小。将控件锚定到其 父控件确保锚定边缘保持不变 父控件相对于父控件边缘的位置 控件被调整大小。

您可以将控件锚定到其容器的一个或多个边缘。为了 例如,如果您有一个带有 Anchor 属性值的 Button 的 Form 设置为 Top 和 Bottom,Button 被拉伸以保持 到窗体的顶部和底部边缘的锚定距离作为 窗体的高度增加了。

MSDN:Control.Anchor

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    相关资源
    最近更新 更多