巨大的main.cs文件

时间:2009-02-26 19:29:09

标签: c# .net

我是C#的新手(来自Delphi),发现我的main.cs文件变得非常大。在Delphi中,我可以在.pas文件中创建类,并从我的主应用程序文件中使用它。我只需添加uses(filename)关键字。

我的问题是如何在C#中做类似的事情?例如:

的Delphi:

Button1.Visible = False;

我可以通过添加对主单元的引用来引用另一个单元中的按钮属性:

frmMain.Button.Visible = True;

在C#中,我想将此代码移动到另一个.cs文件,并从我的主窗体中调用它。它不起作用。

private void manageMainMenuButtons()
{
  if (rtbSharedSARP.Text == "")
  {
    utmToolBar.Tools["First"].SharedProps.Enabled = false;
    utmToolBar.Tools["Previous"].SharedProps.Enabled = false;
    utmToolBar.Tools["Next"].SharedProps.Enabled = false;
    utmToolBar.Tools["Last"].SharedProps.Enabled = false;
  }
  else
  {
    utmToolBar.Tools["First"].SharedProps.Enabled = true;
    utmToolBar.Tools["Previous"].SharedProps.Enabled = true;
    utmToolBar.Tools["Next"].SharedProps.Enabled = true;
    utmToolBar.Tools["Last"].SharedProps.Enabled = true;
  }
}

不是最好的例子,但我希望有人可以帮助我。

7 个答案:

答案 0 :(得分:4)

首先,您需要确保您位于相同的命名空间中:

namespace mynamesspace {

接下来,如果您的班级成员是私下宣布的,您需要表明您正在使用该班级:

public partial class frmMyForm : Form {

但请注意,这是扩展原始类。如果您正在访问公共成员(这是一个很好的方法),您可能只需要指定命名空间。

答案 1 :(得分:2)

除非你的“主”表单上有数百个控件,否则听起来好像你没有分离业务逻辑和表示逻辑。您应该设置单独的类(在单独的文件中)来处理您的业务逻辑,每个表单应该有自己的设计器和代码隐藏文件。

答案 2 :(得分:2)

假设您正在使用最佳实践并适当地分离逻辑(如果您不是那样的开始),C#使用所谓的部分类来允许您将类拆分为多个文件。 例如:

Main1.cs:

namespace Program
{
    public partial class Main
    {
        private Form frmMain;
    }
}

Main2.cs:

namespace Program
{
    public partial class Main
    {
        void MainMethod()
        {
             frmMain.Button.Visible = true;
        }
    }
}

MainMethod可以访问frmMain,因为就编译器而言,尽管存在于不同的文件中,它们仍处于相同的类定义中。

答案 3 :(得分:1)

C#是面向对象的,因此您需要引用其他类中的实例化窗口。如果您在每个方法中添加Form mainForm作为参数,并从表单类中传递this,则可以在外部方法中说mainForm.property

话虽这么说,你的问题让我觉得你会从面向对象设计的阅读和c#和winforms的应用程序架构中受益。

答案 4 :(得分:0)

在这种特殊情况下,utmToolBar几乎可以肯定是表单上的控件和表单类范围内的变量名。您可以将其迁移到另一个文件,但这可能不是破坏文件的正确方法。

每当您想要将类添加到C#项目时,您可以通过右键单击项目资源管理器中的项目并选择Add Class来实现。然后,您可以通过简单的剪切和粘贴将功能移动到该类中,替换为类引用。

这几乎触不到冰山一角,我建议你拿起任何基本的C#书并开始阅读。它比任何适合这个论坛的答案都要有意义。

答案 5 :(得分:0)

您可以将manageMainMenuButtons作为任何其他文件的静态方法并传递引用,或将其用作实用程序,甚至可以使用表单的部分定义创建其他文件。这是一个带有一点重构的静态方法的例子。我不确定utmToolBar是什么,所以我尝试了我的想法。

XXX.manageMainMenuButtons(utmToolBar, string.IsNullOrEmpty(rtbSharedSARP.Text));

public static void manageMainMenuButtons(Object /*whatever utmToolBar actually is*/ utmToolBar, bool disable)
{
    utmToolBar.Tools["First"].SharedProps.Enabled = disable;
    utmToolBar.Tools["Previous"].SharedProps.Enabled = disable;
    utmToolBar.Tools["Next"].SharedProps.Enabled = disable;
    utmToolBar.Tools["Last"].SharedProps.Enabled = disable;
}

答案 6 :(得分:0)

如果要从单独文件中的代码访问控件(例如表单上的按钮),只需确保该文件中的代码包含在与表单相同的命名空间中。

例如,在表单设计器文件中:

namespace MyWindowsApp{
    class MyForm{
        //various control declarations
    }  
}

然后,在外部文件中:

namespace MyWindowsApp{
    class MyClass{
        //Miscellaneous code
    }
}

MyClass将了解和访问MyForm及其所有公共属性。

希望这是一些帮助, 利