创建公共类以共享MenuControls

时间:2014-08-22 20:21:10

标签: c#

我有一个具有多种不同形式的程序,其中大多数形式都有一些重复,特别是在表单操作控件方面。如何创建一个公共类,以便我在每个表单上都没有相同的代码,但仍然可以操作单个表单。例如,下面的代码是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();
    } 

2 个答案:

答案 0 :(得分:0)

您不需要存储单独的bool onTopForm.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();
    } 
}