如何将控件分解到文件夹中?

How do I break controls out into in a folder?

我正在构建一系列覆盖 Windows 默认行为的控件,但这最终会变得很长。我对 C# 有点陌生,但我知道惯例是将代码按功能分离到它们自己的 classes 中以提高可读性等。如果我想移动修复(通过完全删除)Windows 的 F1 帮助的代码,我该怎么做?

现在,我创建了一个文件夹,然后创建了一个新文件夹 class。我自动生成然后自定义构造函数如下:


namespace MyWay.Fixers
{
    class F1Fixer
    {
        // Used to know the long-ass number soup of the user that's logged in. Necessary because when we run as admin, it would normally change THEIR settings
        private string loggedInSIDStr;

        public F1Fixer(string SIDStr)
        {
            loggedInSIDStr = SIDStr;
        }
        private void CheckF1()
        {
            using (var hku = RegistryKey.OpenBaseKey(RegistryHive.Users, RegistryView.Registry64))
            {
                using (var F1key = hku.OpenSubKey(loggedInSIDStr + @"\SOFTWARE\Classes\TypeLib\{8cec5860-07a1-11d9-b15e-000d56bfe6ee}.0[=10=]\win32"))
                {
                    // EGADS! It's active!
                    if (F1key == null)
                    {
                        fckF1RestoreBtn.Enabled = false;
                        fckF1KillBtn.Enabled = true;
                        fckF1Status.Text = "That creepy bugger is waiting and watching.";
                        fckF1Status.BackColor = Color.FromArgb(255, 232, 0);
                    }
                    else
                    {
                        fckF1RestoreBtn.Enabled = true;
                        fckF1KillBtn.Enabled = false;
                        fckF1Status.Text = "The F1-Help function had been put in it's place.";
                        fckF1Status.BackColor = Color.FromArgb(0, 200, 50);
                    }
                }
            }
        }
        private void fckF1KillBtn_Click(object sender, EventArgs e)
        {
            using (var hku = RegistryKey.OpenBaseKey(RegistryHive.Users, RegistryView.Registry64))
            {
                RegistryKey setter = hku.CreateSubKey(loggedInSIDStr + @"\SOFTWARE\Classes\Typelib\{8cec5860-07a1-11d9-b15e-000d56bfe6ee}.0[=10=]\win32", RegistryKeyPermissionCheck.ReadWriteSubTree);
                setter.SetValue("", "");
                setter.Close();
                setter = hku.CreateSubKey(loggedInSIDStr + @"\SOFTWARE\Classes\Typelib\{8cec5860-07a1-11d9-b15e-000d56bfe6ee}.0[=10=]\win64", RegistryKeyPermissionCheck.ReadWriteSubTree);
                setter.SetValue("", "");
                setter.Close();
            }
            CheckF1();
        }

        private void fckF1RestoreBtn_Click(object sender, EventArgs e)
        {
            Registry.Users.DeleteSubKeyTree(loggedInSIDStr + @"\SOFTWARE\Classes\Typelib\{8cec5860-07a1-11d9-b15e-000d56bfe6ee}.0[=10=]");
            CheckF1();
        }

    }
}

问题是文件夹中的 class 无法访问我的表单元素。 program.cs 中的所有现有(和工作代码)突然变成红线,没有任何建议的修复。我还没有找到一个很好的教程或视频来解释如何正确地编写代码——也许它被认为太基础了,但我从来没有用 Java 或类似的 class-heavy 语言编写过代码。我通常只是将我的代码放在几个由 function/idea 分隔的文件中(没有 classes)。

如果我要这样做,我想正确地做到这一点,但我该如何做到并使其发挥作用?

您通常会在 Form1.cs 中保留特定于 GUI 的代码并从中调用 F1Fixer.cs 中的业务逻辑(通常通过创建 Fixer 对象或调用静态方法)。

否则,您可以通过构造函数或函数参数将 objects/functions 从 Form1.cs 传递到 F1Fixer.cs,但这不是一个好主意。