如何将枚举类型发送到调用(委托)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);
我有一个修改 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);