我要将OnChange函数分配给另一个函数,如:
XComp->OnChange = SycnroChange(prgManVoltageSet_SB->Address);
但是编译器会给出错误:"不允许输入类型。"
我该怎么办?我不能这样分配吗?
答案 0 :(得分:0)
IIRC您可以在表单中进行类似的分配 - > onChange = xyz;其中xyz是具有适当签名的另一个函数(或成员函数)。你不能绑定参数和类似的东西。
所以你应该首先更改SynchroChange签名(大多数事件处理程序只需要一个通用的TObject * Sender),然后在该函数内部寻找prgManVoltageSet(除非可以从参数'Sender'中获取,但我没有足够的上下文此)
答案 1 :(得分:0)
根据您的说法,我知道您希望在SycnroChange(prgManVoltageSet_SB->Address)
更改时执行XComp
。
所以我认为您可以使用boost::signal2::signal
和boost::bind
的回调函数,例如boost::bind(&SycnroChange, this, _1)
。
当XComp
发生更改时,您可以调用callback(prgManVoltageSet_SB->Address)
来触发并获取int。我希望这些可以帮助您。
答案 2 :(得分:0)
您正在呼叫SycnroChange()
并将其返回值分配给OnChange
。 OnChange
事件需要一个指向符合TNotifyEvent
签名的对象方法的指针:
typedef void __fastcall (__closure *TNotifyEvent)(System::TObject* Sender);
SycnroChange()
的返回值为void
。因此错误。
对于您正在尝试的内容,您必须使用内部调用SycnroChange()
的单独事件处理程序方法:
__fastcall TGenerator::TGenerator(TComponent *Owner)
: TForm(Owner)
{
...
// FYI, you can assign this at design-time instead of in code...
XComp->OnChange = &XComChanged;
...
}
void __fastcall TGenerator::XComChanged(TObject *Sender)
{
SycnroChange(prgManVoltageSet_SB->Address);
}