2014-03-28 45 views
-1

我有兩種形式,其中第一種是開始屏幕,您必須在其中編寫一些變量,然後單擊下一步。第二種形式打開,我已經交出了變量,現在我想要生成一個數組,其大小取決於這些變量之一。 通常我寫:在啓動程序後創建一個二維數組C#

int[,] daten = new int[160,160];

,所以我認爲,以下的作品,但它不...

int[,] daten = new int[V,V]; // where V is the variable

編輯: 在我的第一個形式,我有以下代碼:

private void btnWeiter_Click(object sender, EventArgs e) 
     { 
      if (txbRohrdurchmesser.Text != "" && txbMesslanzen.Text != "") 
      { 
       Form1 fu = new Form1(this); 
       fu.ShowDialog();    
      } 
      else 
      { 
       MessageBox.Show("Bitte füllen Sie alle Felder aus!"); 
      } 
     } 

並在第二種形式我有:

public partial class Form1 : Form 
    {  
     Startfenster fh; 
     int Rohrdurchmesser, Messlanzen; 
     int[,] daten = new int[160, 160]; // I want int[,] daten = new int[Rohrdurchmesser, Rohrdurchmesser];   

     public Form1(Startfenster aufrufer) 
     { 
      fh = aufrufer; 
      InitializeComponent();     
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      Rohrdurchmesser = Convert.ToInt32(fh.Controls["txbRohrdurchmesser"].Text); 
      Messlanzen = Convert.ToInt32(fh.Controls["txbMesslanzen"].Text); 
     } 

這裏是錯誤的圖片: http://abload.de/image.php?img=fehlerg0ajv.png

+2

如果'V'在範圍和初始化,我保證工作。 – evanmcdonnal

+2

你需要告訴我們你看到了什麼錯誤。 「不起作用」不是錯誤信息 –

+1

@evanmcdonnal和正確的類型,並在正確的範圍 –

回答

1
public partial class Form1 : Form 
{  
    Startfenster fh; 
    int Rohrdurchmesser, Messlanzen; 
    int[,] daten; //Don't declare size yet 

    public Form1(Startfenster aufrufer) 
    { 
     fh = aufrufer; 
     InitializeComponent();     
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     Rohrdurchmesser = Convert.ToInt32(fh.Controls["txbRohrdurchmesser"].Text); 
     Messlanzen = Convert.ToInt32(fh.Controls["txbMesslanzen"].Text); 

     daten = new int[Rohrdurchmesser, Rohrdurchmesser]; //Define size here 
    } 
2

試試這個,看看它的工作原理 - 然後意識到你要麼有一個範圍的問題,或者你沒有從你的Windows窗體鑄造值整數正確。

int v = 160; 
int[,] daten = new [v, v]; 

Windows窗體傾向於返回字符串,這些字符串需要轉換爲整數。

string val = myTextBox.Text; 
int v = Convert.ToInt32(val); 
+0

我將編輯我的第一篇文章與我的鑄造... :) – user242480

1

PhatWrat有它 - 這裏的一些補充說明:

你應該看到的錯誤消息是: 「一個字段初始不能引用非靜態字段,方法或屬性「 WindowsFormsApplication1.Form1.Rohrdurchmesser」

讓我們解碼什麼它說: 的‘字段初始值’,它的指(錯誤信息也給出了線數)

int[,] daten = new int[Rohrdurchmesser, Rohrdurchmesser];

下一部分是「不能引用非靜態字段,方法或屬性‘WindowsFormsApplications1.Form1.Rohrdurchmesser’。這部分非常簡單。

原因是雙重的。
1st - Rohrdurchmesser沒有初始化 - 它還沒有價值 - 所以如何使用它的值來初始化另一個字段?
第二 - 即使Rohrdurchmesser已初始化,我不相信對字段初始化的順序有任何保證,所以您仍可能最終得到未初始化的變量嘗試初始化另一個變量。

直到很久以後,當Form1_Load運行時,Rohrdurchmesser甚至沒有獲得值。

你需要做的是初始化Rohrdurchmesser初始化後的方法中的daten - 而不是使用字段初始值設定項。

0

公共部分Form1類:表格{

public Form1() 
    { 
     InitializeComponent(); 
    } 
     string x,y; 
     int x1, y1; 
     x=textBox1.Text; 
     y=textBox2.Text; 
     x1 = Convert.ToInt16(x); 
     y1 = Convert.ToInt16(y); 
     int[,] daten = new int[x1, y1];