如何迭代并确定选项卡控件中的数组是否为空

本文关键字:控件 数组 是否 选项 何迭代 迭代 | 更新日期: 2023-09-27 18:32:26

>很抱歉标题令人困惑,但我不知道如何问这个问题;如果有人能帮助获得更好的标题,我将不胜感激。

我正在建立一个球员和他们的比赛表现数据库。匹配项使用选项卡控件显示,匹配项内部是存储在面板中的字段。匹配项的数量最多为 5,因此每个字段都是大小为 5 的数组,用于表示不同匹配项的不同值。我遇到了尝试保存该独特播放器的选项卡(匹配)数量的问题。

由于选项卡的数量会转移到显示的下一个玩家,因此我尝试遍历该玩家的所有匹配项和所有字段,确定哪些匹配项包含空字段并分别删除该选项卡(匹配项)。因此,如果玩家 1 有 3 个字段中有值的匹配项,但玩家 2 只有 2 个字段中包含值的匹配项,则第三个匹配项(选项卡)将被删除,因为这些字段没有值。

为了更好地解释,这是 GUI:图片

我尝试遍历每场比赛的字段,如下所示:

int[] csNumberTF = ((Player)GameDB[currentEntryShown]).csNumber[tabMatches.SelectedIndex];
int i = 0;
        while (i < 5)
        {
            if (csNumberTF[i] == 0)
            {
                int tabsLeft = tabMatches.TabCount;
                if(tabsLeft > 1)
                tabMatches.TabPages.Remove(tabMatches.SelectedTab);
                tabsLeft--;
            }
            i++;
        }

但是我看到错误:Cannot implicitly convert type 'int' to 'int[]'

如果有人能在这里帮助我,我真的很感激,我知道代码很长,但它的组织和标题应该会有所帮助。

