我的程序是CAD类型软件,我在其中使用OpenTK进行图形处理。该计划按预期运作 - 但有一个例外。我想让用户改变以背景颜色开始渲染的东西的颜色。为此,我创建了第二个用户窗体(BTW,这是一个windows.forms程序),允许用户通过RGB组件指定颜色。我在userform中有一个返回Color4的返回函数。从我可以说的一切都按预期工作 - 很好......
为了简化我在下面添加了一些代码 - 这不起作用。 _newColor会捕获正确的数据,但是,当它传递给ClearColor时,Invalidated我的Form1客户端窗口会显示一个大的红色X.
private void button2_Click(object sender, EventArgs e)
{
Form2 f2tmp = new Form2();
f2tmp.ShowDialog();
Color4 _newColor = f2tmp.getColor();
f2tmp.Dispose();
GL.ClearColor(_newColor);
glControl1.Invalidate();
}
问题与第二个用户窗体(Form2)有关。如果我将代码更改为此,则可以正常工作:
private void button2_Click(object sender, EventArgs e)
{
Form2 f2tmp = new Form2();
//f2tmp.ShowDialog();
//Color4 _newColor = f2tmp.getColor();
//f2tmp.Dispose();
Color4 _newColor = new Color4(1f, 0f, 1f, 1f);
GL.ClearColor(_newColor);
glControl1.Invalidate();
}
因此,将其缩小到与实际显示Form2有关的内容。是什么给了什么?
答案 0 :(得分:1)
这解决了这个问题:
private void button2_Click(object sender, EventArgs e)
{
Form2 f2tmp = new Form2();
f2tmp.ShowDialog();
Color4 _newColor = f2tmp.getColor();
f2tmp.Dispose();
// Add this line
glControl1.MakeCurrent();
// ta-DA !!! works.
GL.ClearColor(_newColor);
glControl1.Invalidate();
}