Проходя мимо Ref Textbox.Text - PullRequest
       14

Проходя мимо Ref Textbox.Text

3 голосов
/ 08 января 2010

У меня сейчас есть что-то, что я хочу передать 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 по ссылке и изменить его внутри функции?

Ответы [ 5 ]

6 голосов
/ 08 января 2010

Нельзя передать свойство по ссылке, только поле или переменную.

С MSDN :

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

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

string tmp = textBox.Text;
int x = function(1, 2, ref tmp);
textBox.Text = tmp;
2 голосов
/ 08 января 2010

Что вы подразумеваете под пропуском "целого" текстового поля? Если ваша подпись public int function(int a, int b, TextBox textBox), то все, что вы передаете, это ссылка, а это совсем немного данных. Если вы сделаете свою подпись public int function(int a, int b, ref string text), у вас все еще будет проблема при передаче textBox.Text, потому что вы все равно будете работать с копией поля поддержки из свойства Text, чтобы ваш метод не обновлялся.

1 голос
/ 08 января 2010

Вы не можете передать недвижимость по реф. Вы можете скопировать свойство .Text в строку и затем передать эту строку с помощью ref:

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

int refFunction(ref string text)
{ ... }
1 голос
/ 08 января 2010

Почему вы не хотите пропустить все текстовое поле? это передать в ре ... как:

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 голосов
/ 08 января 2010

Полагаю, проблема в том, что вы пытаетесь передать 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...