在C ++ / CLR Windows窗体中更改特定事件“sender”的属性,而不是全部切换它们

时间:2014-03-10 05:12:15

标签: c++ visual-studio-2013

所以,我有这个表格有很多数字上下字段,每个字段都与描述该字段的“统一系统”的标签相关联(例如,m / s,ft,hp等)。我使标签可点击,以便用户可以更改每个字段的统一系统,以及相应的数值。

好的,我点击了点击的标签数据,以确定点击了一个和必须完成的计算。但是现在他们已经完成了,我需要更改标签文本,点击的文本,它可能是任何人....

理想的情况是这样的:

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

这没关系,我可以投射发件人,识别它,并做正确的事情。但是,我必须在表单中更改关于发件人的内容,但我不知道是谁,所以我需要(理想情况下):

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

显然,它不会像这样工作。任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

必须有一些神奇的东西可以解决问题,然后睡一觉,想一想其他的东西。有时在那之后我们设法很容易地解决问题。

更具体地说,在表单中有许多组:包含统一系统的clikable Label,带有值的numericUpDown控件,以及带有乘数的隐藏textBox,用于从一个系统到另一个系统的转换。这可能不是最好的安排,但它现在很好。所以,我找到的一个解决方案是这样的(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控制器是一个接一个地TabIndex ....

希望这对我的其他新手有所帮助!