2014-09-16 1 views
1

사용자 입력 또는 프로그래밍 방식으로 값을 변경하기 전에 텍스트 상자에 값을 가져 오는 데 문제가 있습니다.변경 전 값 가져 오기

나는이 이벤트가 _TextChanged 이벤트와 관련이 있다는 것을 알았지 만 일단 이것이 실행되면 변경하기 전에 이미 있던 이전 값을 어떻게 얻습니까? 예 : 숫자 3은 텍스트 필드에 있습니다. 번호가 4으로 변경됩니다. 3을 저장하려면 어떻게해야합니까?

미리 감사드립니다.

답변

2

TextBox에는 아무 것도 저장하지 마십시오. value을 표시/편집하는 경우에만 사용하십시오.

private string value; 

private void textBox1_TextChanged(object sender, EventArgs e) 
{ 
    // at this moment value is still old 
    var oldValue = value; 
    value = ((TextBox)sender).Text; // text1.Text 

    // here you have oldValue and new value 
} 

어쩌면 당신은 각 TextChangedvalue를 업데이트하지 않습니다. 폼이 닫히거나 버튼이 눌릴 때 등등을 할 수 있습니다.

아이디어가 분명해야합니다. 이전 값이 필요하면 변수로 (Tag)와 같이 어딘가에 저장하십시오. 응용 프로그램 설정, 내보내기 등).

또한 사용자가 어떻게 작동하는지주의하십시오. TextBox3이 포함 된 경우 사용자는 먼저 4을 누른 다음 3 만 삭제할 수 있습니다. 또는 실수로 54을 누를 수도 있습니다. 다음 중 어느 것입니까 값 : 3, 34, 54? 의 이전 값인의 개념을 갖는 데서 발생할 수있는 문제점을 설명하기 만하면됩니다. 어쩌면 당신은 그것을 원하지 않을 것이고 당신이 낡은 가치를 얻음으로써 해결하고자하는 것에 더 좋은 해결책이 될 것입니다.

+0

최고의 답변 지금까지 .. 내가 필요한 이유는 단추를 한 위치에서 다른 위치로 옮기고 단추가 이미있는 경우 바꾸려고하기 때문입니다. 그래서 나는 새로운 위치뿐만 아니라 이전 위치를 알아야합니다. 이것에 큰 어려움을 겪고 또 다른 질문을 게시 할 수 있습니다. 그러나 이것은 충분히 가까운 질문에 대한 답변입니다. 내가 끝낸 것은 이전 값을 저장하기 위해 '_Enter' 이벤트를 사용하는 것이었지만) – ravenx30

+0

컨트롤이 포커스를 얻었을 때 이전 값을 저장하는 것이 좋습니다. 원한다면'_Leave'와'_KeyDown' ('Enter' 키를 누른 상태에서)을 사용하여 사용자 입력을 확인하는 * 방법이 있습니다. 그렇지 않은 경우 사용자가 '100'을 입력하면 '_TextChanged'를 사용하여 '1', '10'그리고 마지막으로 '100'위치에서 세 가지 작업을 수행합니다. 나는 디자이너의 속성 창은 그 개념을 사용하고 있다고 생각한다. ('Enter'또는 포커스 손실에 의한 입력을 확인하기 위해). – Sinatr

+0

내 다음 질문 (훨씬 열심히)을 보면이 가치가 필요한 이유를 알 수 있습니다. – ravenx30

2

텍스트 변경 이벤트 중에 변수의 텍스트 상자에 현재 값을 저장하지 않는 이유는 무엇입니까? 이렇게하면 이벤트가 다시 시작될 때 "이전"값이됩니다.

+0

이전 값이 더 이상 이전 값이 아니기 때문에 변경되었습니다. – ravenx30

+0

텍스트가 변경되는 동안 텍스트 상자에 현재 텍스트가 저장됩니다. 그것은 다음 번에 발생했습니다. 변수의 값은 이전 값입니다. –

+0

다음 번에 실행하면 이전 값을 새 값으로 덮어 씁니다. 예를 들어 이전 값인 변수에 3을 저장하지만 텍스트가 4로 변경되면 변수 값이 4로 변경됩니다. – ravenx30

0

일부 변수에 텍스트 상자의 값을 저장할 수 있습니다. 예 : 문자열 currentVal = txtName.Text;

문자열 currentVal은 text_changed 이벤트에서 이전 값으로 사용할 수 있습니다.

+0

은 이전 값이 될 수 없습니다. 3 (이전 값)이 4로 변경 되 자마자 저장된 3이 겹쳐 쓰여집니다. 따라서 여전히 이전 값에 액세스 할 수 없습니다. – ravenx30

+0

이는 텍스트 상자의 값을 변수에 할당하는 위치에 따라 다릅니다. text changed 이벤트의 변수에 textbox의 값을 할당해서는 안됩니다. – mrsrizan

+0

다른 어떤 방법으로 값을 저장해야합니까? – ravenx30

1

타이머를 만들려고 했습니까? 틱마다 입력을 문자열에 씁니다. 텍스트 상자의 입력 내용이 문자열의 내용과 같지 않으면 원하는 작업을 트리거합니다. 그렇게하면 이전 입력으로 무효화 할 수 있습니다.

private string oldInput; 

.... 

void TimerTick(Object source, ElapsedEventArgs e) 
{ 
    if (oldInput != MyTextBox.Text) MyVoid(oldInput); 
    oldInput = MyTextBox.Text; 
}