缩放:使用两种形式(Zoom using two forms)

2019-07-04 02:08发布

我在我的项目中的多种形式。 Form1中包含显示JPEG图片框。 在窗体2我有,我想控制在Form1中图像的缩放级别的TrackBar。 为了保持它的简单,我只需要2个或3个缩放级别。 我在设计视图设置PictureBox的公众。 然而,当我尝试引用在窗体2它说,它不存在的图片框。 下面是我使用调用窗体2在Form1的代码

Form2 dataWindow = new Form2();
dataWindow.ShowDialog();

因此,在短期的两件事情我需要的是帮助:

1)从一个单独的形式改变pictureBox1的属性。 2)创建一个简单的缩放公式。

Answer 1:

1)传递一个Form1中引用到窗口2的构造函数:

Form2 dataWindow = new Form2(this);
dataWindow.Show();

...

private form1 as Form1;
public Form2(Form1 frm1)
{
  form1 = frm1;
}

然后在Form2s TrackBar_Scroll事件经由私有成员变量form1中引用的PictureBox: form1.PictureBox1.Property

2) ,便可放大使用一个图片您的图片,这样就可以使用鼠标滚轮放大


更好的方法是事件:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        var form2 = new Form2();
        form2.TrackBarMoved += new Action<int>(ZoomPictureBox);
        form2.ShowDialog();
        form2.TrackBarMoved -= new Action<int>(ZoomPictureBox);

    }

    private void ZoomPictureBox(int zoomFactor)
    {
        pictureBox1.Width = 100 * zoomFactor;
        pictureBox1.Height = 100 * zoomFactor;
    }
}


public partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();
    }

    public event Action<int> TrackBarMoved;

    private void trackBar1_Scroll(object sender, EventArgs e)
    {
        TrackBarMoved(trackBar1.Value);
    }
}


Answer 2:

它被认为是不好的设计允许其他类修改形式的内部控制。 该形式应该是负责所有它的组件。 你不应该永远做任何内部控制公众。 它也被认为是不好的做法对孩子的形式来对父窗体的引用。

要解决这个问题的恰当方式是通过事件。 子窗体, Form2 ,应该定义一个公共事件:

public event Action<int> TrackBarMoved;

Form2时,推力杆移动可以触发该事件,并通过为参数,在跟踪条的位置(如果是有意义的其他人处理一些东西,比如缩放级别,或者其他任何你想要的,那也没关系)。

Form1可以订阅该事件时,它会创建From2和(内内,从改变变焦的图片Form1基础上,跟踪条位置是什么)。



文章来源: Zoom using two forms