2012-03-13 3 views
0

저는 일반적으로 WinForms와 C#에 익숙하지 않지만, 내가 가지고있는 문제는 너무 기본적인 것입니다. 내가 가진 것은 3-D 공간의 벡터를 표시 할 수 있도록 3 개의 텍스트 상자를 포함하는 작은 UserControl입니다. 컨트롤에는 소비자가 컨트롤에 의해 표시되는 Vector를 설정할 수있는 속성이 있습니다.TextBox가 속성 변경시 업데이트되지 않습니다.

/// <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); 
     } 
    } 

디버깅 목적으로 텍스트 속성의 실제 할당에서 변환을 분리했음을 알 수 있습니다. 어쨌든, val에는 정확히 무엇이 있어야합니다. 디버거에서 txtX를 검사하면 제대로 설정되었음을 알 수 있습니다. 그러나이 값은 화면에서 업데이트되지 않습니다.

위치, 크기 및 이름 설정 이외의 TextBox를 초기화하는 데 필요한 작업은 거의 수행되지 않습니다. 이것은 모두 Visual Studio 디자이너에서 수행되었습니다. 누군가 내가 잘못하고있는 것을 지적 할 수 있습니까?

EDIT : 호출 코드 추가.

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

같은

뭔가. 텍스트 상자가 다른 곳에서 업데이트되지 않았습니까? – Steve

+0

아니요, Text 속성을 업데이트하는 유일한 방법은 내가 본 속성을 사용하는 것입니다. 나는 잘못된 입력이 진행되지 않았는지 확인하기 위해 중단 점을 설정했으며 이것이 잘못된 것처럼 보입니다. – ctartamella

+0

아마도 호출 코드의 일부가 업데이트를 방해합니다. 호출 메소드를 보여줄 수 있습니까? – Steve

답변

0

OpenTK의 + - 연산자 오버로딩이 Vector 속성을 설정했는지 알 수 없습니다. 그러나 우리는 쉽게 찾을 수있었습니다. 호출 코드를 실행하는 동안 setter에 중단 점을 설정하고 디버그가 중단 점에서 중지되는지 확인합니다. 그렇지 않은 경우 호출 코드의 어딘가에서 Vector 속성을 설정해야하므로 setter가 호출됩니다. 아무 문제가없는 코드에서

Vector3 lookAt = Center - Eye; 
lookAt.Vector = Center - Eye; 
관련 문제