이것은 다른 코드가 아닌 일부 코드에서 작동하는 가장 이상한 것입니다. 다음 코드는 TextBox를 하위 클래스로 사용하는 클래스입니다 (참고 : 중요한지는 모르지만 개인 필드 _realText에서 설정/가져 오기 위해 Text 속성을 하위 클래스로 지정 함)TextBox.Text 속성을 설정하면 설정되지 않았습니까?
아래 코드에서 첫 번째 기준은 다음과 같습니다. 텍스트 = this.RealText는 정상적으로 작동합니다. 우리는 또한 MaskData() 메서드 내에서 그것을 설정하고 작동합니다! !!!! 그렇다면 세계에서 if (! field.isSecure) 섹션에서 작동하지 않는 이유는 무엇입니까? (무슨 뜻인지 로그를보세요). base.Text = temp 이후에 Invalidate(), Update()를 추가하려고 시도했지만 도움이되지 않았습니다.
코드 :
private void SetupTextInBox()
{
if (isInManualMode)
{
this.ReadOnly = false;
base.Text = this.RealText;
}
else
{
this.ReadOnly = true;
if (!field.IsSecure)
{
string temp = this.RealText;
log.Info("This field is not secure so show it. field=" + field.Variable + " real='" + temp+"'");
base.Text = temp;
log.Info("text value='" + base.Text+"'");
return;
}
else
{
MaskData();
}
}
}
로그
2012-06-30 07:15:51,468 [1] INFO AlpineAccess.Plugins.SecureTalkPlugin.SecureTextControl (null) - This field is not secure so show it. field=1.acc real='2222'
2012-06-30 07:15:51,468 [1] INFO AlpineAccess.Plugins.SecureTalkPlugin.SecureTextControl (null) - text value=''
편집 :이 방법은 항상 동일한 스레드에서 호출합니다. 그것은 다른 곳에서 눌려진 전화기의 신호음을 알려주는 서버 알림에서 왔으며, 그 스레드는 BeginInvoke를 호출하여 GUI/컨트롤 스레드 또는 기타 등등에 넣습니다. 위의 방법에서 상류
코드는
public void AppendDTMFDigit(string digit)
{
log.Info("specified="+field.MaxSpecified+" someone appending dtmf digit on field=" + field.Variable+" fieldMax="+field.Max+" len="+RealText.Length);
if (field.MaxSpecified && this.RealText.Length >= field.Max)
return; //shortcut out since we can't exceed max digits
BeginInvoke(new MethodInvoker(delegate()
{
this.RealText = this.RealText + digit;
log.Info("new realtext=" + this.RealText);
SetupTextInBox();
}
));
}
더 많은 정보
: 나는 내 모든 클라이언트 코드를 변경하는 경우, 텍스트 속성을 사용을 중지하고 RealText 속성을 사용하고 Text 속성을 재정의 중지에 다음 작품 벌금. (당연히 지금은 컨트롤을 TextBox로 바꿀 수 없으며 RealText 속성을 참조하는 클라이언트 코드를 많이 변경하지 않고도 쉽게 되돌릴 수는 없지만 .... 그래도 그걸로 살아야 할 수도 있습니다. ... 이상한 버그의 일종처럼 보인다MORE INFO :... 그것으로 스테핑 디버거를 가지고 이것은 매우 이상한
이 매우 이상한 것들 그것은 게터에 단계
- , setter가 아닌가?
- TextBox의 Text 속성 대신 MY Text 속성을 사용합니다.
grrrrr, 왜 그게 ... 주요 버그처럼 들릴까요? 내 말은, base.Text는 수퍼 클래스의베이스를 참조해야합니다. 맞습니까? - 당신이 주석 않는 딘 힐러가 지금 Text 속성이 여기에 텍스트 method 속성 코드를 작동하지 않습니다이 사용자 제어를위한
public override string Text
{
get
{
return RealText;
}
set
{
if (value == null)
throw new ArgumentException("Not allowed to set RealText to null. Set to empty string instead");
RealText = value;
}
}
무엇 디버깅하게;의 일을 '임시'의 e 값? 이게 진짜 텍스트인가요? 그렇다면이 속성은 프라이빗 백킹 필드를 올바르게 읽는 것입니까? 후원 필드가 설정되어 있습니까? 코드를 밟았 니? – Charleh
죄송합니다. 제 기록에는 실제 기록 대신 임시 기록이 있어야하지만 기록에서 첫 번째 기록 진술에서 '2222'라는 임시 값을 볼 수 있습니다. –
디버깅을하셨습니까? 당신의 세터가 실행되고 있다고 확신합니다 - 당신이 그것에 브레이크 포인트를 붙일 수있는 기회? 설정기에 들어가기 만하면됩니다 (보통 이것은 자동 단계 설정으로 설정되어 있지만 디버거 설정에서 해제 할 수 있습니다). – Charleh