我一直在尝试使用Visual Inheritance,这样我就可以重复使用多种形式的按钮。
基本上我想要实现的是,我希望按钮在不同的表单中具有相同的视觉行为,但是,它们应该根据继承它的形式执行不同的操作。
假设我在FormButtonBar
新|编辑|搜索|取消|关闭
应该禁用它们或根据当前的情况更改文本和图标(我使用.Tag
执行此操作),这些是显示的替代选项
保存|保存|删除|取消|关闭
即使我在继承此内容的表单上按原样运行,我显然希望这些按钮根据我拥有它们的形式处理不同的内容。
我想到的是一种调用saveNewItem()
saveChangedItem()
removeItem()
等方法的方法,即每个继承FormButtonBar
的表单都应该有。
但是如何从FormButtonBar
调用它们?
例如:
private void buttonSearchRemove_Click(object sender, EventArgs e)
{
if (buttonSearchRemove.Tag == "search")
{
//call the search form here and wait for something to be returned
//the following 3 lines are the ones that switch text, icons and enabled/disabled on the buttons
utils.hablitarBotoes(panelBotoes, "abc");
utils.alternarBotoes(panelBotoes, "b");
buttonBuscarExcluir.Text = "Excluir";
}
else if (buttonSearchRemove.Tag == "remove")
{
DialogResult reply = MessageBox.Show("Are you sure you want to remove it?", "Are you sure?", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (reply == DialogResult.Yes)
{
//CALL REMOVE METHOD THAT SHOULD BE IN THE FORM INHERITING THIS ONE, BUT HOW?
removeItem();
}
utils.hablitarBotoes(panelBotoes, "nbf");
utils.alternarBotoes(panelBotoes, "");
buttonNovoSalvar.Text = "New";
buttonBuscarExcluir.Text = "Search";
buttonAlterarSalvar.Text = "Edit";
}
}
答案 0 :(得分:0)
您应该在基类中将这些方法声明为虚方法,然后在子类中覆盖它们。
public class MyBaseClass
{
public virtual void RemoveItems()
{
}
}
public class MyDerivedClass : MyBaseClass
{
public override void RemoveItems()
{
//your specific implementation for this child class
}
}