我无法让我的开始'当我选择任一个收音机框时显示的按钮。
理想情况下,当选择其中一个方框时,“开始”#39;按钮将启用并允许单击。
以下是我的表单代码,因为我对C#相对较新,我不确定是否发布了您需要的所有代码,如果需要,我会发布更多代码。< / p>
public partial class mainForm : Form
{
public mainForm() {
InitializeComponent();
}
private void label1_Click(object sender, EventArgs e) {
}
private void mainForm_Load(object sender, EventArgs e) {
title.Font = new Font("Arial", 10, FontStyle.Bold);
}
private void startButton_Click(object sender, EventArgs e) {
if (radioDice.Checked) {
startButton.Enabled = true; //Activates 'start' button
whichDiceGameForm GameForm = new whichDiceGameForm();
GameForm.Show();
}
if (radioCard.Checked) {
startButton.Enabled = true; //Activates 'start' button
whichCardGame GameForm = new whichCardGame();
GameForm.Show();
}
}
}
[张贴给朋友。]
答案 0 :(得分:2)
您已将启用代码放在按钮的Click事件处理程序中,而您应该在更改的复选框上执行此操作。 拿这个代码:
if (radioDice.Checked)
{
startButton.Enabled = true;
}
到radioDice复选框改变了事件处理程序和这一个:
if (radioCard.Checked)
{
startButton.Enabled = true; //Activates 'start' button
}
到radioCard复选框改变了事件处理程序。
答案 1 :(得分:1)
伙计,认真?
解答: 您正在尝试在单击该按钮时启用DISABLED按钮。您无法单击“禁用”按钮。更重要的是 - 你复制了你的代码。
应始终启用按钮。你只有两个选择。每个选择启用按钮。所以它应该始终启用。无论选择。如果隐藏了某些内容并且可能禁用了按钮,则启用Radio Click事件中的按钮。
有关您的代码的其他信息: 现在。关于代码重复。看看你在startButton_Click中做了什么。你有重复的代码。
您可以执行以下操作:
BaseGameForm f = null;
if(radioDice.Checked)
f = new DiceGameForm();
else
if(radioCard.Checked)
f = new CardGameForm();
f.Show();
(BaseGameForm是每场比赛的基础形式) 但这不是一个好的解决方案。更好的解决方案是(在construtor的某个地方):
radioDice.Tag = new DiceGameForm();
radioCard.Tag = new CardGameForm();
然后在“开始”按钮中单击,查找已选中的收音机:
foreach(Control c in selectGameTypeGroupBox.Controls) //you could do this using LINQ
{
if((c is RadioButton) && ((RadioButton)c).Checked)
{
((Form)c.Tag).Show();
}
}
但这仍然不是一个好的解决方案,因为你在启动时创建所有游戏形式,这是愚蠢的。
因此,更好的解决方案是将游戏形式类名保留在您的无线电标签属性中,然后使用反射和激活器创建此类的对象。
但这仍然不是最好的解决方案。但我认为这是你的第一个应用程序之一,所以我现在不会告诉你将gui与逻辑分开。如果您想了解更多信息 - 请在互联网上阅读。或者只是问问。