代码之家  ›  专栏  ›  技术社区  ›  Hazior

通过引用传递文本框

  •  3
  • Hazior  · 技术社区  · 15 年前

    我目前有一些东西,我想传递一个textbox.text by ref。我不想传递整个textbox,我希望函数在返回其他变量的同时更改文本。

        public int function(int a, int b, string text)
        {
            //do something
    
            if (a + b > 50)
            {
                text = "Omg its bigger than 50!";
            }
    
            return (a + b);
        }
    

    有没有办法通过ref传递Textbox.text并在函数内部更改它?

    5 回复  |  直到 15 年前
        1
  •  6
  •   Thomas Levesque    15 年前

    不能通过引用传递属性,只能传递字段或变量。

    MSDN :

    属性不是变量。它们实际上是方法,因此不能作为ref参数传递。

    必须使用中间变量:

    string tmp = textBox.Text;
    int x = function(1, 2, ref tmp);
    textBox.Text = tmp;
    
        2
  •  2
  •   Charlie Gevious    15 年前

    public int function(int a, int b, TextBox textBox) 然后,您传递的只是一个引用,它根本不是很多数据。如果你签名 public int function(int a, int b, ref string text)

        3
  •  1
  •   Kevin Robatel    15 年前

    你为什么不想传递整个文本框?这是传递参考。。。

    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);
    }
    
        4
  •  1
  •   Jon B    15 年前

    不能通过引用传递属性。可以复制 .Text

    void foo()
    {
        string temp = MyTextBox.Text;
        int result = refFunction(ref temp);
        MyTextBox.Text = temp;
    }
    
    int refFunction(ref string text)
    { ... }
    
        5
  •  0
  •   Andy    15 年前

    我想问题是你想通过考试 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;
    
    推荐文章