-1

我有一个带有 6 个文本框的简单 GUI。

我有一个需要 7 个参数的方法,1 个是长字符串,另外 6 个是文本框。该方法如下所示:

SetTextBoxesFromTokens(string s, string a, string b, string c, string d, string e, string f)
{
string[] tokens = s.Split('-');

a = tokens[0];
b = tokens[1];
c = tokens[2];
d = tokens[3];
e = tokens[4];
f = tokens[5];
}

我这样调用上述方法,但它没有更新文本框:

SetTextBoxesFromTokens("1-2-3-4-5-6",
        txtA.Text,txtB.Text,txtC.Text,txtD.Text,txtE.Text,txtF.Text);
4

2 回答 2

3

这些值是按值传递的,即值类型的参数传递,即为参数创建一个新变量,并将文本框的文本复制到它。参数值的变化不应该反映在文本框中。如果要更改函数中文本框的值,请传递 TextBoxes 对象而不是 Text。

SetTextBoxesFromTokens(string s, TextBox txta, TextBox txtb, TextBox txtc, TextBox txtd, TextBox txte, TextBox txtf)
{    
  string[] tokens = s.Split('-');

  txta.Text = tokens[0];
  txtb.Text  = tokens[1];
  txtc.Text  = tokens[2];
  txtd.Text  = tokens[3];
  txte.Text  = tokens[4];
  txtf.Text  = tokens[5];    
}
于 2012-11-06T17:02:23.827 回答
2

调用您的方法时,会创建字符串的副本。这意味着您没有将标记数组分配给相应 TextBox 控件的 .Text 属性。您只是在为块末尾超出范围的事物分配值。

为您的需求提供更合适的数据结构将更好地为您服务。

改为考虑:-

SetTextBoxesFromTokens(Dictionary<string,TextBox> tokenDict) 
{
  tokenDict
    .Keys
    .ToList()
    .ForEach(k => tokenDict[k].Text = k);
}

像这样称呼它:-

// Define key value pair set containing
// token
// textbox to set
var dict = new Dictionary<string,TextBox>()
  {
    { "a", txtA },
    { "b", txtB },
    { "c", txtC }, 
    { "d", txtD },
    { "e", txtE },
    { "f", txtF }
  };

SetTextBoxesFromTokens(dict);

使用这种方法,Dictionary<string,TextBox>参数(和 中的TextBox对象)通过引用传递,并且您的方法不再与特定数量的 绑定,或者如果没有足够的令牌,则TextBox耦合实现会中断。string.Split

于 2012-11-06T17:20:21.253 回答