从另一个类访问窗口
本文关键字:窗口 访问 另一个 | 更新日期: 2023-09-27 18:01:10
我想在主窗口中添加一个图形
但当我试图访问窗口小部件时,它会说:
错误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);
}
}
似乎对您想要做的事情有一种误解:
- 您似乎想在应用程序的MainWindow实例上调用
Add()
- 您的代码尝试访问MainWindow类
要解决此问题,您需要保留对主窗口的引用:
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()
中