Ben*_*ett 0 c# button windows-forms-designer
我是初学者并且有一个任务,我必须编写NIM游戏.我从15个"令牌"开始,每回合最多可以删除三个"隐藏".到目前为止,我通过执行以下操作隐藏了这些令牌.
private void button1_Click(object sender, EventArgs e)
{
button1.Visible = false;
}
private void button2_Click(object sender, EventArgs e)
{
button2.Visible = false;
}
Run Code Online (Sandbox Code Playgroud)
我只是复制并粘贴了多次,并更改了按钮编号,以便我的按钮在点击时关闭.这可能是显而易见的,但有没有更有效的方法来做到这一点,而不是有15个按钮关闭方法?
您可以为每个按钮使用相同的单击事件,并使用sender对象,将其强制转换为Button:
private void buttonsToClose_Click(object sender, EventArgs e)
{
((Button)sender).Visible = false;
}
Run Code Online (Sandbox Code Playgroud)
然后只需将该处理程序添加到您想要在单击时关闭的每个按钮.
但请注意,InvalidCastException如果您或其他任何人在不是a的对象上使用此处理程序,这将抛出一个Button,所以如果您实际上要使用此代码,我会添加某种条件来检查实际类型发件人.
此外,您可以通过将发送者强制转换为任何 Control对象来重用它Control,因为它Button继承自Control,并且所有Control对象都具有该Visible属性.这是一个例子,有条件防止无效的演员:
private void controlToMakeInvisible_Click(object sender, EventArgs e)
{
if (sender.GetType() == typeof(Control))
{
((Control)sender).Visible = false;
}
}
Run Code Online (Sandbox Code Playgroud)
最后一点 - 从您的帖子看来,您可能会对使用Windows窗体中的对象创建和连接事件的方式略有误解.如果您进入Designer,请添加一个Click事件,并将其显示在您的Form代码中,如下所示:
private void button1_Click(object sender, EventArgs e)
Run Code Online (Sandbox Code Playgroud)
这种方法的名称与其功能无关.button1部分button1_Click实际上与它没有任何逻辑联系Button button1- 它只是Designer分配的默认名称.该方法的实际分配button1_Click到的Button.Click事件是自动生成到您的窗体的Designer.cs方法.
这一点是,如果您复制并粘贴button1_Click并更改button1with的每个发生率button2,如下所示:
private void button2_Click(object sender, EventArgs e)
{
button2.Visible = false;
}
Run Code Online (Sandbox Code Playgroud)
点击后它不会触发button2.实际上,它根本不会发射,因为该方法实际上并未连接到任何控件/事件.