2017-02-23 58 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