2017-05-13 5 views
-1

서식있는 텍스트 상자 (항목)에 확대/축소 기능을 구현하려고합니다. 확대/축소를 '1'씩 증가 시키려고 시도했지만 크기가 너무 커서 텍스트가 3 ~ 4 번의 클릭으로 크게 커집니다. 지금은 줌의 정밀도를 높이기 위해 '0.5'에 대한 증분 값을 설정하기 위해 노력하고있어하지만 다음과 같은 오류 낸다 :리치 텍스트 상자의 ZoomFactor를 십진수로 늘림

CS0266 - Cannot implicitly convert type 'double' to 'float'. An explicit conversion exists (are you missing a cast?)

내 코드 :

private void ts_ZoomIn_Click(object sender, EventArgs e) 
    { 
     if (entry.ZoomFactor < 64.5) 
     { 
      entry.ZoomFactor = entry.ZoomFactor + 0.5; 
     } 
    } 

    private void ts_ZoomOut_Click(object sender, EventArgs e) 
    { 
     if (entry.ZoomFactor > 0.515625) 
     { 
      entry.ZoomFactor = entry.ZoomFactor + -0.5; 
     } 
    } 

나는 확신이있다을 이 간단한 수정하지만 지난 30 분 동안이 오류로 난처한 및 모든 대답을 찾을 수 없습니다.

+2

'0.5'대신 '0.5f'를 사용하는 식입니다. –

답변

2

분명히 entry.ZoomFactor는 float이고 0.5는 double이므로 메시지가 나타납니다.

암시 적 캐스트가 아니지만 명시 적 캐스트가 있다는 경고 메시지가 표시됩니다.

이것이 의미하는 바는 컴파일러가 0.5를 부동/자동으로 float로 변환하지 않는다는 것입니다. 그러나이 같은 float로 0.5 전송할 수 있습니다 : 현실에서

entry.ZoomFactor = entry.ZoomFactor + (float) 0.5; 

, 이중 및 플로트가 함께 작동, 플로트 자동하지만 그 반대의 경우도 마찬가지, 이중으로 변환됩니다. 실제로 엔트리 결과 .ZoomFactor + 0.5는 두 배입니다. 그래서, 다음의 캐스트는 아마 작동합니다 :

entry.ZoomFactor = (float)(entry.ZoomFactor+ 0.5); 

더 나은 아직, 당신은 보여 덧글 중 하나로 번지는 현상을 방지 할 수 있습니다 그냥 0.5F를 호출하여 0.5 자연스럽게 단일 정밀도 부동 소수점을합니다.

마지막으로 entry.ZoomFactor가 유효한 l- 값이므로 + = 연산자를 사용할 수 있습니다.

entry.ZoomFactor += 0.5f;