2014-10-02 101 views
0

在C#中,我有一類這樣的方法:如何從另一個類在c#中調用方法?

namespace ControlCenter 
{ 
    public partial class Canvas 
    { 
     ... 
     public void display(string itemID) 
     { 
      ... // here assign some properties to the item 
      this.Children.Add(item); 
     } 
    } 
} 

此功能允許我一個項目成功添加到我的畫布。現在我想調用這個方法在另一個不同的階級是這樣的:

namespace ControlCenter 
{ 
    public class addLayer 
    { 
     private ControlCenter.Canvas myCanvas = new ControlCenter.Canvas(); 

     public void add() 
     { 
      myCanvas.display("1234"); 
     } 
    } 
} 

但這不能將任何項目添加到我的畫布。通過調試,我懷疑這個問題應該是在這一行:

this.Children.Add(item); 

當從addLayer類調​​用display方法,this沒有指向活動畫布我猜。但是即使在大規模的互聯網搜索之後,我也找不到任任何幫助?

+0

項目和項目Id都是不同? – Neel 2014-10-02 06:47:10

+0

你如何調用'addLayer'實例? (順便說一句,這聽起來更像是一個方法名稱而不是類名稱) – Sayse 2014-10-02 06:49:28

+0

什麼是孩子? – Neel 2014-10-02 06:51:10

回答

1

在顯示的例子中,我猜canvas是一個UserControl,你的目標是當你調用add()方法時,你添加一個項目到那個usercontrol。但是在addlayer類的當前示例中,您已創建了一個全新的畫布,您已添加了一個項目。該方法確實有效,只是您將孩子添加到未顯示的全新canvas。解決方法是將顯示的畫布實例傳遞給addlayer類。在InitialiseComponent()方法之後。

是這樣的...

namespace ControlCenter 
{ 
    public partial class Canvas : UserControl 
    { 

     public Canvas 
     { 
      InitialiseComponent(); 
      addLayer.myCanvas = this; 

     } 

     public void display(string itemID) 
     { 
      ... // here assign some properties to the item 
      this.Children.Add(item); 
     } 
    } 
} 


namespace ControlCenter 
{ 
    public static class addLayer 
    { 
     private static ControlCenter.Canvas myCanvas; 

     public static void add() 
     { 
      myCanvas.display("1234"); 
     } 
    } 
} 

現在當你調用addLayer.add(),您將項目添加到所顯示的畫布

+0

謝謝你的回答。現在又出現了另一個問題:它找不到「InitializeComponent()」方法。我的代碼是在「.cs」文件中,網上的各種答案都表示應該有一個「.xaml」文件,我應該正確地將「x:Class」更改爲名稱空間。但是我沒有在這裏給這個類「.xaml」文件。你有什麼主意嗎? – 2014-10-02 07:54:24

+0

我會說讓你的畫布類繼承UserControl。雖然我會說已經有一個'Canvas'類[這裏](http://msdn.microsoft.com/en-us/library/system.windows.controls.canvas(v = vs.110).aspx)我想這取決於你想要做什麼 – user1 2014-10-02 08:10:59

相關問題