按钮在外部方法中点击事件?

时间:2012-04-14 03:12:19

标签: c#

我正在尝试在Visual Studio中使用C#创建一个相对基于文本的RPG。我已经挂断了尝试让类中的方法对表单上的按钮单击作出反应。喜欢根据点击的按钮从一种方法移动到另一种方法。

让我给你一个程序的基本布局。

我有一个frmMain和一个cls_EVENTS。它会变得更复杂,但是有一段时间我实际上已经开始工作了。

我希望frmMain成为玩家与程序交互的地方。它有文本屏幕,按钮,状态表,大多数好玩的东西。在文本屏幕下方是6个按钮(分别标记为btn1 - btn6),我计划将文本更改为,以反映当前场景/事件的可用操作(检查,向右,告诉那个人你和他的母亲昨晚共进晚餐)。

'make'主菜单的控件位于cls_EVENTS中,主要是为了让主菜单按钮更方便地只是调用它来让播放器回到主菜单(而不是只是复制粘贴代码)来自frmMain方法)。

public partial class frmMain : Form
{
    //creates a static copy of the form that references to this form, I believe.
    public static frmMain MainForm { get; private set; }

    public frmMain()
    {
        InitializeComponent();

        // sets the static form as a copy of this form named MainForm.
        frmMain.MainForm = this;

        // calls the MainMenu() method in the cls_EVENTS class.
        cls_EVENTS.MainMenu();
    }

public void btn1_Click(object sender, EventArgs e)
{
}

//Same thing all the way down to btn6_Click
//And a couple of functions for manipulating the controls on the form... 
//(enabling buttons, pushing text to the textbox, etc)

我的cls_EVENTS是我想要实际编码事件的地方。就像MainMenu事件一样,它将改变文本框中的文本,更改按钮上的文本以反映当前选项,并禁用我不需要的按钮。

public class cls_EVENTS
{
    /*the Main menu, solely here for 'conveinence' (so I can have a Main Menu button on my form)*/
    public static void MainMenu()
    {
        //clears the text screen
        frmMain.MainForm.ScreenTextClear();

        //Enables the first button, disables the rest.
        frmMain.MainForm.ButtonEnable(true, false, false, false, false, false);

        //indent = true, write text to screen.
        frmMain.MainForm.ScreenText(true, "Welcome to the alpha of this game.");

        //test to make sure it ADDS TO the text rather then overwriting.
        frmMain.MainForm.ScreenText(true, "Hi");

        //changes the six button texts to the following six strings
        frmMain.MainForm.ButtonText("New Game", "Load Game", "About", "---", "---", "---");  

        //problem area

        //when player clicks button one
        //start the NewGame() method

        //when player clicks button two, after I eventually code such a function.
        //start the LoadGame() function

        //etc.     
    }

    Public void NewGame()
    {
        //etc.
    }
}

我尝试使用一个带有Sleep方法的循环来检查一个变量,每个按钮会添加一个不同的数字(只要intSelected为0,循环就会继续,btn1会加1,等等,等)

但这导致程序挂起。

另外,我觉得做我想做的事情会是一种混乱,不专业的方式。虽然我可能不是专业人士,但即使我有标准。

有人知道在按下按钮之前暂停程序执行的方法吗?或者更好地了解如何完成我想要完成的任务?我不能简单地将函数编码到点击事件中,因为这些按钮会不断改变

我会继续说C#不是我强大的语言。我最初在VB.Net中这样做,但遇到了同样的问题,并且导致相信C#更灵活一点。我甚至模糊地熟悉的唯一C语言是C ++,而我的课程至少在一年半之前。所以,请原谅'愚蠢'的编码,因为我是生锈。

1 个答案:

答案 0 :(得分:0)

经过一些实验和更多的Google搜索,我想我可能已经找到了它。

public static void MainMenu()
{
    frmMain.MainForm.ScreenTextClear();

    frmMain.MainForm.ButtonEnable(true, false, false, false, false, false);
    frmMain.MainForm.ScreenText(true, "Welcome to the alpha of this game.");
    frmMain.MainForm.ScreenText(true, "Hi");
    frmMain.MainForm.ButtonText("New Game", "Load Game", "About", "---", "---", "---");  

    // Potential solution.
    frmMain.MainForm.btn1.Click += delegate(object sender, EventArgs e)
        {
            NewGame();
        };    
}

这似乎正在做我想做的事。文本加载,按钮激活,然后单击它们启动适当的方法。上升重复。