在C#中使用GUI声明新对象

时间:2014-07-04 23:09:05

标签: c# user-interface

所以我正在使用带有类的GUI。我之前已经完成了,我知道大部分时间都是为按钮创建事件。然后,当按下该按钮时,您可以创建一个新对象。在我正在研究的这个项目中,我有一个TextBox,我输入了一个名字和一个分数。然后,当我点击我的输入按钮时,我想用参数化构造函数创建一个新对象,并将名称和分数放在不同的数组中,以便我可以操作它们。然后我想产生最高,最低和平均分数。我有过以前的项目,我按下按钮时只创建一个新对象。但是有了这个,我在同一个TextBox中加载了多个东西。所以每次按下按钮我都会创建一个新对象。我想要做的是使用参数化构造函数创建一次对象,然后将名称和分数添加到类中的数组。有什么建议。

我的表单类中的底部方法我试图乱搞这样做,但它不会做任何事情。

    private void nameTextBox_TextChanged(object sender, EventArgs e)
    {
        //Get the information from the text box and store it in a variable
        string userInput = nameTextBox.Text;

        //Create a new object with the parameterized constructor
        myBowlingTeam = new BowlingTeam(userInput);
    } 

请帮助。这就像我唯一的打嗝。如果我让这部分工作正常,该程序将起作用。因为我知道如何使用该类来生成我想要的结果。提前谢谢。

这是我的班级代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Project_9
{

class BowlingTeam
{
     const int MAX = 10;

    //local variables
     int sizeOfName = 0;
     int sizeOfScore = 0;

    //Declare Private Data Members
    private string nameAndScore = "";
    private string name = "";
    private int score = 0;
    private string[] nameArray = new string[MAX];
    private int[] scoreArray = new int[MAX];
    private string[] nameAndScoreArray = new string[MAX];

    //Default Constructor
    //Purpose: To set the initial values of an object
    //Parameters: None
    //Returns: Nothing
    public BowlingTeam()
    {
        nameAndScore = "";
        name = "";
        score = 0;
        for(int i = 0; i < MAX; i++)
        {
            nameArray[i] = "";
        }
        for(int i = 0; i < MAX; i++)
        {
            scoreArray[i] = 0;
        }
        for (int i = 0; i < MAX; i++)
        {
            nameAndScoreArray[i] = "";
        }
    }

    //Parameterized Constructor
    //Purpose: To set the values of an object
    //Parameters: None
    //Returns: Nothing
    public BowlingTeam(string aString)
    {
        nameAndScore = aString;
        name = "";
        score = 0;
        for (int i = 0; i < MAX; i++)
        {
            nameArray[i] = "";
        }
        for (int i = 0; i < MAX; i++)
        {
            scoreArray[i] = 0;
        }
        for (int i = 0; i < MAX; i++)
        {
            nameAndScoreArray[i] = "";
        }
    }

    //Split the Input Method
    //Purpose: To Split up the data in the array
    //Parameters: An array of strings
    //Returns: Nothing
    public void SplitAndDisperseArray()
    {
            nameAndScoreArray = nameAndScore.Split();
            name = nameAndScoreArray[0];
            score = int.Parse(nameAndScoreArray[1]); 

        //Place the name and the score in their one arrays
            PlaceInNameArray(name);
            PlaceInScoreArray(score);
    }

    //Find Highest Score Method
    //Purpose: To find the highest score
    //Parameters: An array of int
    //Returns: An int
    public int CalcHighestScore()
    {
        int highestScore = 0;
        int size = 0;

        for (int i = 0; i < MAX; i++ )
        {
            if (scoreArray[i] < scoreArray[i + 1])
            {
                highestScore = scoreArray[i];
            }
            else
            {
                highestScore = scoreArray[i + 1];
            }
        }
        return highestScore;
    }

    //Find Lowest Score Method
    //Purpose: To find the lowest score
    //Parameters: An array of int
    //Returns: An int
    public int CalcLowestScore(int[] anArrayOfInts, int sizeOfArray)
    {
        int lowestScore = 0;
        while (sizeOfArray < MAX)
        {
            if (anArrayOfInts[sizeOfArray] < anArrayOfInts[sizeOfArray + 1])
            {
                lowestScore = anArrayOfInts[sizeOfArray];
            }
            else
            {
                lowestScore = anArrayOfInts[sizeOfArray + 1];
            }
        }
        return lowestScore;
    }

    //Calulate Avg. Score Method
    //Purpose: To calculate the avg score
    //Parameters: An array of int
    //Returns: An double
    public double CalculateAvgScore(int[] anArrayOfInts, int sizeOfArray)
    {
        int sum = 0;
        double avg = 0;
        //Add up all of the elements in the array
        while(sizeOfArray < MAX)
        {
            sum += anArrayOfInts[sizeOfArray];
        }
        //Divide the sum by the size of the array
        return avg /= sum;
    }

    //Set Score Array Method
    //Purpose: To put scores in the score array
    //Parameters: An int
    //Returns: Nothing
    public void PlaceInScoreArray(int aScore)
    {
        scoreArray[sizeOfScore] = score;
        sizeOfScore++;
    }


    //Set Name Array Method
    //Purpose: To put names in the names array
    //Parameters: A string
    //Returns: Nothing
    public void PlaceInNameArray(string aName)
    {
        nameArray[sizeOfName] = name;
        sizeOfName++;
    }
}
}

