我一般都是WinForms和C#的新手,不过我遇到的问题是如此基本,甚至令我震惊。我有一个小的UserControl包含3个文本框,以便可以显示三维空间中的向量。该控件具有允许消费者设置控件显示的Vector的属性。
/// <summary>
/// Read/Write property to set the displayed vector.
/// </summary>
public Vector3 Vector
{
get { return m_vector; }
set
{
m_vector = value;
string val = Convert.ToString(m_vector.X);
txtX.Text = val;
txtY.Text = Convert.ToString(m_vector.Y);
txtZ.Text = Convert.ToString(m_vector.Z);
}
}
您会注意到我从实际分配text属性中拆分了转换以进行调试。在任何情况下,val都包含它应该包含的内容。检查调试器中的txtX表明它已正确设置。但是,该值永远不会在屏幕上更新。
除了设置位置,大小和名称之外,初始化TextBox的工作很少。这都是在Visual Studio设计器中完成的。谁能指出我可能做错了什么?
编辑:添加调用代码。
public override void LeftDrag(float deltaX, float deltaY)
{
float length = 2 * (Eye - Center).Length * (float)Math.Tan(FOVy / 2.0);
Vector3 lookAt = Center - Eye;
Vector3 dirY = Vector3.Cross(Up, lookAt);
dirY.Normalize();
Center += deltaY * length * Up;
Center += deltaX * length * Width / Height * dirY;
}
答案 0 :(得分:0)
我不知道它的+ - 运算符重载中的OpenTK是否设置了Vector属性。但是我们很容易找到。执行调用代码时,在setter上设置断点,并查看调试是否在断点处停止。如果不是那么你应该在你的调用代码中的某个地方设置Vector属性,这样就可以调用setter。
像
这样的东西Vector3 lookAt = Center - Eye;
lookAt.Vector = Center - Eye;