2010-01-08 2 views
3

В настоящее время у меня есть что-то, что я хочу передать textbox.text по ссылке. Я не хочу передавать все текстовое поле, и я хочу, чтобы функция меняла текст вместе с возвратом другой переменной.Передать по тексту 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 с помощью ref и изменить его внутри функции?

+2

Это звучит как проблема с вашим дизайном для меня ... – hackerhasid

ответ

6

Вы не можете передавать свойства по ref, только поле или переменную.

От MSDN:

Свойства не являются переменными. Они на самом деле являются методами и поэтому не могут быть переданы как параметры ref.

Вы должны использовать промежуточную переменную:

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

Вот что я подумал. Благодарю. – Hazior

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 ... –

0

Я предполагаю, что проблема заключается в том, что вы пытаетесь передать TextBox.Text на второй параметр вашей функции (при условии, что вы изменили его, чтобы принять строку по ссылке). Совершенно верно передавать строки по ссылке, однако свойства не могут передаваться по ссылке. Самое лучшее, что вы можете сделать, это назначить текст на другую строку, передать, что, затем установите текст обратно в TextBox потом:

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) 
{ ... } 
Смежные вопросы