列表框项目保存数据

时间:2018-11-15 22:04:26

标签: c# .net winforms

Server 1 Server2 Server Config Screen 我试图做一个视频游戏服务器管理器,但遇到了问题。我希望用户能够拥有尽可能多的服务器。但是我无法通过谷歌搜索找出答案,而只是定期弄乱如何存储用户选择要与他们在列表中创建的服务器相关联的信息。基本上,当您制作Server1时,它将获取您在配置屏幕上的框中选择的信息,并在服务器选择页面上使用它们。但是,当您制作Server2时,配置将覆盖Server1的配置。我知道我的代码甚至都没有设置能够执行此操作,但是我希望在正确的方向上推动我应该使用哪种类型的代码。

Tl:dr我希望配置选项与服务器列表中的ServerX关联,并且每个服务器应具有唯一的设置。

public partial class Form1 : Form
{
    //Variables
    string srvName;
    string mapSelect;
    string difSelect;


    public Form1()
    {
        InitializeComponent();
        this.srvList.SelectedIndexChanged += new System.EventHandler(this.srvList_SelectedIndexChanged);
    }

    private void srvList_SelectedIndexChanged(object sender, EventArgs e)
    {
        if(srvList.SelectedIndex == -1)
        {
            dltButton.Visible = false;
        }
        else
        {
            dltButton.Visible = true;
        }
        //Text being displayed to the left of the server listbox
        mapLabel1.Text = mapSelect;
        difLabel1.Text = difSelect;

    }
    private void crtButton_Click(object sender, EventArgs e)
    {
        //Add srvName to srvList
        srvName = namBox1.Text;
        srvList.Items.Add(srvName);

        //Selections
        mapSelect = mapBox1.Text;
        difSelect = difBox1.Text;

        //Write to config file
        string[] lines = { mapSelect, difSelect };
        System.IO.File.WriteAllLines(@"C:\Users\mlynch\Desktop\Test\Test.txt", lines);

        //Clear newPanel form
        namBox1.Text = String.Empty;
        mapBox1.SelectedIndex = -1;
        difBox1.SelectedIndex = -1;

        //Return to srvList
        newPanel.Visible = false;
    }
}

3 个答案:

答案 0 :(得分:0)

您在最近的评论中提到曾尝试保存到.txt文件,但每次尝试添加另一个文件时,它都会覆盖它。如果您想继续使用.txt方法,则只需设置一个全局整数变量并将其附加到您保存的每个文件中即可。

//Variables
string srvName;
string mapSelect;
string difSelect;
int serverNumber = 0;

...

serverNumber++;
string filepath = Path.Combine(@"C:\Users\mlynch\Desktop\Test\Test", serverNumber.ToString(), ".txt");
System.IO.File.WriteAllLines(filepath, lines);

答案 1 :(得分:0)

我认为下面的源代码可以使您对方向有所了解。让我们从一些初始化开始:

    public Form1()
    {
        InitializeComponent();
        this.srvList.SelectedIndexChanged += new System.EventHandler(this.srvList_SelectedIndexChanged);
        mapBox1.Items.Add("Germany");
        mapBox1.Items.Add("Russia");

        difBox1.Items.Add("Easy");
        difBox1.Items.Add("Difficult");
    }

这是“创建服务器”按钮的事件处理程序。它从屏幕上获取服务器参数,然后写入名为服务器的文件。

    private void crtButton_Click(object sender, EventArgs e)
    {
        //Add srvName to srvList
        srvName = namBox1.Text;
        srvList.Items.Add(srvName);

        //Selections
        mapSelect = mapBox1.Text;
        difSelect = difBox1.Text;

        //Write to config file
        string path = @"C:\Test\" + srvName + ".txt";
        StreamWriter sw = new StreamWriter(path);
        sw.WriteLine(mapSelect);
        sw.WriteLine(difSelect);
        sw.Flush();
        sw.Close();

        //Clear newPanel form
        namBox1.Text = String.Empty;
        mapBox1.SelectedIndex = -1;
        difBox1.SelectedIndex = -1;

        //Return to srvList
        //newPanel.Visible = false;
    }

最后是列表框事件处理程序在下面。方法从文件中读取服务器参数并显示在屏幕上。

    private void srvList_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (srvList.SelectedIndex == -1)
        {
            dltButton.Visible = false;
        }
        else
        {
            dltButton.Visible = true;
        }

        string path = @"C:\Test\" + srvList.SelectedItem + ".txt";
        StreamReader sr = new StreamReader(path);
        //Text being displayed to the left of the server listbox
        mapLabel1.Text = sr.ReadLine();  // mapSelect;
        difLabel1.Text = sr.ReadLine();  // difSelect;

    }

请随时提问。

答案 2 :(得分:0)

我最终弄清楚了这个问题。基本上,我最终决定对txt文件进行写入,然后从中读取以在服务器选择菜单中显示该文件的内容。我还添加了一个删除按钮,以便您可以删除创建的服务器。它还没有完整的功能,但是已经存在。所以这就是我最终得到的结果,并且效果很好。谢谢大家的帮助。

public partial class Form1 : Form
{
    //Variables
    string srvName;
    string mapSelect;
    string mapFile;
    string difSelect;
    string difFile;
    int maxPlayers;
    string plrSelect;
    string plrFile;
    string finalFile;
    string basepath = System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
    string fileName = "config.txt";


    public Form1()
    {
        InitializeComponent();
        this.srvList.SelectedIndexChanged += new System.EventHandler(this.srvList_SelectedIndexChanged);
    }
    private void srvList_SelectedIndexChanged(object sender, EventArgs e)
    {
        //Read Server Selection
        string srvSelect = srvList.GetItemText(srvList.SelectedItem);
        string srvOut = System.IO.Path.Combine(basepath, srvSelect, fileName);
        mapFile = File.ReadLines(srvOut).Skip(1).Take(1).First();
        difFile = File.ReadLines(srvOut).Skip(2).Take(1).First();
        plrFile = File.ReadLines(srvOut).Skip(3).Take(1).First();

        //Display Server Selection
        if (srvList.SelectedIndex == -1)
        {
            dltButton.Visible = false;
        }
        else
        {
            dltButton.Visible = true;
            mapLabel1.Text = mapFile;
            difLabel1.Text = difFile;
            plrLabel1.Text = plrFile;
    }
    private void crtButton_Click(object sender, EventArgs e)
    {
        //Set Server Name
        srvName = namBox1.Text;
        string finalpath = System.IO.Path.Combine(basepath, srvName);


        //Check if server name is taken
        if (System.IO.Directory.Exists(finalpath))
        {
            MessageBox.Show("A Server by this name already exists");
        }
        else
        {
            //Add Server to the Server List
            srvList.Items.Add(srvName);

            //Server Configuration
            mapSelect = mapBox1.Text;
            difSelect = difBox1.Text;
            maxPlayers = maxBar1.Value * 2;
            plrSelect = "" + maxPlayers;

            //Clear New Server Form
            namBox1.Text = String.Empty;
            mapBox1.SelectedIndex = -1;
            difBox1.SelectedIndex = -1;

            //Create the Server File
            Directory.CreateDirectory(finalpath);
            finalFile = System.IO.Path.Combine(finalpath, fileName);
            File.Create(finalFile).Close();

            //Write to config file
            string[] lines = { srvName, mapSelect, difSelect, plrSelect };
            System.IO.File.WriteAllLines(@finalFile, lines);

            //Return to srvList
            newPanel.Visible = false;
        }
    }
}