从课堂传递和获取数据

时间:2017-02-23 14:50:18

标签: c# winforms class

我有2个表单,form1form2。在form1中我调用form2,在那里我输入2个数字,一个用于高度和一个图片框的宽度。然后我想将这些数据从form2传递到form1,在那里我创建了具有所述尺寸的图片框。
然后我想将高度和宽度存储到类中,然后从form1访问该信息 这是我的代码:

Form1

namespace NPA_projekt
{
    public partial class Form1 : Form
    {
        private Form2 f2 = new Form2();

        image img = new image();

        public Form1()
        {
            InitializeComponent();
        }

        private void newToolStripMenuItem_Click(object sender, EventArgs e)
        {
            f2.ShowDialog();
        }

        private void btnTest_Click(object sender, EventArgs e)
        {
            pbMainArea.Width = img.width;
            pbMainArea.Height = img.length;
        }
    }

}    

窗体2

    namespace NPA_projekt
{
    public partial class Form2 : Form
    {
        image img = new image();

        public Form2()
        {
            InitializeComponent();
        }

        //reset btn
        private void button1_Click(object sender, EventArgs e)
        {
            nudWidth.Value = 640;
            nudLength.Value = 400;
        }

        //cancel btn
        private void button3_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        //ok btn
        private void btnOK_Click(object sender, EventArgs e)
        {
            img.width = Convert.ToInt32(nudWidth.Value);
            img.length = Convert.ToInt32(nudLength.Value);
            this.Close();
        }
    }
}

班级形象

namespace NPA_projekt
{
    class image
    {
        public int width = 0;
        public int length = 0;
    }
}

当我想在form2中使用时,存储在form1中的值会设置为原始值。有人可以详细说明发生了什么。 谢谢大家!

1 个答案:

答案 0 :(得分:0)

img被宣布两次。进入Form1并再次进入Form2。当您在img中设置Form2的宽度和高度时,您要为Form2Form1中声明的图像实例设置它,而不是img。您需要将Form1中的Form2显示为img并对其执行操作。

因此,请在Form1 public {/ p>中设置 public image img {get; set;} public Form1() { InitializeComponent(); img = new image(); }

Form2

然后你需要在Parent中访问它(一种方式应该是表单的 private void btnOK_Click(object sender, EventArgs e) { var form1 = (Form1)this.Parent form1.img.width = Convert.ToInt32(nudWidth.Value); form1.img.length = Convert.ToInt32(nudLength.Value); this.Close(); } 属性):

img

我还没有对此进行全面测试,但这种方法是有效的。消除混淆的关键是摆脱Form2中的Form1声明,并意识到您需要从Form2

访问MessageBox.Show("Your text here", "Information", MessageBoxButtons.OK, MessageBoxIcon.None);