完整代码:

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;
using System.IO;
using System.Collections;
using System.Text.RegularExpressions;
using System.Runtime.Serialization.Formatters.Binary;
namespace Assignment1_Template2
{
public partial class Form1 : Form
{
    // =======================DATA STRUCTURE ===========================
    [Serializable]
    private struct Player
    {   //CONSTRUCTOR
        public Player(int noOfMatches)
        {
            uniquePlayerId = new int[noOfMatches];
            playerIgName = "";
            contactStreet = "";
            contactTown = "";
            contactPostcode = "";
            contactEmail = "";
            contactTelephone = "";
            imagePath = "";
            matchesCount = 0;
            csNumber = new int[noOfMatches];
            killsNumber = new int[noOfMatches];
            deathsNumber = new int[noOfMatches];
            assistsNumber = new int[noOfMatches];
            minutesNumber = new int[noOfMatches];
            for (int i = 0; i < noOfMatches; ++i)
            {
                uniquePlayerId[i] = 0;
                csNumber[i] = 0;
                killsNumber[i] = 0;
                deathsNumber[i] = 0;
                assistsNumber[i] = 0;
                minutesNumber[i] = 0;
            }
        }
        //DATA TYPES
        public int[] uniquePlayerId;
        public int[] csNumber;
        public int[] killsNumber;
        public int[] deathsNumber;
        public int[] assistsNumber;
        public int[] minutesNumber;
        public int matchesCount;
        public string playerIgName;
        public string contactStreet;
        public string contactTown;
        public string contactPostcode;
        public string contactEmail;
        public string contactTelephone;
        public string imagePath;
    }
    //GLOBAL VARIABLES
    public ArrayList GameDB;
    public ArrayList playerMatch;
    private int currentEntryShown = 0;
    private int numberOfEntries = 0;
    private string filename = "W:''test.dat"; 
    public string prevImage = "";
    // =========================================================================
    // ====================== STARTING POINT ===================================
    // =========================================================================
    public Form1()
    {
        InitializeComponent();
        GameDB = new ArrayList();
        LoadData();
        ShowData();
        UpdatePrevNextBtnStatus();
    }
    // =========================================================================
    // ========================= BUTTON ACTION HANDLERS ========================
    // =========================================================================
    private void showPreviousBtn_Click(object sender, EventArgs e)
    {
        --currentEntryShown;
        ShowData();
        UpdatePrevNextBtnStatus();
    }
    private void showNextBtn_Click(object sender, EventArgs e)
    {
        ++currentEntryShown;
        if (currentEntryShown < GameDB.Count)
        {
            ShowData();
        }
        UpdatePrevNextBtnStatus();
    }
    private void addNewPlayerBtn_Click(object sender, EventArgs e)
    {
        ++numberOfEntries;
        currentEntryShown = numberOfEntries - 1;
        Player aNewStruct = new Player(5);
        GameDB.Add(aNewStruct);
        ShowData();
        addNewPlayerBtn.Enabled = true;
        UpdatePrevNextBtnStatus();
    }
    private void SaveBtn_Click(object sender, EventArgs e)
    {
        SaveData();
        addNewPlayerBtn.Enabled = true;
        UpdatePrevNextBtnStatus();
    }
    private void deletePlayerBtn_Click(object sender, EventArgs e)
    {
        numberOfEntries--;
        GameDB.RemoveAt(currentEntryShown);
        SaveData();
        currentEntryShown--;
        if (currentEntryShown <= GameDB.Count)
        {
            ShowData();
        }
        UpdatePrevNextBtnStatus();
    }
    private void uploadButton_Click(object sender, EventArgs e)
    {
        try
        {
            openFileDialog1.Title = "Select an image file";
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                Player aNewStruct = new Player(5);
                aNewStruct = (Player)GameDB[currentEntryShown];
                aNewStruct.imagePath = openFileDialog1.FileName;
                GameDB[currentEntryShown] = aNewStruct;
                playerPictureBox.ImageLocation = openFileDialog1.FileName;
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("Error: " + ex.Message);
        }
    }
    private void searchBtn_Click(object sender, EventArgs e)
    {
        string toFind;
        string source;
        toFind = searchInput.Text;
        toFind = toFind.ToLower();
        for (int i = 0; i < GameDB.Count; ++i)
        {   
            source = ((Player)GameDB[i]).playerIgName + ((Player)GameDB[i]).contactStreet;
            source = source.ToLower(); 
            if (source.Contains(toFind))
            {
                currentEntryShown = i;
                ShowData();
                UpdatePrevNextBtnStatus();
                break; 
            }
            if (i == (GameDB.Count - 1))
            {
                MessageBox.Show(toFind + " not found");
            }
        }
    }
    private void saveButton_Click(object sender, EventArgs e)
    {
        SaveData();
        UpdatePrevNextBtnStatus();
    }
    private void addNewMatchBtn_Click(object sender, EventArgs e)
    {
        TabPage newTP = new TabPage();
        if (tabMatches.TabCount <= 4)
        {
            tabMatches.TabPages.Add(newTP);
            int TabPageNumber = tabMatches.SelectedIndex + 1;
            tabMatches.TabPages[TabPageNumber].Text = "Match " + (TabPageNumber + 1);
            tabMatches.SelectTab(TabPageNumber);
            deleteMatchBtn.Enabled = true;
            panel1.Parent = tabMatches.SelectedTab;
        }
        ShowData();
    }
    private void deleteMatchBtn_Click(object sender, EventArgs e)
    {
        tabMatches.TabPages.Remove(tabMatches.SelectedTab);
        int lastTabNumber = tabMatches.TabCount - 1;
        tabMatches.SelectTab(lastTabNumber);
        if (tabMatches.SelectedIndex < 1) deleteMatchBtn.Enabled = false;
    }
    // =========================================================================
    // ================ HANDLE DATA CHANGES BY USER ============================
    // =========================================================================
    private void playerIdBox_TextChanged(object sender, EventArgs e)
    {
        Player aNewStruct = new Player(5);
        aNewStruct = (Player)GameDB[currentEntryShown];
        aNewStruct.uniquePlayerId[0] = Convert.ToInt32(playerIdBox.Text);
        GameDB[currentEntryShown] = aNewStruct;
    }
    private void playerIgNameBox_TextChanged(object sender, EventArgs e)
    {
        Player aNewStruct = new Player(5);
        aNewStruct = (Player)GameDB[currentEntryShown];
        aNewStruct.playerIgName = playerIgNameBox.Text;
        GameDB[currentEntryShown] = aNewStruct;
    }
    private void contactStreetBox_TextChanged(object sender, EventArgs e)
    {
        Player aNewStruct = new Player(5);
        aNewStruct = (Player)GameDB[currentEntryShown];
        aNewStruct.contactStreet = contactStreetBox.Text;
        GameDB[currentEntryShown] = aNewStruct;
    }
    private void contactTownBox_TextChanged(object sender, EventArgs e)
    {
        Player aNewStruct = new Player(5);
        aNewStruct = (Player)GameDB[currentEntryShown];
        aNewStruct.contactTown = contactTownBox.Text;
        GameDB[currentEntryShown] = aNewStruct;
    }
    private void contactPostcodeBox_TextChanged(object sender, EventArgs e)
    {
        Player aNewStruct = new Player(5);
        aNewStruct = (Player)GameDB[currentEntryShown];
        aNewStruct.contactPostcode = contactPostcodeBox.Text;
        GameDB[currentEntryShown] = aNewStruct;
    }
    private void contactEmailBox_TextChanged(object sender, EventArgs e)
    {
        Player aNewStruct = new Player(5);
        aNewStruct = (Player)GameDB[currentEntryShown];
        aNewStruct.contactEmail = contactEmailBox.Text;
        GameDB[currentEntryShown] = aNewStruct;
    }
    private void contactTelephoneBox_TextChanged(object sender, EventArgs e)
    {
        Player aNewStruct = new Player(5);
        aNewStruct = (Player)GameDB[currentEntryShown];
        aNewStruct.contactTelephone = contactTelephoneBox.Text;
        GameDB[currentEntryShown] = aNewStruct;
    }
    //Match data
    private void tabMatches_SelectedIndexChanged(object sender, EventArgs e)
    {
        panel1.Parent = tabMatches.SelectedTab;
        ShowData();
    }
    private void numCS_ValueChanged(object sender, EventArgs e)
    {
        Player aNewStruct = new Player(5);
        aNewStruct = (Player)GameDB[currentEntryShown];
        aNewStruct.csNumber[tabMatches.SelectedIndex] = (int)numCS.Value;
        GameDB[currentEntryShown] = aNewStruct;
    }
    private void numKills_ValueChanged(object sender, EventArgs e)
    {
        Player aNewStruct = new Player(5);
        aNewStruct = (Player)GameDB[currentEntryShown];
        aNewStruct.killsNumber[tabMatches.SelectedIndex] = (int)numKills.Value;
        GameDB[currentEntryShown] = aNewStruct;
    }
    private void numDeaths_ValueChanged(object sender, EventArgs e)
    {
        Player aNewStruct = new Player(5);
        aNewStruct = (Player)GameDB[currentEntryShown];
        aNewStruct.deathsNumber[tabMatches.SelectedIndex] = (int)numDeaths.Value;
        GameDB[currentEntryShown] = aNewStruct;
    }
    private void numAssists_ValueChanged(object sender, EventArgs e)
    {
        Player aNewStruct = new Player(5);
        aNewStruct = (Player)GameDB[currentEntryShown];
        aNewStruct.assistsNumber[tabMatches.SelectedIndex] = (int)numAssists.Value;
        GameDB[currentEntryShown] = aNewStruct;
    }
    private void numMinutes_ValueChanged(object sender, EventArgs e)
    {
        Player aNewStruct = new Player(5);
        aNewStruct = (Player)GameDB[currentEntryShown];
        aNewStruct.minutesNumber[tabMatches.SelectedIndex] = (int)numMinutes.Value;
        GameDB[currentEntryShown] = aNewStruct;
    }
    // =========================================================================
    // ================= HELPER METHODS FOR DISPLAYING DATA ====================
    // =========================================================================
    private void ShowData()
    {
        playerIdBox.Text = ((Player)GameDB[currentEntryShown]).uniquePlayerId[0].ToString();
        playerIgNameBox.Text = ((Player)GameDB[currentEntryShown]).playerIgName;
        contactStreetBox.Text = "" + ((Player)GameDB[currentEntryShown]).contactStreet;
        contactTownBox.Text = "" + ((Player)GameDB[currentEntryShown]).contactTown;
        contactPostcodeBox.Text = "" + ((Player)GameDB[currentEntryShown]).contactPostcode;
        contactEmailBox.Text = "" + ((Player)GameDB[currentEntryShown]).contactEmail;
        contactTelephoneBox.Text = "" + ((Player)GameDB[currentEntryShown]).contactTelephone;
        playerPictureBox.ImageLocation = ((Player)GameDB[currentEntryShown]).imagePath;
        numCS.Value = ((Player)GameDB[currentEntryShown]).csNumber[tabMatches.SelectedIndex];
        numKills.Value = ((Player)GameDB[currentEntryShown]).killsNumber[tabMatches.SelectedIndex];
        numDeaths.Value = ((Player)GameDB[currentEntryShown]).deathsNumber[tabMatches.SelectedIndex];
        numAssists.Value = ((Player)GameDB[currentEntryShown]).assistsNumber[tabMatches.SelectedIndex];
        numMinutes.Value = ((Player)GameDB[currentEntryShown]).killsNumber[tabMatches.SelectedIndex];
        int[] csNumberTF = ((Player)GameDB[currentEntryShown]).csNumber[tabMatches.SelectedIndex];
        int i = 0;
        while (i < 5)
        {
            if (csNumberTF[i] == 0)
            {
                int tabsLeft = tabMatches.TabCount;
                if(tabsLeft > 1)
                {
                    tabMatches.TabPages.Remove(tabMatches.SelectedTab);
                    tabsLeft--;
                }
            }
            i++;
        }            
    }
    private void UpdatePrevNextBtnStatus()
    {
        if (currentEntryShown > 0) showPreviousBtn.Enabled = true;
        else showPreviousBtn.Enabled = false;
        if (currentEntryShown < (numberOfEntries - 1)) showNextBtn.Enabled = true;
        else showNextBtn.Enabled = false;
        label1.Text = "Player ID";
        label3.Text = (currentEntryShown + 1) + " / " + numberOfEntries;
    }
    // =========================================================================
    // =============== HELPER METHODS FOR LOADING AND SAVING ===================
    // =========================================================================
    private void SaveData()
    {
        try
        {
            FileStream fs = new FileStream(filename, FileMode.Create, FileAccess.Write);
            try
            {
                BinaryFormatter bf = new BinaryFormatter();
                bf.Serialize(fs, GameDB);
                MessageBox.Show("Data saved to " + filename, "FILE SAVE OK", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch
            {
                MessageBox.Show("Could not serialise to " + filename,
                                 "FILE SAVING PROBLEM", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            fs.Close();
        }
        catch
        {
            MessageBox.Show("Could not open " + filename +
                            " for saving.'nNo access rights to the folder, perhaps?",
                             "FILE SAVING PROBLEM", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
        }
    }
    private void LoadData()
    {
        try
        {
            FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read);
            try
            {
                BinaryFormatter bf = new BinaryFormatter();
                GameDB = (ArrayList)bf.Deserialize(fs);
                currentEntryShown = 0;
                numberOfEntries = GameDB.Count;
            }
            catch
            {
                MessageBox.Show("Could not de-serialise from " + filename +
                                "'nThis usually happens after you changed the data structure.'nDelete the data file and re-start program'n'nClick 'OK' to close the program",
                                "FILE LOADING PROBLEM", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                fs.Close();             
                Environment.Exit(1);    
            }
            fs.Close();
        }
        catch
        {
            if (MessageBox.Show("Could not open " + filename + " for loading.'nFile might not exist yet.'n(This would be normal at first start)'n'nCreate a default data file?",
                                "FILE LOADING PROBLEM", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation) == DialogResult.Yes)
            {
                Player aNewStruct = new Player(5);
                GameDB.Add(aNewStruct);
                numberOfEntries = 1;
                currentEntryShown = 0;
            }
        }
    }
    // =========================================================================
    // ====================== HELPER METHODS FOR SORTING =======================
    // =========================================================================
    private void sortToolStripMenuItem_Click(object sender, EventArgs e)
    {
        GameDB.Sort(new PlayerNameComparer());
        currentEntryShown = 0;
        ShowData();
        UpdatePrevNextBtnStatus();
    }
    public class PlayerNameComparer : IComparer
    {
        public int Compare(object x, object y)
        {
            return ((Player)x).playerIgName.CompareTo(((Player)y).playerIgName);
        }
    }
    // =========================================================================
    // ====================== MISC STUFF =======================================
    // =========================================================================
    private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
    {
    }
    private void developerToolStripMenuItem_Click(object sender, EventArgs e)
    {
        MessageBox.Show("By Szymon Zmudzki: 13042432");
    }
    }
}

如何迭代并确定选项卡控件中的数组是否为空

尝试更改此内容

int[] csNumberTF = ((Player)GameDB[currentEntryShown]).csNumber[tabMatches.SelectedIndex];
        int i = 0;
        while (i < 5)
        {
            if (csNumberTF[i] == 0)
            {
                int tabsLeft = tabMatches.TabCount;
                if(tabsLeft > 1)
                {
                    tabMatches.TabPages.Remove(tabMatches.SelectedTab);
                    tabsLeft--;
                }
            }
            i++;
        }  

在 for 循环中使用 int[] 的 csNumber

        int i = 0;
        while (i < 5)
        {
            if (((Player)GameDB[currentEntryShown]).csNumber[i] == 0)
            {
                int tabsLeft = tabMatches.TabCount;
                if(tabsLeft > 1)
                {
                    tabMatches.TabPages.Remove(tabMatches.SelectedTab);
                    tabsLeft--;
                }
            }
            i++;
        }  

要找出 tabMatches.TabCount 的值,请在运行程序时添加此行,并在输出窗口中看到它:(为了回答您的问题,我假设 TabCount 以 1 开头。这是任何 .对整数数组的 Count() 调用。但这是确定的最好方法。

System.Diagnostics.Debug.WriteLine(tabMatches.TabCount);