我想知道我们为什么以及在哪里使用枚举器,我有一组图像我想为每个分配数字并将其放入枚举中我想设置数字而不是 我希望设置图像时的整个文件名,就像MessageBoxIcon枚举
一样由于
答案 0 :(得分:2)
我认为你的意思是枚举而不是枚举器。枚举用于指定可能的符号值或含义的离散集合。你确定这是你想要的吗?请注意,枚举在编译时被烘焙,之后无法更改,因此如果您的图像集将在运行时更改,则需要一些其他数据结构。
另请注意,枚举不能包含除其成员名称之外的任何信息,因此您无法将文件名与它们关联起来,例如。为此,您需要Dictionary
或类似的东西,例如:
enum Image
{
Image1,
Image2,
Image3
}
在某种方法中:
var imageFileNames = new Dictionary<Image, string>();
imageFileNames[Image.Image1] = "/path/to/file1.jpg";
imageFileNames[Image.Image2] = "/path/to/file2.jpg";
imageFileNames[Image.Image3] = "/path/to/file3.jpg";
答案 1 :(得分:0)
Enum is an explicit listing of all possible values of a set。只要有一组值可供选择,就可以使用枚举。枚举的另一个常用用法是设置flags
对于您的问题,我认为枚举可能不是最好的方法,因为我的文件名可能包含c#代码中不允许的字符。虽然您可以使用Enum descriptions hack来执行此操作。只需在参数中添加this
关键字,即可将GetDescription方法设为extension method。
答案 2 :(得分:0)
我强烈建议您在C#项目的Resources文件中存储您想要选择的图像。 (有关如何执行此操作,请参阅my answer here。)
然后,您需要在代码中创建一个枚举(它只是一个定义集合中所有可能值的列表)。我建议在项目中创建一个新的空文件以保存枚举并将其命名为枚举,以便您可以轻松地再次找到它。您的枚举文件将如下所示(您可以根据需要添加任意数量的值):
public enum PartyImage
{
None = 0,
SmileyFace = 1,
Flower = 2,
Balloon = 3
}
然后,无论您想要指定要显示的图像,都可以引用其中一个枚举值。在要处理显示图像的代码中,您必须使用switch
语句将您指定的枚举值转换为存储在项目资源中的图像文件:
private void FlowerButtonClick()
{
//When this button is clicked, change the displayed image to a flower picture
UpdateDisplayedImage(PartyImage.Flower);
}
//etc.
public void UpdateDisplayedImage(PartyImage image)
{
//Determine the image that was specified in the parameter,
//and update my picture box accordingly
switch (PartyImage)
{
case None:
myPicBox.Image = null;
break;
case Smileyface:
myPicBox.Image = MyWindowsApp.Properties.Resources.SmileyFace;
break;
case Flower:
myPicBox.Image = MyWindowsApp.Properties.Resources.Flower;
break;
case Balloon:
myPicBox.Image = MyWindowsApp.Properties.Resources.Balloon;
break;
}
}
在上面的示例中,FlowerButtonClick
方法只是指定您希望显示Flower
枚举中名为PartyImage
的图像。它包含的代码等同于调用MessageBox.Show
函数并指定要在消息框中显示的图像。您可以根据需要使用这些方法,并且它们可以位于代码中的任何位置,就像您可以在任何地方显示带有指定图标的消息框一样。
UpdateDisplayedImage
方法执行从项目的Resources文件中检索图像的实际工作,该文件对应于您指定并显示它的枚举值。这相当于MessageBox.Show
函数在创建并显示带有指定图标的新消息框时内部完成的工作。
有关枚举的更多信息,建议阅读: