2010-01-08 4 views
3

J'ai actuellement quelque chose que je veux passer un textbox.text par ref. Je ne veux pas passer la zone de texte entière et je veux que la fonction change le texte avec renvoyer l'autre variable. Y a-t-il un moyen de passer le Textbox.text par ref et de le changer à l'intérieur de la fonction? Que voulez-vous dire passer le "whole" textbox?Passer par Ref Textbox.Text

+2

Cela ressemble à un problème avec votre conception pour moi ... – hackerhasid

Répondre

6

Vous ne pouvez pas passer une propriété par ref, seulement un champ ou une variable.

De MSDN:

propriétés ne sont pas des variables. Ce sont en fait des méthodes, et ne peuvent donc pas être transmises en tant que paramètres ref.

Vous devez utiliser une variable intermédiaire:

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

thats ce que je pensais. Merci. – Hazior

2

Si votre signature est public int function(int a, int b, TextBox textBox) alors tout ce que vous passez est une référence, ce qui n'est pas beaucoup de données du tout. Si vous apportez votre signature public int function(int a, int b, ref string text), vous rencontrez toujours un problème si vous transmettez textBox.Text car vous utiliserez toujours une copie du champ de sauvegarde de la propriété Text afin que votre méthode ne se mette pas à jour.

1

Pourquoi tu ne veux pas passer toute la zone de texte? il est en passe ... ref comme:

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

Si vous passez la référence TextBox, la méthode sera également en mesure de modifier d'autres propriétés de la TextBox ... –

0

Je suppose que le problème est que vous essayez de passer TextBox.Text au second paramètre de votre fonction (en supposant que vous avez modifié pour prendre la chaîne par référence). Il est parfaitement valide de passer des chaînes par référence, mais les propriétés ne peuvent pas être transmises par référence. Le mieux que vous pouvez faire est assigner le texte à une autre chaîne, passez que, puis définissez le texte de nouveau dans la zone de texte après:

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

Vous ne pouvez pas passer une propriété par ref. Vous pouvez copier la propriété .Text à une chaîne, puis passer par cette chaîne ref:

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

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