2017-02-23 55 views
0

我有2种形式,form1form2。在form1中,我调用form2,在那里输入2个数字,一个用于高度和一个picturebox的宽度。然后我想从form2form1的数据,在那里我创建与所述大小的图片框。
然后,我想将高度和宽度存储到课程中,然后从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,被设置为初始值,当我想在中使用它们时。有人可以详细说明发生了什么。 谢谢大家!

+0

将'img'公开为Form2的属性,例如'public image Img {get ; private void set;}'然后在Form1中调用'f2.ShowDialog();'调用,通过'image img = f2.Img;'获取'img'实例' – dcg

回答

0

img被宣告两次。一旦在Form1,并再次在Form2。当您将img的宽度和高度设置为Form2时,您将其设置为您在Form2而不是Form1中声明的图像实例。您需要使Form1中的imgForm2可见并对其执行操作。

因此,请imgForm1市民:

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(); 
    } 

我的天堂” t全部测试完毕,但这种方法是有效的。消除混淆的关键是摆脱在Form2中的img声明,并意识到您需要访问Form1Form2

+0

你的代码给了我这个错误:Inconsistent accessibility:property type 'image'不如property'Form2.img'可访问 – rozman

+0

声音像'image'类型声明是受限制的。尝试将它公开为公共类图像{....'另外,为什么你有一个'Form2.img'属性?那是你需要删除的那个。 – DevNoob

+0

我将它设置为'public class iamge {....}',它现在不会给我这个错误。但现在,当我想从numericupdown设置一些值到宽度和长度(在图像类)时,我得到错误“对象引用未设置为对象的实例”。我研究了它的含义,但我不知道如何解决它。另外,感谢您的帮助! – rozman

相关问题