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

本文关键字:新对象 对象 声明 GUI | 更新日期: 2023-09-27 18:11:35

所以我使用一个类的GUI。我以前做过,我知道大多数情况下,您都要为按钮创建一个事件。当按钮被按下时,你可以创建一个新对象。在这个项目中,我正在工作,我有一个文本框,我输入一个名字和一个分数。然后,当我按下enter按钮时,我想用参数化的构造函数创建一个新对象,并将名称和分数放在不同的数组中,以便我可以对它们进行操作。然后我想要得到最高,最低和平均分数。我有以前的项目,我只是在按下按钮时创建一个新对象。但是我在同一个文本框中加载了多个东西。每次按下按钮,我都在创建一个新对象。我想做的是用参数化构造函数创建对象一次,然后将名称和分数添加到类中的数组中。任何建议。

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

    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++;
    }
}
}

这是我的Form1代码的GUI:

 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);
    }
}

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

是什么阻止你为球队中的球员使用类?在你的解决方案中保持数组同步似乎比它的价值更麻烦。

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,当球员被添加/删除时通知。