Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何通过引用传递按钮';s或其他控件';s文本_.net_C++ Cli_Controls_Pass By Reference - Fatal编程技术网

.net 如何通过引用传递按钮';s或其他控件';s文本

.net 如何通过引用传递按钮';s或其他控件';s文本,.net,c++-cli,controls,pass-by-reference,.net,C++ Cli,Controls,Pass By Reference,应该更改按钮的文本,但不会更改。这不起作用,代码只更新对象。除此之外,它还更新了TextBox::Text属性。这不仅仅是因为这是一个字符串,正如重复链接中所暗示的那样,它也不适用于简单的值类型属性 这是因为属性不是值,您无法创建对它们的引用。当您使用它们时,它们看起来就像语法中的值。但当您声明它们时,请注意必须如何编写get和set方法。因此,要更新文本框中显示的文本,必须调用属性的set方法。这不仅仅是一个简单的变量赋值,它是一个方法调用。也许直观上很明显,请注意指定文本属性有很多副作用。你

应该更改按钮的文本,但不会更改。

这不起作用,代码只更新对象。除此之外,它还更新了TextBox::Text属性。这不仅仅是因为这是一个字符串,正如重复链接中所暗示的那样,它也不适用于简单的值类型属性

这是因为属性不是值,您无法创建对它们的引用。当您使用它们时,它们看起来就像语法中的值。但当您声明它们时,请注意必须如何编写get和set方法。因此,要更新文本框中显示的文本,必须调用属性的set方法。这不仅仅是一个简单的变量赋值,它是一个方法调用。也许直观上很明显,请注意指定文本属性有很多副作用。你可以在屏幕上看到它

要间接调用一个方法,您需要另一个车辆,您需要一个代理。非常类似于C中的函数指针。任何关于.NET编程的介绍性书籍都会解释它们。您可以声明自己的委托类型,但更喜欢.NET framework中内置的泛型委托类型。添加对System.Core的引用,以便可以使用泛型操作委托类型。您需要首先编写一个方法来分配Text属性:

String ^% text = button->Text ; 
text = "something" ;
将使用以下示例方法更新:

private: 
    void updateTextBox(String^ text) {
        textBox1->Text = text;
    }
    void Test(Action<String^>^ updater) {
        updater("foo");
    }
void测试(操作^updater){
更新程序(“foo”);
}
请注意此方法如何更新任何文本框,由您传递的委托对象决定哪个文本框。使用如下代码创建委托变量:

private: 
    void updateTextBox(String^ text) {
        textBox1->Text = text;
    }
    void Test(Action<String^>^ updater) {
        updater("foo");
    }
Test(gcnewaction(this,&Form1::updateTextBox));

这无法工作,代码仅更新对象。除此之外,它还更新了TextBox::Text属性。这不仅仅是因为这是一个字符串,正如重复链接中所暗示的那样,它也不适用于简单的值类型属性

这是因为属性不是值,您无法创建对它们的引用。当您使用它们时,它们看起来就像语法中的值。但当您声明它们时,请注意必须如何编写get和set方法。因此,要更新文本框中显示的文本,必须调用属性的set方法。这不仅仅是一个简单的变量赋值,它是一个方法调用。也许直观上很明显,请注意指定文本属性有很多副作用。你可以在屏幕上看到它

要间接调用一个方法,您需要另一个车辆,您需要一个代理。非常类似于C中的函数指针。任何关于.NET编程的介绍性书籍都会解释它们。您可以声明自己的委托类型,但更喜欢.NET framework中内置的泛型委托类型。添加对System.Core的引用,以便可以使用泛型操作委托类型。您需要首先编写一个方法来分配Text属性:

String ^% text = button->Text ; 
text = "something" ;
将使用以下示例方法更新:

private: 
    void updateTextBox(String^ text) {
        textBox1->Text = text;
    }
    void Test(Action<String^>^ updater) {
        updater("foo");
    }
void测试(操作^updater){
更新程序(“foo”);
}
请注意此方法如何更新任何文本框,由您传递的委托对象决定哪个文本框。使用如下代码创建委托变量:

private: 
    void updateTextBox(String^ text) {
        textBox1->Text = text;
    }
    void Test(Action<String^>^ updater) {
        updater("foo");
    }
Test(gcnewaction(this,&Form1::updateTextBox));

好的,我明白了。非常感谢你!好的,我明白了。非常感谢你!