-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

値は値によって渡されます。つまり、値の型のパラメーターの受け渡しです。つまり、新しい変数がパラメーター用に作成され、テキスト ボックスのテキストがそれにコピーされます。パラメータの値を変更しても、テキストボックスには反映されないはずです。関数内のテキスト ボックスの値を変更する場合は、Text の代わりに TextBoxes オブジェクトを渡します。

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に結び付けられなくなります。TextBoxstring.Split

于 2012-11-06T17:20:21.253 に答える