2009-02-26 132 views
0

我是C#的新手(來自Delphi),發現我的main.cs文件變得相當大。在Delphi中,我可以在.pas文件中創建類並從我的主應用程序文件中使用它。我只是添加使用(文件名)關鍵字。巨大的main.cs文件

我的問題是我該如何在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

您是否收到一條錯誤消息?它是否編譯,但沒有可見的效果?需要更多的信息。 – Larsenal 2009-02-26 19:31:03

回答

2

除非您的「主」表單上有數百個控件,否則聽起來好像您並未分離業務邏輯和表示邏輯。您應該設置單獨的類(分開的文件)來處理您的業務邏輯,並且每個表單都應該有自己的設計器和代碼。

1

C#是面向對象的,因此您需要對其他類中的實例化窗口進行引用。如果在每個方法中添加Form mainForm作爲參數,並且從表單類傳遞它this,那麼在外部方法中,您可以說mainForm.property

這就是說,你的問題使我認爲你會從一些閱讀面向對象設計,以及使用c#和winforms的應用程序體系結構中受益。

+0

要添加到最後一句中,將對主窗體的引用傳遞給這樣的方法並不是一個好主意。如果其他類需要對錶單進行一些訪問,則可以在子控件中創建可由主表單處理的事件。 – 2009-02-26 19:43:52

4

首先,你需要確保你在同一個命名空間是:

namespace mynamesspace { 

接下來,如果你的類成員私下宣稱,你需要指出你在那類工作:

public partial class frmMyForm : Form { 

請注意,這是擴展原來的類。如果你訪問的是公共成員(這是一個很好的方式去處理事情),你可能只需要指定命名空間。

+0

雖然這絕對是他的問題的答案... ick。我真的不喜歡分班。我猜想生成的代碼是可以的,但是否則他們已經得到了代碼味道。 – 2009-02-26 20:27:51

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因爲據編譯器來講,他們是在同一個類定義儘管在不同的文件。

0

在這種特殊情況下,utmToolBar幾乎可以肯定地控制你的表單和變量名稱在表單類的範圍內。你可能遷移到另一個文件,但這可能不是正確的方式來打破你的文件。您可以通過在項目資源管理器中右鍵單擊您的項目並選擇添加類來完成。如果您希望向C#項目添加類,則可以這樣做。然後,您可以使用簡單的剪切粘貼將功能移入該類,並由類引用代替。

這幾乎沒有觸及冰山一角,我建議你拿起任何基本的C#書籍,並開始閱讀。這將比任何適合這個論壇的答案都更有意義。

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; 
} 
0

如果你想訪問控制,如窗體上的一個按鈕,從一個代碼在一個單獨的文件,你只需要確保該文件中的代碼包含在同一個命名空間爲您的形成。

例如,在你的窗體設計文件:

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

然後,在外部文件:

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

MyClass的將有知識,並獲得MyForm的和所有的公共屬性。

希望這是一些幫助, 李