我有一个具有多种不同形式的程序,其中大多数形式都有一些重复,特别是在表单操作控件方面。如何创建一个公共类,以便我在每个表单上都没有相同的代码,但仍然可以操作单个表单。例如,下面的代码是ToolStripMenuControl,用于使表单始终位于顶部。我有这个代码以其他形式重复了4次,但我似乎无法解决如何为此创建共享控件。我在这里缺少什么?
public bool onTop = false;
public bool ToggleTop()
{
if (onTop)
{
onTop = false;
this.TopMost = false;
keepOnTopToolStripMenuItem.Checked = false;
return onTop;
}
if (!onTop)
{
onTop = true;
this.TopMost = true;
keepOnTopToolStripMenuItem.Checked = true;
return onTop;
}
else return onTop;
}
private void keepOnTopToolStripMenuItem_Click(object sender, EventArgs e)
{
ToggleTop();
}
答案 0 :(得分:0)
您不需要存储单独的bool onTop
。 Form.TopMost
已经跟踪完全相同的值。
对于这个简单的任务,您的代码太长了。你可以简单地重写它:
public class Form5 : Form {
CheckBox cbTopMost = new CheckBox { Text = "Top Most" };
public Form5() {
Controls.Add(cbTopMost);
cbTopMost.CheckedChanged += delegate {
this.TopMost = cbTopMost.Checked;
};
}
}
如果您真的想要,请让所有表单扩展基本表单,例如示例。
答案 1 :(得分:0)
在你的情况下,我会使用一些基本形式与常见的实现。这意味着您将此代码移动到一个单独的基类,并且使用此ToolStripMenuControl的所有表单都将从它派生。
protected class FormWithToolStripControl : Form
{
//Initialization of ToolStripControl will be somewhere here
//And here your common code for all forms derived from this class
public bool onTop = false;
public bool ToggleTop()
{
if (onTop)
{
onTop = false;
this.TopMost = false;
keepOnTopToolStripMenuItem.Checked = false;
return onTop;
}
if (!onTop)
{
onTop = true;
this.TopMost = true;
keepOnTopToolStripMenuItem.Checked = true;
return onTop;
}
else return onTop;
}
private void keepOnTopToolStripMenuItem_Click(object sender, EventArgs e)
{
ToggleTop();
}
}