2014-05-01 172 views
0

我想添加一個圖形到主窗口。
但是當我試圖訪問該窗口小部件,它說:從另一個類的訪問窗口

錯誤CS0120:一個對象引用才能訪問非靜態成員 「MainWindow.win」

莫非

人解釋這意味着什麼以及如何解決這個問題?

這是代碼:

using Gtk; 
using System; 
using Cairo; 

public class MainWindow { 

    public Window win = new Window("Traffic Light Simulator 0.1"); 
    Fixed winFix = new Fixed(); 
    DrawingArea rightSeparator = new DrawingArea(); 


    MainWindow() { 
     win.SetSizeRequest(800, 600); 
     win.Resizable = false; 
     win.DeleteEvent += delegate { Application.Quit(); }; 
     win.SetPosition(WindowPosition.Center); 
     win.ModifyBg(StateType.Normal, new Gdk.Color(255, 255, 255)); 

     rightSeparator.SetSizeRequest(10, 600); 
     rightSeparator.ModifyBg(StateType.Normal, new Gdk.Color(200, 200, 200)); 

     winFix.Put(rightSeparator, 580, 0); 


     win.Add(winFix); 
     win.ShowAll(); 
    } 


    public static void Main() { 
     Application.Init(); 
     new MainWindow(); 
     Application.Run(); 
    } 

} 

public class Light { 
    DrawingArea darea = new DrawingArea(); 

    Light(int x, int y, int size) { 

     MainWindow.win.Add(darea); 

    } 
} 

回答

1

似乎有一個關於你想要做什麼誤解:

  • 你似乎想打電話Add()上的主窗口實例您應用程序
  • 您的代碼嘗試訪問主窗口

要解決這個問題,你需要保持一個參考到你的主窗口:

  • new MainWindow();應該MainWindow myMainWindow=new MainWindow();
  • Light(int x, int y, int size) { MainWindow.win.Add(darea); }應該Light(MainWindow theMainWindow, int x, int y, int size) { theMainWindow.win.Add(darea); }
  • 最後你需要的碎片粘合在一起,所以保存參考的變量被傳入Light()
+0

Thx它現在運行。 'new MainWindow()'和'MainWindow myMainWindow = new MainWindow()'有什麼區別? @Eugen Rieck – Charlie

+0

第一個只創建一個新窗口,但沒有保留對它的引用......第二個保存引用,所以你可以按照描述使用它。 –