创建一个公用类来共享菜单控件

本文关键字:共享 菜单 控件 一个 创建 | 更新日期: 2023-09-27 18:19:06

我有一个程序,其中有几个不同的表单,其中大多数表单都有一些重复,特别是当涉及到表单操作控件时。我如何创建一个公共类,这样我就不会在每个表单上都有相同的代码,但仍然能够操纵单个表单。例如,下面的代码是一个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();
    } 

创建一个公用类来共享菜单控件

您不需要单独存储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;
        };
    }
}

如果您真的需要,让您的所有表单扩展一个基本表单,例如:

在您的情况下,我会使用一些基本形式与共同实现。这意味着你将把这些代码移动到一些单独的基类中,并且所有带有此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();
    } 
}