2010-01-08 48 views
3

我目前有一些我想通過一個textbox.text參考。我不想傳遞整個文本框,我希望函數能夠在返回其他變量的同時更改文本。通過Ref Textbox.Text

public int function(int a, int b, string text) 
    { 
     //do something 

     if (a + b > 50) 
     { 
      text = "Omg its bigger than 50!"; 
     } 

     return (a + b); 
    } 

是否有辦法由裁判通過Textbox.text並改變它的函數裏面?

+2

這聽起來像是你的設計給我一個問題... – hackerhasid 2010-01-08 16:01:58

回答

6

您無法通過ref傳遞屬性,只能傳遞字段或變量。

MSDN

屬性是不變量。它們實際上是方法,因此不能作爲參數傳遞。

你必須使用一箇中間變量:

string tmp = textBox.Text; 
int x = function(1, 2, ref tmp); 
textBox.Text = tmp; 
+0

多數民衆贊成我的想法。謝謝。 – Hazior 2010-01-08 16:04:58

2

你是什麼意思傳遞「整個」文本框?如果你的簽名是public int function(int a, int b, TextBox textBox)那麼你所傳遞的只是一個參考,根本不是很多數據。如果您簽名public int function(int a, int b, ref string text),如果傳遞textBox.Text,您仍然有問題,因爲您仍然在使用Text屬性中的後臺字段副本,因此您的方法不會更新。

1

爲什麼你不希望傳遞的整個文本框?它是通過在參考... 像:

public int function(int a, int b, TextBox textb) 
{ 
    //do something 

    if (a + b > 50) 
    { 
     textb.text = "Omg its bigger than 50!"; 
    } 

    return (a + b); 
} 
+0

如果您傳遞了TextBox引用,該方法也將能夠更改TextBox的其他屬性... – 2010-01-08 16:02:47

0

我認爲問題是,你試圖通過TextBox.Text你的函數的第二個參數(假設你已經修改了它採取由參考串)。通過引用傳遞字符串是完全有效的,但是屬性不能通過引用傳遞。你能做的最好的是文本分配給另一個字符串,傳遞,然後將文本回文本框算賬:

public int function(int a, int b, ref string text) 
{ 
    //do something 

    if (a + b > 50) 
    { 
     text = "Omg its bigger than 50!"; 
    } 

    return (a + b); 
} 

string text = TextBox.Text; 
function(ref text); 
TextBox.Text = text; 
1

不能由參傳遞一個屬性。您可以將.Text屬性複製到一個字符串,然後由裁判傳遞字符串:

void foo() 
{ 
    string temp = MyTextBox.Text; 
    int result = refFunction(ref temp); 
    MyTextBox.Text = temp; 
} 

int refFunction(ref string text) 
{ ... }