2017-06-22 208 views
-2

我在我的c#窗體窗體應用程序中出現錯誤,此錯誤僅在Windows 10上發生,並且程序運行在Windows 7中很好。 以下是不工作的代碼部分。 視覺工作室版本:社區2015 謝謝。Visual Studio錯誤在System.Windows.Forms.dll中發生未處理的類型'System.ArgumentNullException'異常

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 
    public struct Mypizzas 
    { 
     public string mypizzaname; 
     public float mypizzaprice; 
    } 
    public struct Mypizzasordered 
    { 
     public string mypizzaname; 
     public float mypizzaprice; 
     public float QtyOrdered; 

    } 
    string newpizza; 
    Mypizzasordered[] Orderlist = new Mypizzasordered[51]; 
    Single mytotalprice; 
    string numpizzasordered; 

    int countertest; 
    int Mycounter; 


    private void Form1_Load(object sender, EventArgs e) 
    { 

     Mypizzas[] myarrayofpizzas = new Mypizzas[6]; 
     myarrayofpizzas[0].mypizzaname = ("Hawaiian"); 
     myarrayofpizzas[0].mypizzaprice = 3.99f; 
     myarrayofpizzas[1].mypizzaname = "Margherita"; 
     myarrayofpizzas[1].mypizzaprice = 5.99f; 
     myarrayofpizzas[2].mypizzaname = "Chicago Pizza"; 
     myarrayofpizzas[2].mypizzaprice = 4.99f; 
     myarrayofpizzas[3].mypizzaname = "New York Style Pizza"; 
     myarrayofpizzas[3].mypizzaprice = 6.5f; 
     myarrayofpizzas[4].mypizzaname = "Sicilian Pizza"; 
     myarrayofpizzas[4].mypizzaprice = 5.99f; 



     for (Mycounter = 0; Mycounter <= 6; Mycounter++) 
     { 

      listBox1.Items.Add(myarrayofpizzas[Mycounter].mypizzaname); 
      listBox2.Items.Add(myarrayofpizzas[Mycounter].mypizzaprice); 
     } 
    } 

該錯誤發生在這條線:listBox1.Items.Add(myarrayofpizzas [Mycounter] .mypizzaname);

+2

myarrayofpizzas被定義爲MyPizzas [6]。這意味着0-5。你的for循環覆蓋0 - 6.使用for(Mycounter = 0; Mycounter <6; Mycounter ++) ' –

+0

@JayBuckman - 雖然這是真的,但它不會創建一個ArgumentNullException。 –

+1

另外,'myarrayofpizzas'是一個包含6個元素的數組。但是,您只能初始化5個元素。最後一個元素的「mypizzaname」保持爲null。請注意,我並不完全確定這是在Win10下導致ArgumentNullException,但它是可能的... – elgonzo

回答

2

如果這是你的實際代碼,那麼問題是,你只填充5項(0-4)與數據。因此,當您添加第6項(實際上是索引5)時,它的值爲mypizzaname。這是拋出異常的原因。

如果你添加一個額外的比薩餅,這個問題將會消失,但是你將會遇到一個不同的問題,那就是你會得到一個ArgumentOutOfBounds異常,這是由於試圖訪問一個數組索引而導致的存在(尺寸6陣列只能有項0-5,所以訪問項目6實際上是第七項)

最簡單的修復將是改變

for (Mycounter = 0; Mycounter <= 6; Mycounter++) 

for (Mycounter = 0; Mycounter < 5; Mycounter++) 

for (Mycounter = 0; Mycounter <= 4; Mycounter++) 

其他辦法解決它是添加一個額外的比薩餅,改變你的櫃檯。

myarrayofpizzas[5].mypizzaname = "New Pizza"; 
myarrayofpizzas[5].mypizzaprice = 5.99f; 
... 
for (Mycounter = 0; Mycounter < 6; Mycounter++) 
+0

將其更改爲4有效。謝謝。 – Tom

0
public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 
    public struct Mypizzas 
    { 
     public string mypizzaname; 
     public float mypizzaprice; 
    } 
    public struct Mypizzasordered 
    { 
     public string mypizzaname; 
     public float mypizzaprice; 
     public float QtyOrdered; 

    } 
    string newpizza; 
    Mypizzasordered[] Orderlist = new Mypizzasordered[51]; 
    Single mytotalprice; 
    string numpizzasordered; 

    int countertest; 
    int Mycounter; 


    private void Form1_Load(object sender, EventArgs e) 
    { 

     Mypizzas[] myarrayofpizzas = new Mypizzas[6]; 
     myarrayofpizzas[0].mypizzaname = ("Hawaiian"); 
     myarrayofpizzas[0].mypizzaprice = 3.99f; 
     myarrayofpizzas[1].mypizzaname = "Margherita"; 
     myarrayofpizzas[1].mypizzaprice = 5.99f; 
     myarrayofpizzas[2].mypizzaname = "Chicago Pizza"; 
     myarrayofpizzas[2].mypizzaprice = 4.99f; 
     myarrayofpizzas[3].mypizzaname = "New York Style Pizza"; 
     myarrayofpizzas[3].mypizzaprice = 6.5f; 
     myarrayofpizzas[4].mypizzaname = "Sicilian Pizza"; 
     myarrayofpizzas[4].mypizzaprice = 5.99f; 



     for (Mycounter = 0; Mycounter < 6; Mycounter++) 
     { 

      listBox1.Items.Add(myarrayofpizzas[Mycounter].mypizzaname); 
      listBox2.Items.Add(myarrayofpizzas[Mycounter].mypizzaprice); 
     } 
    } 

你循環7次,而不是6 0,1,2,3,4,5,6

+0

當我將6更改爲7時,它仍然會給出錯誤。 – Tom

+0

正如我提到Jay,這將生成一個ArgumentOutOfRange異常,而不是一個ArgumentNullException –

+0

它確實會創建該錯誤,但它不會創建任何錯誤時,我在不同的系統上運行代碼。 – Tom

相關問題