如何将枚举类型发送到调用(委托)Visual C++

How to send enum type to Invoke (delegate) Visual C++

我有一个修改 PictureBox 的函数,所以我需要使用一个委托。我的函数需要一个 int 来完成它的工作,我创建了一个枚举来定义它可以拥有的值。

但是,当我调用它时,出现了一个问题,因为它无法从我的枚举转换为对象,以便将函数发送给它。

我该如何面对?

我的函数:

System::Void modifyButtonPicture(int estado)

枚举:

enum BUTTON_STATE : int { PB_STOP = 0, PB_PLAY = 1 };

代表:

delegate void SetTextDelegatePlayButton(int estado);

调用:

Invoke(gcnew SetTextDelegatePlayButton(this, &Form1:: modifyButtonPicture), PB_PLAY);

错误消息(已翻译):

error C2664: 'System::Object ^System::Windows::Forms::Control::Invoke(System::Delegate ^,...cli::array<Type> ^)' : cannot convert 2nd parameter from 'BUTTON_STATE' to 'System::Object ^'

如 MSDN Control::Invoke Method (Delegate, array) 所述,Invoke 方法接受这些参数:

method
Type: System::Delegate
A delegate to a method that takes parameters of the same number and type that >are contained in the args parameter.

args
Type: array
An array of objects to pass as arguments to the specified method. This parameter can be nullptr if the method takes no arguments.

并且在您的调用中,您传递了一个 int 作为第二个参数(PB_PLAY)。

因此您需要将枚举转换为 System::Object 数组:

int play = (int)PB_PLAY;
array<Object^>^myEnumArray = {play};
Invoke(gcnew SetTextDelegatePlayButton(this, &Form1:: modifyButtonPicture), myEnumArray);