C# 文本框值未从外部方法更新?

C# 文本框值未从外部方法更新?,c#,winforms,.net-4.0,C#,Winforms,.net 4.0,我有一个带有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 = t

我有一个带有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);

值通过值传递,即为参数创建一个新变量,并将textbox的文本复制到该参数。参数值的更改不应反映在文本框中。如果要更改函数中TextBox的值,请传递TextBox对象而不是文本

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];    
}

调用方法时,将创建字符串的副本。这意味着您没有将令牌数组分配给相应TextBox控件的.Text属性。您只是将值分配给块末尾不在范围内的对象

为您的需求提供更合适的数据结构会更好

相反,请考虑:-

SetTextBoxesFromTokens(Dictionary<string,TextBox> tokenDict) 
{
  tokenDict
    .Keys
    .ToList()
    .ForEach(k => tokenDict[k].Text = k);
}
SetTextBoxesFromTokens(字典tokenDict)
{
代币
.钥匙
托利斯先生()
.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);
//定义包含
//代币
//要设置的文本框
var dict=新字典()
{
{“a”,txtA},
{“b”,txtB},
{“c”,txtC},
{“d”,txtD},
{“e”,txtE},
{“f”,txtF}
};
SetTextBoxesFromTokens(dict);

使用这种方法,
Dictionary
参数(以及其中的
TextBox
对象)通过引用传递,并且您的方法不再绑定到特定数量的
TextBox
,或者是一个耦合的
string.Split
实现,如果没有足够的令牌就会中断。

看到您的分数如此之高,之前的问题非常好,但仍然会提出这样一个问题,我真的很惊讶。。。请使用最重要的“按值传递和按引用传递”部分重新访问方法参数部分。我确实尝试传递我的ref,但我在传递ref-txtA.Text,它给了我一个错误。谢谢,我实际上是在尝试,但我是按ref传递
txtA.Text
,但这给了我一个错误。我有一个小问题,程序集是
SetTextBoxesFromTokens
声明不能引用
UI
文本框之类的东西,因此我如何解决它?为什么程序集不能引用UI东西?