如何在运行时将字符串数组存储到单个应用程序设置属性?

时间:2015-04-09 14:08:30

标签: c# winforms visual-studio application-settings

我希望在从应用程序内部保存后存储服务器名称的用户输入。我在SettingsForm类的索引越界设置中出错(下面显示的错误行)。我相信我的ServerName属性只有一个大小,所以我该如何改变它呢?或者我的代码中是否需要更改其他内容?

我不确定将多个字符串存储到一个属性。我一直在尝试不同的东西,但我是C#和WinForms应用程序的新手。这是我一直试图解决的代码:

UserSettings类:

[UserScopedSetting()]
    [DefaultSettingValue("Enter Server Name")]
    public String[] ServerName
    {
        get
        {
            return (String[])this["ServerName"];
        }
        set
        {
            this["ServerName"] = (String[])value;
        }
    }

SettingsForm类:

private void saveSettingsButton_Click(object sender, EventArgs e)
    {
        //loop through all servers
        for (int i=0; i<serverCounter.Value; i++)
        {
            TextBox currentTextBox = (TextBox)servers[i, 0];
            us.ServerName[i] = currentTextBox.Text; //ERROR
            currentTextBox.DataBindings.Add("Text", us, "ServerName");

        }
        us.Save();

        this.Close();
    }

1 个答案:

答案 0 :(得分:1)

潜在问题:serverCounter.Value有什么价值? us.ServerName []是如何实例化的? ServerName返回一个字符串数组,但对我来说,每个serverName看起来应该是一个字符串,然后放入一个数组(或列表)。

从您显示的代码段中,我猜测serverCounter的某个值> 1,而us.ServerName始终是一个包含1个项目的数组(或者它从未实例化)。这将为您提供超出范围误差的索引。

尝试使用public string ServerName代替public String[] ServerName,然后每次获得返回值时,将该值放入数组中 - 或者如果您不知道将输入多少服务器,列表会更好。

List<string> serverNames = new List<string>();

// Get currentName from user--I don't understand how your code is supposed to work

serverNames.Add(currentName);  // this is the name entered by the user

然后使用foreach循环:

        foreach (string name in serverNames)
        {
            //do something
        }

如果您事先知道有多少台服务器,则可以使用字符串数组:

string[] serverNames = new string[serverCounter];

仍然使用foreach循环迭代它。