I want to use a 추적되도록 표시줄에는 form& 변경할 수 있는 # 39 의 불투명도의.
이건 내 코드:
decimal trans = trackBar1.Value / 5000;
this.Opacity = trans;
When I 애플리케이션 구축, 이를 통해 다음 오류:
>. '더블' 유형 '소수' 을 암시적으로 변환할 수 없습니다.
그런데 '와' 더블 '찾았다' 트랜스 사용하여 제어 doesn& # 39, 빗나갔다. 이 코드는 과거 프로젝트 (VB.NET) 에서 협력했습니다 좋아요.
double trans = (double) trackBar1.Value / 5000.0;
'' ('과' 5000d) 는 충분하나니 5000.0 상수입니다 식별하면 있다.
double trans = trackBar1.Value / 5000.0;
double trans = trackBar1.Value / 5000d;
때문에 모든 방송, c # 의 코드에 협력했습니다 벌금 (VB.NET) 가 동시에 암시적입니다 및 명시성 암시적으로 모두 가지고 있는 것으로 나타났다.
C # 에서 더블 는 십진수 변환 명시성 tpc. 패배하셨습니다 설치한다. 예를 들어, t be 정확하게 표현할 수 있지만, 1.1 can& # 39 로 연산뿐 소수로 (http://otl. " 부동 소수점 숫자 - 당신이 생각하는 것보다 더 많은 부정확한 ". 선택한 이유에 대해).
Vb 변환) 에 의해 컴파일러와의 당신꺼에요 추가되었다.
decimal trans = trackBar1.Value / 5000m;
this.Opacity = (double) trans;
That ' (실수)' 에 명시된 명시적으로 수 있지만, C # # 39, & # 39 에 의해 수 어떤 VB& 더 forgiving& # 39. 컴파일러.
왜 의해 분할하는 5000δ? 그냥 # 39 의 최소값과 최대값보다 TrackBar& 설정 후 100 에 의해 값이 100 0-사이의 나누기 불투명도입니다 (%) 입니다. 예 인해 최소 20 양식이 완전히 보이지 않게 되었다.
private void Form1_Load(object sender, System.EventArgs e)
{
TrackBar1.Minimum = 20;
TrackBar1.Maximum = 100;
TrackBar1.LargeChange = 10;
TrackBar1.SmallChange = 1;
TrackBar1.TickFrequency = 5;
}
private void TrackBar1_Scroll(object sender, System.EventArgs e)
{
this.Opacity = TrackBar1.Value / 100;
}
두 가지 문제가 있습니다. 첫째, '아닌' 불투명도의 소수점 값을 연산뿐 필요합니다. 컴파일러는 간의 변환을 알리는 것은 그곳에 있는 동안 는 십진수 변환 및 연산뿐 위해서 필요한 것을 직접 지정할 수 있는 것이다. 두 번째는 'that' 은 정수 값 및 나누기 트레이크바리발루 충족되었으며 int 가 어떤 유형의 변수 int 아무리 너회가 할당하십시오 int 발생합니다. 이 경우 문제가 발생할 수 없기 때문에 암시적입니다 int 의 소수점 또는 더블 캐스팅 작업을 할 때 precisiontm 손실됩니다 출연진 - - 그래서 컴파일러와의 doesn& 않지만 값이 항상 0 # 39, 불평, t, 아마도, 이후 '항상' 트레이크바리발루 확보하십시오 미만임 5000δ. 이 솔루션은 변경하십시오 연산뿐 사용하도록 코드를 통해 부동 소수점 연산을 할 수 있도록 (넷윈을 유형을 불투명도의) 와 명시적으로 상수입니다 더블 캐스팅 '는 산술 - 또는 - 어떤 효과를 낳을 것이라고 프로모션하면 트레이크바리발루 -또는 같은 일을 할 수 있는' 가 두 번 모두. 아, 진실이며당신이 don& # 39, 다른 곳에서 사용할 경우를 제외하고 중간 가변으로 필요한 건 아니다. 내 생각엔 컴파일러는 다시그것들을 최적화합니다 거두어 어쨌든.
trackBar.Opacity = (double)trackBar.Value / 5000.0;
제 생각에는, 것은 바람직한 것으로 명시성 수 있다. 이로 인하여 결국 이를 읽을 수 있는 코드를 프로그래머가 선명도를 높이기, 에이즈 너회의 명예직원.
외에 추가 '.0' (또는 대신에) 수 () ',' 데키말스토둘블 사용할 수 있습니다.
몇 가지 예를 들면 다음과 같습니다.
// Example 1
double transperancy = trackBar1.Value/5000;
this.Opacity = decimal.ToDouble(transperancy);
// Example 2 - with inline temp
this.Opacity = decimal.ToDouble(trackBar1.Value/5000);
불투명도의 이 속성은 이중 유형:
double trans = trackBar1.Value / 5000.0;
this.Opacity = trans;
또는 단순히:
this.Opacity = trackBar1.Value / 5000.0;
또는:
this.Opacity = trackBar1.Value / 5000d;
지금 사용하고 있는 '디이브이 5000.0' (또는 '5000d') 때문에 강제로 연산뿐 부 'trackBar1.Value' 은 정수 및 정수 사단, 그 결과 수행할 것이라고 약간만이라도 정수.
윈포름스 사용하고 있다고 가정하고, ['포르마리오파시'] (http://msdn.microsoft.com/en-us/library/system.windows.forms.form.opacity.aspx) 형식은 '더블' 도왔으매 콩지름에:
double trans = trackBar1.Value / 5000.0;
this.Opacity = trans;
this.Opacity = trackBar1.Value / 5000.0;
double trans = trackbar1.Value / 5000;
'해석' 이 있는 데다 trackbar1.Value 정수 값을 정수로 5000δ '도' 네 '트랜스' 파르타잔 항상 영. 부동 소수점 값을 숫자 '.0' 하는 의해 명시적으로 추가하여 컴파일러 및 수행 과정에서 두 번 해석할 수 있게 된 것이다.