C++ Builder,将参数传递给 onClick 按钮事件
C++ Builder, pass argument to onClick button event
我正在使用 C++Builder 创建 GUI。
我动态创建了一个按钮,这个按钮有一个OnClick
事件:
TButton* exportLongitudinalButton = new TButton(infoGroupBox);
exportLongitudinalButton->Parent = infoGroupBox;
exportLongitudinalButton->Caption = "Export DXF";
exportLongitudinalButton->OnClick = frmConcreteWidth -> onDXFExport;
onDXFExport
函数:
void __fastcall TfrmConcreteWidth::onDXFExport(TObject *Sender)
{
double x = 2.0;
double y = 4.0;
dxfFile.drawLongitudinalPlot(x,y);
}
有没有办法通过 OnClick
事件函数传递参数?
我想要一个 onDXFExport
函数,它看起来像这样:
void __fastcall TfrmConcreteWidth::onDXFExport(TObject *Sender, double x, double y)
并这样称呼它:
exportLongitudinalButton->OnClick = frmConcreteWidth -> onDXFExport(this, x, y)
这可能吗?
你所要求的通常是不可能的,至少不是你想要的方式。
OnClick
事件具有您无法更改的非常独特的签名。因此,您只需将 x
/y
值存储在 onDXFExport()
需要时可以访问的其他地方。
有很多不同的方法可以解决这个问题。
例如,使用 TfrmConcreteWidth
对象的数据成员。或者创建一个 struct
/class
实例来保存值,然后将指向该实例的指针存储在 TButton::Tag
属性 中。或者从 TButton
派生一个新的 class 并向其添加您自己的数据成员。
最接近您要求的方法也是最复杂的方法 - 创建一个直接存储值并使用内联汇编调用 onDXFExport()
的 thunk,然后您可以分配一个通过使用 TMethod
结构指向事件的那个 thunk 的指针。但是当其他方法更容易和更安全地使用时,我不建议使用这种方法。
我正在使用 C++Builder 创建 GUI。
我动态创建了一个按钮,这个按钮有一个OnClick
事件:
TButton* exportLongitudinalButton = new TButton(infoGroupBox);
exportLongitudinalButton->Parent = infoGroupBox;
exportLongitudinalButton->Caption = "Export DXF";
exportLongitudinalButton->OnClick = frmConcreteWidth -> onDXFExport;
onDXFExport
函数:
void __fastcall TfrmConcreteWidth::onDXFExport(TObject *Sender)
{
double x = 2.0;
double y = 4.0;
dxfFile.drawLongitudinalPlot(x,y);
}
有没有办法通过 OnClick
事件函数传递参数?
我想要一个 onDXFExport
函数,它看起来像这样:
void __fastcall TfrmConcreteWidth::onDXFExport(TObject *Sender, double x, double y)
并这样称呼它:
exportLongitudinalButton->OnClick = frmConcreteWidth -> onDXFExport(this, x, y)
这可能吗?
你所要求的通常是不可能的,至少不是你想要的方式。
OnClick
事件具有您无法更改的非常独特的签名。因此,您只需将 x
/y
值存储在 onDXFExport()
需要时可以访问的其他地方。
有很多不同的方法可以解决这个问题。
例如,使用 TfrmConcreteWidth
对象的数据成员。或者创建一个 struct
/class
实例来保存值,然后将指向该实例的指针存储在 TButton::Tag
属性 中。或者从 TButton
派生一个新的 class 并向其添加您自己的数据成员。
最接近您要求的方法也是最复杂的方法 - 创建一个直接存储值并使用内联汇编调用 onDXFExport()
的 thunk,然后您可以分配一个通过使用 TMethod
结构指向事件的那个 thunk 的指针。但是当其他方法更容易和更安全地使用时,我不建议使用这种方法。