use*_*871 16 c# button winforms
我刚开始编程,我想使用WinForms制作多个按钮,你可以点击它们从白色变为石灰绿色再变回白色.我已经为一个按钮做了这个:
private void button1_Click(object sender, EventArgs e)
{
if (button1.BackColor != Color.Lime)
{
button1.BackColor = Color.Lime;
}
else
{
button1.BackColor = Color.White;
}
}
Run Code Online (Sandbox Code Playgroud)
现在我可以复制并粘贴所有按钮,但我知道这是低效的; 如果我使用winforms引用button2上的button1,它只会改变button1的颜色(显然).
那么,我需要使用辅助方法,新类还是其他什么?那会是什么样的?
Dav*_*vid 25
有几种方法.一种可能是创建一个不同按钮调用的通用函数:
private void button1_Click(object sender, EventArgs e)
{
ChangeColor(button1);
}
private void ChangeColor(Button button)
{
if (button.BackColor != Color.Lime)
button.BackColor = Color.Lime;
else
button.BackColor = Color.White;
}
Run Code Online (Sandbox Code Playgroud)
然后每个按钮处理程序可以使用相同的函数调用.
或者,如果所有这些按钮总是完全相同,那么您可以为所有按钮使用一个单击处理函数.在这种情况下,您需要做的是确定哪个按钮调用了处理程序(而您当前正在button1直接引用),以便您知道要更改哪个按钮.sender传递给处理函数的对象实际上是对调用处理程序的表单元素的引用.你需要做的就是施展它:
private void button_Click(object sender, EventArgs e)
{
var button = (Button)sender;
if (button.BackColor != Color.Lime)
button.BackColor = Color.Lime;
else
button.BackColor = Color.White;
}
Run Code Online (Sandbox Code Playgroud)
因此,首先处理程序抓取对调用它的按钮的引用,然后在该按钮上运行逻辑.另请注意我如何使处理函数的名称稍微更通用.现在,您将转到表单设计器并将其设置button_Click为应调用此按钮的所有按钮的单击处理程序.
Han*_*ant 14
你这样做的方式与任何C#类完全相同.您派生自己的类并自定义基类行为.每个事件都有一个相应的OnXxxx()方法,您可以覆盖它.
在项目中添加一个新类并粘贴此代码:
using System;
using System.Windows.Forms;
class MyButton : Button {
protected override void OnClick(EventArgs e) {
// Your code here
//...
base.OnClick(e);
}
}
Run Code Online (Sandbox Code Playgroud)
更改OnClick()中的代码以执行您想要执行的操作.编译.您现在可以在工具箱顶部拥有自己的按钮控件.并且可以在表单上删除任意数量的副本.它们都表现相同而无需在表单中添加任何代码.
可能最简单的方法是让每个按钮调用相同的点击处理程序.然后在你的处理程序内部使用Sender而不是硬编码Button1.
private void buttons_Click(object sender, EventArgs e)
{
var theButton = (Button) sender;
if (theButton.BackColor != Color.Lime)
{
theButton.BackColor = Color.Lime;
}
else
{
theButton.BackColor = Color.White;
}
}
Run Code Online (Sandbox Code Playgroud)
您可以Click通过强制转换sender来获取引发事件的按钮Button.
然后,您可以为每个按钮添加相同的处理程序.
| 归档时间: |
|
| 查看次数: |
4908 次 |
| 最近记录: |