这是我的GUI的Form1代码:

 using System;
 using System.Collections.Generic;
 using System.ComponentModel;
 using System.Data;
 using System.Drawing;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 using System.Windows.Forms;

namespace Project_9
{
public partial class Form1 : Form
{
    //Declare a reference variable to the class
    private BowlingTeam myBowlingTeam;

    public Form1()
    {
        InitializeComponent();
        myBowlingTeam = new BowlingTeam();//Create a BowlingTeam object with the default constructor
    }

    //ExitToolStripMenuItem1_Click
    //Purpose: To close the application when clicked
    //Parameters: The sending object and the event arguments
    //Returns: nothing
    private void exitToolStripMenuItem_Click(object sender, EventArgs e)
    {
        this.Close();
    }

    //AboutToolStripMenuItem1_Click
    //Purpose: To display student information
    //Parameters: The sending object and the event arguments
    //Returns: nothing
    private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
    {
        MessageBox.Show("Charlie Barber\nCS 1400-X01\nProject 9");
    }

    //Enter Button Clicked
    //Purpose: To store the info in an array when the button is pressed
    //Parameters: The sending object and the event arguments
    //Returns: nothing
    private void button1_Click(object sender, EventArgs e)
    {
        //Get the information from the text box and store it in a variable
        string userInput = nameTextBox.Text;

        if (userInput != "")
        {
            //Create a new object with the parameterized constructor
           // myBowlingTeam = new BowlingTeam(userInput);

            //Split the string into two separte pieces of data
            myBowlingTeam.SplitAndDisperseArray();

            //Clear the text box
            nameTextBox.Clear();
        }
        else
        {
            int highestScore = myBowlingTeam.CalcHighestScore();
        }
    }

    //Nothing
    private void nameTextBox_TextChanged(object sender, EventArgs e)
    {
        //Get the information from the text box and store it in a variable
        string userInput = nameTextBox.Text;

        //Create a new object with the parameterized constructor
        myBowlingTeam = new BowlingTeam(userInput);
    }
}

1 个答案:

答案 0 :(得分:1)

什么阻止你为球队内的球员使用课程?在解决方案中保持阵列同步似乎比它的价值更麻烦。

using System.Collections.Generic;
using System.Collections.ObjectModel;

namespace Observable
{
    class BowlingTeam
    {
        public string TeamName { get; set; }

        private readonly IList<Player> players = new ObservableCollection<Player>();
        public IList<Player> Players
        {
            get
            {
                return players;
            }
        }

        public void AddPlayer(string name, int score)
        {
            AddPlayer(new Player(name, score));
        }

        public void AddPlayer(Player p)
        {
            players.Add(p);
        }

        public Player HighestRanked()
        {
            if (Players.Count == 0)
            {
                // no players
                return null;
            }
            int max = 0, index = -1;
            for (int i = 0; i < Players.Count; i++)
            {
                if (Players[i].Score > max)
                {
                    index = i;
                    max = Players[i].Score;
                }
            }
            if (index < 0)
            {
                // no players found with a score greater than 0
                return null;
            }
            return Players[index];
        }

        public BowlingTeam()
        { 
        }

        public BowlingTeam(string teamName)
        {
            this.TeamName = teamName;
        }
    }

    class Player
    {
        public string Name { get; set; }
        public int Score { get; set; }

        public Player()
        {
        }

        public Player(string name, int score)
        {
            this.Name = name;
            this.Score = score;
        }

        public override string ToString()
        {
            return string.Format("{0} {1:n2}", Name, Score);
        }
    }
}

可以这样操纵

BowlingTeam b1 = new BowlingTeam("SO");
b1.AddPlayer("Player 1", 100);
b1.AddPlayer("Player 2", 135);
b1.AddPlayer("Player 3", 90);
b1.AddPlayer("Player 4", 127);

Console.WriteLine("Highest ranked player: {0}", b1.HighestRanked());

以后的一个优点是你可以挂在玩家的OnCollectionChangedEvents上,以便在添加/删除玩家时收到通知。