我希望在从应用程序内部保存后存储服务器名称的用户输入。我在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();
}
答案 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循环迭代它。