Элемент списка содержит данные - PullRequest
0 голосов
/ 16 ноября 2018

Сервер 1 Сервер2 Экран конфигурации сервера Я пытаюсь создать диспетчер сервера видеоигры и столкнулся с проблемой.Я хочу, чтобы пользователь мог иметь столько серверов, сколько ему хотелось бы.Тем не менее, я не могу разобраться в поиске в Google и просто регулярно балуюсь тем, как хранить информацию, которую пользователь выбирает для связи с Сервером, который он создает в списке.В основном, когда вы делаете 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 голосов
/ 17 ноября 2018

Я думаю, что ниже исходный код даст вам некоторое представление о направлении.Давайте начнем с некоторых инициализаций:

    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;

    }

Пожалуйста, не стесняйтесь задавать любые ваши вопросы.

0 голосов
/ 19 ноября 2018

В итоге я выяснил проблему.В основном я решил записать текстовый файл, а затем прочитал его, чтобы отобразить содержимое файла в меню выбора сервера.Я также добавил кнопку удаления, чтобы вы могли удалить созданные вами серверы.он еще не имеет полной функциональности, но он есть.Так вот, что я закончил, и это работает отлично.Спасибо всем за попытку помочь.

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;
        }
    }
}
0 голосов
/ 17 ноября 2018

Вы упомянули в недавнем комментарии, что вы пытались сохранить в файл .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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...