複数のフォームで一連のボタンを再利用できるように、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";
}
}