我正在尝试编写一个循环并重复调用其他方法的方法。循环中有一个地方我需要暂停并等待用户点击GUI上的几个按钮之一。我以前用命令行代码完成了这个,但是我不确定如何等待并检查它是否已被点击任何按钮。如果有人可以帮助我,我将非常感激。以下是我想要做的一个例子。
编辑:我认为更多的信息可能有所帮助,也许我正在考虑这个错误。我正在尝试构建一个简单的游戏,其中有2个玩家0,1或2个玩家可能是机器人,而其他玩家将是人类。我想要一个基本的Player类,它有继承自Player的Human和Bot类。While(MoreLeftToD0){ Method1(); WaitForUserToClickButton(); If(Button1 was clicked) ProcessWithButton1(); else ProcessWithButton2(); }
循环用于游戏板,我希望能够调用CurrentPlayer.GetMove(gameBoard),对于机器人来说,它将通过游戏板并让他们决定移动。但是,如果它是人,GetMove()应该等待用户单击GUI上的按钮,说明他们想在板上做什么,然后相应地处理点击。
希望这会清除目的。如果有更好的方法可以做到这一点,我很乐意听取建议。谢谢!
答案 0 :(得分:3)
通常,您可以通过拆分之前要完成的工作以及按钮点击之后要完成的工作来完成此操作。
Part1()
{
DoSomething();
btn.Enabled = true;
}
private void button1_Click(object sender, EventArgs e)
{
btn1.Enabled = false;
Part2();
}
执行某些操作,启用您已连接到button1_Click
事件处理程序的按钮,当用户单击该按钮时,禁用该按钮,以便他无法再次单击该按钮。
答案 1 :(得分:0)
无需这么做。
您只需要在Windows窗体中使用事件处理程序。
Here's您可以阅读的演练。
例如,在C#中,您可以订阅该事件,并在以下代码中编写您所记录的任何逻辑:
private void button1_Click(object sender, System.EventArgs e)
{
// Add event-handler code here.
}
答案 2 :(得分:0)
因此,在WinForms中,您已经有了一个消息循环。您处理此问题的方法是订阅按钮点击事件。下面的这篇文章可能有助于为您解决一些问题:
https://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-10878_11-1050284.html
如果这不是您的意思,请更新,我会尝试相应地进行编辑。
答案 3 :(得分:0)
根据您在michael帖子的评论中描述的内容,您可能最好从IPlayer接口继承,或者如果Part1和Part2相同,则是基类。
public class Player
{
protected void Part1() { /* ... */ };
protected void Part2() { /* ... */ };
}
public class HumanPlayer : Player
{
public void GetMove()
{
Part1();
GetMouseClick();
Part2();
}
}
public class BotPlayer : Player
{
public void GetMove()
{
Part1();
Part2();
}
}
这样你就得到了Player对象,你仍然可以对待它。
List<Player> players = new List<Player>()
{
new BotPlayer(),
new HumanPlayer()
};
// ...
foreach (Player p in this.players)
p.GetMove();