C# 如何标准化许多按钮事件#
你能告诉我如何组合多按钮活动吗 编写所有多按钮事件是不好的可维护性。 所以我想把许多按钮事件变成一个方法。 像这样 以前C# 如何标准化许多按钮事件#,c#,.net,winforms,C#,.net,Winforms,你能告诉我如何组合多按钮活动吗 编写所有多按钮事件是不好的可维护性。 所以我想把许多按钮事件变成一个方法。 像这样 以前 private void button1_Click(object sender, EventArgs e) { //button1 event } private void button2_Click(object sender, EventArgs e) { //button2event } private void buttonN_Click(obj
private void button1_Click(object sender, EventArgs e)
{
//button1 event
}
private void button2_Click(object sender, EventArgs e)
{
//button2event
}
private void buttonN_Click(object sender, EventArgs e)
{
//buttonNevent
}
之后
在ASP.NET Web表单中,我已经像这样解决了这种情况 定义一个常规隐藏按钮(这将是所有按钮的触发器)。您应该使用样式将其定义为“隐藏”
<asp:Button ID="btnPrintPdf" runat="server" Style="display: none" OnClick="btnPrint_Click" />
如您所见,我使用枚举通过单击不同的按钮来定义要打印的内容
最后一部分是定义“通用”按钮逻辑:
protected void btnPrint_Click(object sender, EventArgs e)
{
string sVal = Request.Params["__EVENTARGUMENT"];
if (string.IsNullOrEmpty(sVal))
return;
string[] tks = sVal.Split('|');
if (tks.Length != 2)
return;
string sOrderId = tks[0];
string sPrintType = tks[1];
int orderId = 0;
int iPrintType = 0;
if (!int.TryParse(sOrderId, out orderId) || !int.TryParse(sPrintType, out iPrintType))
return;
string sPdf = null;
if (iPrintType == (int)PrintDocs.NextStepsPlan)
{
....
}//endif
if (iPrintType == (int)PrintDocs.NetWorth)
{
....
}//endif
你可以试试这样的。如果你有数百个按钮,字典会比“如果”更好
private Dictionary<string, Action<object, EventArgs>> buttonEventMap = new Dictionary<string, Action<object, EventArgs>>();
private void setup()
{
buttonEventMap["button1"] = (object sender, EventArgs e)=>{Console.WriteLine("Button 1 Clicked");};
// etc....
}
private void buttonClickEvent(object sender, EventArgs e)
{
Button btn = (Button)sender;
if( buttonEventMap.ContainsKey(btn.Name))
buttonEventMap[btn.Name](sender, e);
}
private Dictionary buttonEventMap=new Dictionary();
私有无效设置()
{
buttonEventMap[“button1”]=(对象发送者,事件参数e)=>{Console.WriteLine(“单击按钮1”);};
//等等。。。。
}
私有void按钮ClickEvent(对象发送方,事件参数e)
{
按钮btn=(按钮)发送器;
if(buttonEventMap.ContainsKey(btn.Name))
buttonEventMap[btn.Name](发送方,e);
}
虽然这只是与实现单独的ButoCutcCype事件没有什么不同。
我假设这是WiFrm,考虑编辑你的问题并添加相关的UI标签。而不是双击事件,单击控件的事件选项卡,然后取消单击事件类型按钮ClickEvent
嗯,在我看来,第二个选项肯定是两个选项中最差的一个。。。它有一种非常难闻的气味,一个处理者有太多完全不同的职责。如果所有按钮(大致上)都做相同的事情——可能只是使用不同的参数——那么我们可能会争论。但通常情况下——不,这种想法不好,会导致更糟糕的可维护性。但是如果这里有一个有效的用例(你没有建议),那么解决方案就是手动分配所有处理程序,或者编写一些代码将所有按钮连接到一个处理程序。实际上,这取决于每个按钮事件的代码有多相似。我们不知道。讽刺的是,如果你写了//button1事件
,如果你用真实的代码替换它,就说:button1\u点击(发送者,e)代码>然后你基本上绕着一圈走。
protected void btnPrint_Click(object sender, EventArgs e)
{
string sVal = Request.Params["__EVENTARGUMENT"];
if (string.IsNullOrEmpty(sVal))
return;
string[] tks = sVal.Split('|');
if (tks.Length != 2)
return;
string sOrderId = tks[0];
string sPrintType = tks[1];
int orderId = 0;
int iPrintType = 0;
if (!int.TryParse(sOrderId, out orderId) || !int.TryParse(sPrintType, out iPrintType))
return;
string sPdf = null;
if (iPrintType == (int)PrintDocs.NextStepsPlan)
{
....
}//endif
if (iPrintType == (int)PrintDocs.NetWorth)
{
....
}//endif
private Dictionary<string, Action<object, EventArgs>> buttonEventMap = new Dictionary<string, Action<object, EventArgs>>();
private void setup()
{
buttonEventMap["button1"] = (object sender, EventArgs e)=>{Console.WriteLine("Button 1 Clicked");};
// etc....
}
private void buttonClickEvent(object sender, EventArgs e)
{
Button btn = (Button)sender;
if( buttonEventMap.ContainsKey(btn.Name))
buttonEventMap[btn.Name](sender, e);
}