Winforms 如何在C+中正确调用带有switch by enum类的case语句+/CLI?
我确实创建了一个枚举,以便在不同的选项之间进行选择。在最后一个阶段,我得到choosen枚举 但我的开关盒表达式有点问题 枚举: 迪克拉斯: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
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
}