2016-09-15 78 views
6

我有一個項目,我不得不採取在namesweightsheights輸入並付諸陣列,並將它們顯示爲TextBox這樣顯示多個陣列

name = "..." 
weight = "..." 
height= "..." 

我已經能夠填充我的數組,但我不明白如何輸出它像上面的例子。目前我的輸出是所有名稱,那麼所有的權重,然後所有的高度。有人可以解釋我將如何使它能夠像例子一樣顯示嗎?我到目前爲止的代碼是

private void ShowButton_Click(object sender, EventArgs e) 
{   
    txtShow.Text += string.Join(System.Environment.NewLine, nameArray); 
    txtShow.Text += string.Join(System.Environment.NewLine, weightArray); 
    txtShow.Text += string.Join(System.Environment.NewLine, heightArray);  
} 
private void AddButton_Click(object sender, EventArgs e) 
{ 
    if (this.index < 10) 
    { 
     nameArray[this.index] = nameBox.Text; 
     weightArray[this.index] = double.Parse(weightBox.Text); 
     heightArray[this.index] = double.Parse(heightBox.Text); 
     this.index++; 
    } 
} 

陣列最多可存儲10個值,我需要使用數組,而不是名單。

+1

那麼,你可以改變'nameArray'到'string.Concat(nameArray)'等。 – Fabjan

+0

謝謝您的回覆! –

+1

您正在討論多維數組,儘管下面的所有答案都是正確的,但這可能是您需要的最充分的答案。 https://www.dotnetperls.com/multidimensional-array或這裏https://msdn.microsoft.com/en-us/library/2yd9wwz4.aspx –

回答

5

您應該::::::很多方法可以優化你想要做的事情,但這是作業,你不想看起來像你是世界上最偉大的程序員 - 你想要做像教授期待你那樣的項目。因此創建類和連接列表不屬於您的特定解決方案集。嘗試:

PS - 在第一個答案上,我儘量保持我的建議代碼儘可能接近您的意見 - 在不更改代碼的情況下回答您的問題。另一位評論者建議,不斷更新文本框。文本將導致閃爍的問題。如果發生這種情況,我會建議在編輯文本時使用臨時字符串。

我知道這是家庭作業 - 所以我不建議任何大的優化,這會讓你看起來像你一直在做你的功課完成。

編輯您已經要求檢測空白的方法。根據我對你的代碼的理解,並保持它的簡單,嘗試:

private void AddButton_Click(object sender, EventArgs e) 
{ 
    if (this.index < 10) 
    { 
     if(nameBox.Text.Length==0||weightBox.Text.Length==0||heightBox.Text.Length==0){ 
      MessageBox.Show("You must enter a name, weight, and height!"); 
     }else{ 
      nameArray[this.index] = nameBox.Text; 
      weightArray[this.index] = double.Parse(weightBox.Text); 
      heightArray[this.index] = double.Parse(heightBox.Text); 

      this.index++; 
      nameBox.Text = ""; 
      weightBox.Text = ""; 
      heightBox.Text = ""; 
     } 
    } 
} 
private void ShowButton_Click(object sender, EventArgs e) 
{  string myString = ""; 
     for(int i=0;i<nameArray.Length;i++) 
     { 
       myString+= "Name: "+nameArray[i]+", "; 
       myString += "Weight: "+weightArray[i]+", "; 
       myString += "Height: "+heightArray[i]+"\n"); 
     } 
     txtShow.Text = myString; 

} 

注意文本框必須驗證方法將做我的修訂編輯我的IF/THEN語句的工作找空瓶。如果您認爲教授正在尋找形式(控制)驗證而不是IF/THEN後面的代碼隱藏,請告訴我,我會爲您提供幫助。

好的 - 你提到需要排序。要做到這一點,我們需要使用某種方法來分組輸入數據。我們可以使用Dictionary或class。讓我們一起去上課:

把它放在一起:看看這個潛在的解決方案 - 如果你覺得它太複雜了,你的作業應該看起來像,我們可以嘗試簡化。告訴我:

public class Person{ 
    public string Name {get;set;} 
    public double Height {get;set;} 
    public double Weight {get; set;} 
    public string Print(){ 
     return "Name: "+Name+", Height: "+Height.ToString()+", Weight: "+Weight.ToString()+"\r\n"; 
    } 
} 
Person[] People = new Person[10]; 
int thisIndex = 0; 
private void AddButton_Click(object sender, EventArgs e) 
    { 
     if (this.index < 10) 
    { 
     if(nameBox.Text.Length==0||weightBox.Text.Length==0||heightBox.Text.Length==0) 
     { 
      MessageBox.Show("You must enter a name, weight, and height!"); 
     }else{ 
      Person p = new Person(); 
      p.Name = nameBox.Text; 
      p.Weight = double.Parse(weightBox.Text); 
      p.Height = double.Parse(heightBox.Text); 
      People[thisIndex] = p; 
      thisIndex++; 
      nameBox.Text = ""; 
      weightBox.Text = ""; 
      heightBox.Text = ""; 
     } 
    } 
} 
private void ShowButton_Click(object sender, EventArgs e) 
{  
     People = People.OrderBy(p=>p.Name).ToArray(); 
     string myString = ""; 
     for(int i=0;i<10;i++) 
     { 
      if(People[I]!=null){ 
       myString+= People[I].Print(); 
      } 
     } 
     txtShow.Text = myString; 

} 
+0

謝謝!這使命令正確,但換行符不工作:(編輯:無意中\ r \ n工作!謝謝! –

+1

很高興幫助!乾杯。 –

+0

偶然你知道如何讓它忽略空值或空值?我知道有一種方法isEmptyOrNull(),但我不知道如何將它合併到這裏。 –

3

你應該爲此創建一個類。一個類,您可以通過三種類型(字符串,雙和雙)的變量組合在一起來創建自己的定製類型:

public class Person 
{ 
    public string Name { get; set; } 
    public double Weight { get; set; } 
    public double Height { get; set; } 

    public override string ToString() 
    { 
     return Name + " " + Weight + " " + Height; 
    } 
} 

然後:

Person[] persons = new Person[10]; 
private void AddButton_Click(object sender, EventArgs e) 
{ 
    persons[index] = new Person 
     { 
      Name = nameBox.Text, 
      Weight = double.Parse(weightBox.Text), 
      Height = double.Parse(heightBox.Text) 
     }; 
     index++; 
} 

最後(看ShowButton的代碼現在是一行):

txtShow.Text += string.Join(System.Environment.NewLine, persons.AsEnumerable()); 
+0

謝謝你的回覆,但不是使用數組列表?當我使用arraylist時,我會嘗試這個:)。 –

+0

@AnnieLowry我用列表而不是數組,因爲它是更通用的方式。如果你仍然想使用數組,不應該太難,只需將列表定義更改爲數組。 –

+0

好的,謝謝!我也會嘗試這種方式。 –

3

LINQ的溶液:

private void ShowButton_Click(object sender, EventArgs e) { 
    int n = Math.Min(Math.Min(nameArray.Length, weightArray.Length), heightArray.Length)); 

    txtShow.Text = String.Join(Environment.NewLine, Enumerable 
    .Range(0, n) 
    .Select(i => string.Format("Name: {0}, Weight: {1}, Height: {2}", 
     nameArray[i], weightArray[i], heightArray[i]))); 
} 

嘗試避免txtShow.Text +=片段,特別是在環(每個Text改變裝置重繪因此閃爍

+0

我試過了,它也有效。謝謝! –

+0

@安妮洛瑞:不客氣! –