Visual Studio 2013 - 更改 C++/CLI Windo 窗体中特定事件"sender"的属性,而无需切换所有事件

visual studio 2013 - Alter properties of specific event "sender" in C++/CLI Windoes Form without switching through them all

本文关键字:事件 属性 sender 更改 C++ 2013 Studio CLI 窗体 Windo Visual      更新时间:2023-10-16

所以,我有一个带有许多数字向上和向下字段的表单,每个字段都与描述该字段的"统一系统"的标签相关联(例如,m/s, ft, hp等)。我把标签做成了可点击的,这样用户就可以改变每个字段的统一系统,以及相应的数值。

Ok,我转换了已单击的标签数据,以确定单击了哪个标签以及必须进行的计算。但是现在他们已经完成了,我需要改变标签文本,点击的那个,它可以是任何人....

理想的情况是这样的:

String^ LabelName = ... cast ... sender ... -> name (or some other property to identify the sender, like tabIndex)

这是好的,我可以转换发送者,识别它,并对它做正确的事情。但是,我必须更改表单中的发送者,但我不知道它是谁,所以我需要这样的内容(理想情况下):

this -> LabelName -> Text = ..... 

显然,它不是这样工作的。有人能帮我吗?

一定有什么神奇的东西让你在一个问题上绞尽脑汁,然后睡一觉,想想别的事情。在那之后,有时我们设法相当容易地解决问题。

更具体地说,在表单中有许多集:一个包含统一系统的可点击标签,一个带有值的数字updown控件和一个带有乘数的隐藏文本框,用于从一个系统转换到另一个系统。这可能不是最好的安排,但现在还不错。所以,我找到的一个解决方案是这样的(tb = textbox, nud = numericUpDown):

首先,我转换所有相关的控件(而不仅仅是它们的一个属性),并且转换在单击标签之后出现的其他控件,我使用这个最近发现的方法:getNextControl(),如下所示:

Label^ thisLabel = safe_cast< Label^ >( sender ); // this is the clicked label
NumericUpDown^ thisNud = safe_cast< NumericUpDown^ >( GetNextControl ( thisLabel, true ) ); // this contains the numeric value, and comes right after the label
TextBox^ thisTb = safe_cast< TextBox^ >( GetNextControl ( thisNud, true ) ); // this is a hidden field one a multiplier for conversions

之后,我对值和其他属性进行所有需要的操作。有了最终结果和其他数据在手,我可以(如此简单地)像这样做:

thisLabel -> Text    = u[ i ];
thisNud   -> Maximum = System::Convert::ToDecimal( maximum / m[ i ] );
thisNud   -> Value   = System::Convert::ToDecimal( vNow  / m[ i ] );
thisTb    -> Text    = System::Convert::ToString ( m[ i ] );

当我决定试一试的时候,我简直不敢相信它能成功。几乎和我上面提到的理想情况一样。这假设3个控制器是TabIndexed一个接一个....

希望这将有助于其他一些像我一样的新手!