我如何使用枚举?

时间:2014-09-13 14:41:19

标签: c# .net winforms enums

我在一个新类中创建的枚举这个类在一个dll(库项目)中我在这个解决方案中有两个项目,第一个dll(库)和第二个窗口形式:

我创建并想要使用的枚举是DannysCommands:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Threading;

namespace Capture.Interface
{
    public enum DannysCommands
    {
        Displayoverlays,
        Dontdisplayoverlays
    }

    public enum Direct3DVersion
    {
        Unknown,
        AutoDetect,
        Direct3D9,
        Direct3D10,
        Direct3D10_1,
        Direct3D11,
        Direct3D11_1,
    }

    [Serializable]
    public delegate void RecordingStartedEvent(CaptureConfig config);
    [Serializable]
    public delegate void RecordingStoppedEvent();
    [Serializable]
    public delegate void MessageReceivedEvent(MessageReceivedEventArgs message);
    [Serializable]
    public delegate void ScreenshotReceivedEvent(ScreenshotReceivedEventArgs response);
    [Serializable]
    public delegate void DisconnectedEvent();
    [Serializable]
    public delegate void ScreenshotRequestedEvent(ScreenshotRequest request);
    [Serializable]
    public delegate void DisplayTextEvent(DisplayTextEventArgs args);

    public enum MessageType
    {
        Debug,
        Information,
        Warning,
        Error
    }

    [Serializable]
    public class CaptureInterface : MarshalByRefObject
    {

然后在同一个项目中有两行绘制,我希望在显示它的Displayoverlays时,以及它的Dontdisplayoverlays不绘制时。

这个类我也可以从项目窗口表单中调用form1。 在form1中我想使用一个按钮点击并检查可能有一个bool变量,所以当它的Displayoverlays绘制时会生成线条,当它的Dontdisplayoverlays不绘制时。

在dll(库)项目中,还有另一个带有绘图线的类:

if (Capture.Interface.DannysCommands.Displayoverlays)
                            {

                            }     
                                _spriteEngine.DrawString(textElement.Location.X + 1800, textElement.Location.Y, textElement.Text, textElement.Color.R, textElement.Color.G, textElement.Color.B, textElement.Color.A, font);
                                _spriteEngine.DrawString(textElement.Location.X + 1800, textElement.Location.Y + 25,
                                                  DateTime.Now.ToString("h:mm tt"), textElement.Color.R, textElement.Color.G, textElement.Color.B, textElement.Color.A, font);       

我知道枚举不是bool所以如果我这样做不起作用会给出错误。

如何使用带有form1的枚举和带有绘制线的类?

在form1中,当我点击一个按钮一次绘制时,使用第二次点击按钮的行不会使用枚举进行绘制。

2 个答案:

答案 0 :(得分:2)

实际上没有必要使用Enum。根据我的理解,你只需要绘制一次线条。假设你有一个表格:

public partial class FrmMain : Form
{
    private bool isClicked;
    private void FrmMain_Load(object sender, EventArgs e)
    {
        isClicked = false;
    }

    private void Button1_Click(object sender, EventArgs e)
    {
        if (isClicked) return;
        isClicked = true;
        //...draw lines here...
    }
}

Enum适用于有选项的情况,并且您希望为程序员提供一组标准选择,以限制输入,当然还有不需要输入的错误。

枚举,您可以将其与switch声明一起使用。

答案 1 :(得分:1)

您需要设置DannysCommands类型的变量。您可以使用该变量并像往常一样在if语句中检查它的值。 所以:     DannysCommands cmd = DannysCommands.InitialValue;

在某些时候,您将cmd = DannysCommands.DisplayOverlays;

然后:

if(cmd == DannysCommands.DisplayOverlays)
{
  ...
}

注意您使用枚举来跟踪状态。虽然还有其他方法可以使用枚举,但我相信这是最自然的方式。