패널이있는 검색 화면을 포함하는 .net 응용 프로그램이 있습니다. 세 개의 텍스트 상자가 각각 문자 길이가 다양한입니다. 내가하고 싶은 무엇여러 텍스트 상자에 붙여 넣기
는 캡처 때 이 첫 번째 상자에서를 호출하여 세 개의 상자에 내 클립 보드를 붙여 붙여 넣기 명령.
이 기능은 직렬 키 및 전화 번호에 대한 입력을 허용하는 많은 최신 응용 프로그램과 유사합니다.
패널이있는 검색 화면을 포함하는 .net 응용 프로그램이 있습니다. 세 개의 텍스트 상자가 각각 문자 길이가 다양한입니다. 내가하고 싶은 무엇여러 텍스트 상자에 붙여 넣기
는 캡처 때 이 첫 번째 상자에서를 호출하여 세 개의 상자에 내 클립 보드를 붙여 붙여 넣기 명령.
이 기능은 직렬 키 및 전화 번호에 대한 입력을 허용하는 많은 최신 응용 프로그램과 유사합니다.
내가 알 수있는 한, WM_PASTE 이벤트를 캡처하는 것보다 더 현명한 방법이 없습니다.
는 TexBox에서 클래스를 파생하고이 방법을 구현 : 다음 양식에 그 사용자 지정 컨트롤의 세 가지를 넣어using System.Windows.Forms;
using System.ComponentModel;
class TextBoxWithOnPaste : TextBox
{
public delegate void PastedEventHandler();
[Category("Action")]
[Description("Fires when text from the clipboard is pasted.")]
public event PastedEventHandler OnPaste;
protected override void WndProc(ref Message m)
{
if (m.Msg == 0x302 && OnPaste != null) // process WM_PASTE only if the event has been subscribed to
{
OnPaste();
}
else
{
base.WndProc(ref m);
}
}
}
을,이 경우, 동일한 방법으로 세 가지 텍스트 상자에 OnPaste
이벤트를 할당 I 그것은 textPasted()
라고 :
private void textPasted()
{
String input = Clipboard.GetText();
int l1 = textBoxWithOnPaste1.MaxLength;
int l2 = textBoxWithOnPaste2.MaxLength;
int l3 = textBoxWithOnPaste3.MaxLength;
try
{
textBoxWithOnPaste1.Text = input.Substring(0, l1);
textBoxWithOnPaste2.Text = input.Substring(l1, l2);
textBoxWithOnPaste3.Text = input.Substring(l2, l3);
}
catch (Exception)
{ }
}
. 위의 코드는 완벽하지 않습니다. 세 개의 텍스트 상자에 수동으로 데이터를 입력 한 후 세 번째 텍스트 상자에 하나의 공백을 붙여 넣으십시오. 예를 들어 이벤트의 매개 변수를 변경하여 텍스트를 붙여 넣은 텍스트 상자를 알면 좋을 것입니다. 그 방법은 보낸 사람을 보내는)하지만 기본적으로 작동하고 나머지는 알아낼 수있을 것 같아요 (Tag
속성을 사용하여 텍스트 상자를 식별 할 수 있습니다).
답변 해 주셔서 감사합니다. 질문을 따르는 것이 왜 유일한 합리적인 대답이라고 말합니까? Ctrl + V, 컨텍스트 붙여 넣기 및 편집 -> 붙여 넣기를 캡처합니까? 많은 방법이있는 것처럼 보입니다. 심지어 제임스 힐 (James Hill)이 제안한 제안조차도 덜 효과적 인 것처럼 보입니다. – amadib
@amadib Cltr + V를 캡쳐하는 동안 사용자가 상황에 맞는 메뉴에서 붙여 넣기를 선택하면 알림을받지 못하기 때문에 마우스 클릭 만 캡처하면 유지 보수 지옥이 될 수 있습니다. 또한 JamesHill의 코드는 양식에 배치 할 수 없습니다. 양식은 WM_PASTE 메시지를 처리하지 않습니다. [컨트롤 및 콤보 상자 편집] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms649028 (v = vs.85) .aspx). – CodeCaster
상자의 글자 수 한도를 높이고 TextChanged
에 등록하고 붙여 넣은 (또는 입력 한) 텍스트가 더 길게 이동하여 다음 TextBox
으로 이동하면됩니다.
textchanged에 텍스트를 붙여 넣었는지 여부를 아는 방법? –
James 또는 CodeCasters가 대답을 참조하십시오 ... – ChrFin
키 다운 이벤트를 바인딩 할 수 있으며 Ctrl + V
또는 Ctrl + v
을 얻으면 clipboad의 값으로 세 텍스트 상자의 값을 업데이트합니다. 첫 번째 텍스트 상자에서 이벤트를 TextChanged
이벤트에서 수행 할 수 있습니다.
상황에 맞는 메뉴에서 붙여 넣기를 선택하는 방법은 무엇입니까? – CodeCaster
그런 경우 컨텍스트 메뉴를 사용하는 경우 Text_Change 이벤트가 발생합니다. –
캡처 붙여 넣기 이벤트 :
다음protected override void WndProc(ref Message m) {
// Did paste occur?
if (m.Msg == 0x302) {
//Paste occurred, add your logic here
}
base.WndProc(ref m);
}
에서, Clipboard object에 액세스하여 원하는 텍스트를 얻을 수 있습니다.
캡쳐 된 텍스트 String txt = Clipboard.GetText();
를 얻고 다른 텍스트 상자의 "텍스트"속성
의 사용 가능한 복제 http://stackoverflow.com/questions/1156975/copy-paste-event-에 배치 할 수 있습니다 listener-in-c-sharp – ean5533
붙여 넣기 명령이 호출 될 때 캡처하고 싶습니까? 복사 명령으로 캡처하지 않습니까? – Liron