Winforms 如何在C+中正确调用带有switch by enum类的case语句+/CLI?

Winforms 如何在C+中正确调用带有switch by enum类的case语句+/CLI?,winforms,enums,c++-cli,windows-forms-designer,Winforms,Enums,C++ Cli,Windows Forms Designer,我确实创建了一个枚举,以便在不同的选项之间进行选择。在最后一个阶段,我得到choosen枚举 但我的开关盒表达式有点问题 枚举: 迪克拉斯: public ref class Fenster2: public System::Windows::Form{ private: MyObjForm ^ form; double breite; double hoehe; Fenster2(MyOb

我确实创建了一个枚举,以便在不同的选项之间进行选择。在最后一个阶段,我得到choosen枚举

但我的开关盒表达式有点问题

枚举:

迪克拉斯:

  public ref class Fenster2: public System::Windows::Form{
        private: MyObjForm ^ form;
                 double breite;
                 double hoehe;

        Fenster2(MyObjForm ^ obj, double h, double b) : form{ obj }, hoehe { h }, breite{ b }
    {
        InitializeComponent();
    }
 ..
 }
开关箱:

  switch (form) {
    case MyObjForm::Rechteck:
        gr->DrawRectangle(pen, 30.0f, 30.0f, breite, hoehe);
        break;
      case MyObjForm::Ellipse:
        gr->DrawEllipse(pen, 30.0f, 30.0f, breite, hoehe);
        break;
}
VisualStudio说开关(表单)中有一个错误,它应该是整数类型或枚举类型

但它说:不允许使用“MyObjForm^”类型的开关表达式

常量表达式是不正确的

我看不到正确的答案,但我不喜欢从enum类更改为enum类。类是用来保护它的,这样我认为它应该存在,即使没有它会更容易。我使用enum是为了学习如何使用它

public enum class MyObjForm { Rechteck, Ellipse };

MyObjForm ^ form;
托管枚举是值类型,而不是引用类型。
^
表示托管引用。对值类型的引用不必要地将其装箱,这在C++/CLI中是一种奇怪的类型,在C#中甚至是不可能的

^
从您使用的所有位置删除
MyObjForm
,您会没事的。

我成功了

switch((MyObjForm)form){
//cases
}

我确实需要(MyObjForm)表单来使用enum类,它可以工作

类型规范中的字符
^
是什么?不
^
表示托管引用吗?我认为<代码> MyObjult>窗体< /C>应该是<代码> MyObjFrm表格< /C>和<代码> MyObjult< /Cord>本地枚举。在CLI^中表示托管的引用,在C++中它是*。因为我可以编写枚举类,所以我尝试用这种方法只针对枚举。您能描述一下什么时候使用枚举类以及什么时候使用枚举吗?因为可以使用枚举类,所以必须有使用它的原因以及如何使用它。我知道,对于enum,我可以将int 0、1等与enum值一起使用,就像我的例子Rechteck/eliple一样。其中,我只能通过与名称空间一起使用referez with enum类来调用referez,例如MyObjForm::Rechteck。至少这是我所理解的。在编写托管代码时使用
public enum class
,您就在这里。如果要编写非托管代码,请对旧式枚举使用
enum
,或使用C++11的
enum类
(不含
public
)。有关首选
enum类
public enum类
的原因,请参阅。
switch((MyObjForm)form){
//cases
}