我有一个小菜单条项目,我有很多按钮激活不同的形式。
一个按钮的代码是:
Form B1 = new Form1();
private void Button1_Click(object sender, EventArgs e)
{
if (B1.Visible == false)
{
B1 = new Form1();
}
B1.Visible = true;
B1.Activate();
}
我还有一个鼠标进入和离开事件:
private void Button1_MouseEnter(object sender, EventArgs e)
{
Button1.Text = "Something prdy intriguing";
}
private void Button1_MouseLeave(object sender, EventArgs e)
{
Button1.Text = "Hi";
}
一个工具提示:
private void Tooltips()
{
ToolTip forB1 = new ToolTip();
forB1.SetToolTip(button1, "21.11.17");
}
现在想象一下,我需要大约8个8个不同形式的按钮,这意味着我必须再次重复所有这些并获得收益,浪费时间并占用大量代码空间。
是否有可能压缩这些? 这是我的世界,我不确定从哪里开始优化。
答案 0 :(得分:1)
一个选项是将所有这一切移动到一个功能:
public void AttachMenuStripButtonHandlers(
Button btn,
Form form,
string enterText,
string leaveText,
string tooltip) {
btn.Click += (sender, args) => {
form.Visible = true;
form.Activate();
};
btn.MouseEnter += (sender, args) => {
btn.Text = enterText;
};
btn.MouseLeave += (sender, args) => {
btn.Text = leaveText;
};
new ToolTip().SetToolTip(btn, tooltip);
}
对于每个按钮调用,这样:
AttachMenuStripButtonHandlers(Button1, B1, "on enter", "on leave", "tooltip");
答案 1 :(得分:0)
对于你问题的第二部分,你可以做这样的事情
private void Button_MouseEnter(object sender, EventArgs e)
{
((Button)sender).Text = "Something prdy intriguing";
}
private void Button_MouseLeave(object sender, EventArgs e)
{
((Button)sender).Text = "Hi";
}
您需要将相同的事件处理程序附加到所有按钮。
答案 2 :(得分:0)
所以我在这里偷了@Evk的代码,但基本上这就是我想要的方式。
public void ButtonHandlers(Type NewForm)
{
NewButton.Click += (sender, args) =>
{
Form TheNewMain = (Form)Activator.CreateInstance(NewForm);
if (TheNewMain.ShowDialog() != DialogResult.Cancel)
{
TheNewMain.Activate();
}
};
基本上我添加的不是获取Form我必须得到类型,因为我想要的是当一个表单是Visible时,它不会打开它两次,通过Evks代码打开它是的但是在关闭它的处置,它不能创建它的新实例。
在代码中,我只需要在typeof(formName)
NewForm
谢谢Evk!