我是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;
}
}
不是最好的例子,但我希望有人可以帮助我。
答案 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及其所有公共属性。
希望这是一些帮助, 利