如何使控件可以通过鼠标进行扩展?

时间:2016-09-06 17:17:22

标签: c# winforms

我试图编写一个简单的幻灯片程序。 我有一个名为SlideShowText的类。 我希望它可以通过鼠标扩展,就像在Visual Studio中缩放控件一样。 我希望它有点缀边框。 有帮助吗? (我没有尝试任何东西,因为我是这样的菜鸟)

2 个答案:

答案 0 :(得分:3)

这是Resizer控件:

public partial class Resizer : Control
{
    public Resizer()
    {
        InitializeComponent();
        Size = new System.Drawing.Size(12, 12);
    }

    public Control control { get; set; }
    Point mDown = Point.Empty;

    public Resizer(Control ctl) 
    {
        InitializeComponent();
        control = ctl;
        Size = new System.Drawing.Size(12, 12);
    }

    protected override void OnLayout(LayoutEventArgs levent)
    {
        base.OnLayout(levent);
        if (control != null)
        {
            BackColor = Color.DarkOrange;
            Location = new Point(control.Width - Size.Width, 
                                 control.Height - Size.Height);
            Parent = control;
            BringToFront();
        }
    }

    protected override void OnMouseDown(MouseEventArgs e)
    {
        mDown = e.Location;
        base.OnMouseDown(e);
    }

    protected override void OnMouseUp(MouseEventArgs e)
    {
        Hide();
        base.OnMouseUp(e);
    }

    protected override void OnMouseMove(MouseEventArgs e)
    {
        if (e.Button.HasFlag(MouseButtons.Left))
        {
            Left += -(mDown.X - e.X);
            Top += -(mDown.Y - e.Y);
            control.Size = new Size(Right, Bottom);
        }
        base.OnMouseMove(e);
    }

    protected override void OnPaint(PaintEventArgs pe)
    {
        base.OnPaint(pe);
    }
}

将其添加到项目后,您可以使用它,如下所示:

Resizer rz = null;

private void pictureBox1_DoubleClick(object sender, EventArgs e)
{
    if (rz == null) rz = new Resizer(pictureBox1);  else rz.Show();
}

结果:

enter image description here

答案 1 :(得分:3)

您可以使用鼠标控制任何大小的控件,覆盖其CreateParams属性。

例如

class SizeableRichTextBox : RichTextBox
{
    protected override CreateParams CreateParams
    {
        get
        {
            const int WS_SIZEBOX = 0x40000;
            var cp = base.CreateParams;
            cp.Style |= WS_SIZEBOX;
            return cp;
        }
    }
}

class SizeablePictureBox : PictureBox
{
    protected override CreateParams CreateParams
    {
        get
        {
            const int WS_SIZEBOX = 0x40000;    
            var cp = base.CreateParams;
            cp.Style |= WS_SIZEBOX;    
            return cp;
        }
    }
}

现在它们有一个粗边框,可以用鼠标调整大小。

如果设置SizeablePictureBox参数,ImageLayout.Zoom中的图像比例会自动更改。

var pictureBox = new SizeablePictureBox { Parent = this, Width = 500, Height = 500 };
pictureBox.BackgroundImageLayout = ImageLayout.Zoom;
pictureBox.BackgroundImage = Image.FromFile("pic.jpg");

要更改TextBox中的文字比例,您必须手动计算宽高比并更改字体大小。或者您可以尝试更改ZoomFactor属性的值。