2010-05-17 2 views
2

실버 라이트 3을 사용하고 있으며 코드 뒤에 작성된 텍스트 상자에서 마우스 클릭으로 연결된 핸들러와 이벤트를 만들고 싶습니다. 누군가가 올바른 방향으로 나를 가리킬 수 있습니까?코드에서 작성된 텍스트 상자에 클릭 이벤트를 추가하는 방법

텍스트 상자를 클릭하면 몇 가지 사항이 실행되도록 설정해야합니다.

vb.net에 예제가 있으면 더 좋을 것입니다. thanks shannon

+0

현재 어떤 코드가 있습니까? – ChrisF

+0

응답 패턴을 찾으십시오. –

답변

1

다음 코드는 코드 숨김으로 만든 텍스트 상자에서 마우스 클릭을 시뮬레이션합니다.

TextBox textBox1; 
    bool mouseDown; 

    public SilverlightControl1() 
    { 
     InitializeComponent(); 

     textBox1 = new TextBox(); 
     textBox1.MouseLeftButtonDown += textBox1_MouseLeftButtonDown; 
     textBox1.MouseLeftButtonUp += textBox1_MouseLeftButtonUp; 
     mouseDown = false; 
    } 

    void textBox1_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
    { 
     if (mouseDown) 
     { 
      // Do the mouse click here 
     } 
     mouseDown = false; 
    } 

    void textBox1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
    { 
     mouseDown = true; 
    } 

당신은 아마도 아래로 마우스와 마우스까지 사이의 시간 미만 500 밀리 초 (말)와 마우스가 픽셀 또는 둘 사이보다 더 이동되지 않았 음을 것을 첨가 검사를 추가 할 수 있습니다 그 사건들.

+0

답장을 보내 주셔서 감사합니다. 위 질문에 답해 드리겠습니다. mouseleftbuttongup/down에 대한 이벤트 처리기를 추가하는 위치가 표시되지 않습니다. 코드 위에 보이는 것에서는 이벤트를 처리 할 수 ​​있지만 화재는 발생하지 않습니다. 아마 나를 도울 수 계속 ... 감사합니다 – jvcoach23

+0

@ jvcoach23 - 나는 스크롤없이 적합하게 코드를 좁게 유지하기 위해'new MouseButtonEventHandler'를 빠뜨린 짧은 형식을 사용했습니다. 코드를 게시 할 때 코드를 테스트하지 않았 음을 인정해야합니다.하지만 지금은 있습니다. 작동하지만 @ AnthonyWJones의 대답에 따라 국경을 클릭 할 때만 작동합니다. – ChrisF

+0

ChrisF .. 더 많은 질문 ... 첫 번째 .. 텍스트 상자가 만들어져 테두리에 자식으로 배치 된 경우 텍스트 상자를 클릭하면 .. 테두리에서 클릭 한 것처럼 선택됩니까? 는 내가 가지고있는 코드는이 TextBox1에 = 새합니다 MyTextBox() TextBox1.AcceptsReturn = 진정한 TextBox1.TextWrapping = TextWrapping.Wrap TextBox1.VerticalScrollBarVisibility = ScrollBarVisibility.Hidden Me.brTyping.Child = TextBox1에 과정과 같이 보입니다 나는 아직도 당신이 좋은 질문을하기 위해 준 작품을 변환하는 C# 코드를 얻지 못했습니다. 그러나 한 번에 한 가지만 생각해 봅니다. – jvcoach23

0

난 그냥 .. ChrisF 응답에 무언가를 추가하고, 당신이 원하는 그게 무슨 있으면 알려 드릴 것입니다

TextBox textBox1; 

    public SilverlightControl1() 
    { 
     InitializeComponent(); 

     textBox1 = new TextBox(); 
     textBox1.MouseLeftButtonDown += new MouseButtonEventHandler(textBox1_MouseLeftButtonDown); 
    } 

    void textBox1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
    { 
     InvokeEvent(sender, null); 
    } 


     public event EventHandler FireEvent; 

     public void InvokeEvent(object sender, EventArgs e) 
     { 
      EventHandler handler = FireEvent; 
      if (handler != null) handler(sender, e); 
     } 

///// 여기의 vb.net의 코드에 아래의 코드를보십시오 : 국경을 클릭하면

Public Partial Class SilverlightControl1 
    Inherits UserControl 
    Private textBox1 As TextBox 

    Public Sub New() 
     InitializeComponent() 

     textBox1 = New TextBox() 
     AddHandler textBox1.MouseLeftButtonDown, AddressOf textBox1_MouseLeftButtonDown 
    End Sub 

    Private Sub textBox1_MouseLeftButtonDown(ByVal sender As Object, ByVal e As MouseButtonEventArgs) 
     InvokeEvent(sender, Nothing) 
    End Sub 


    Public Event FireEvent As EventHandler 

    Public Sub InvokeEvent(ByVal sender As Object, ByVal e As EventArgs) 
     Dim handler As EventHandler = FireEvent 
     RaiseEvent handler(sender, e) 
    End Sub 
End Class 
+0

숟가락으로 먹을 필요가있어서 미안합니다 ... 당신이 제공 한 것을 변환했습니다. vb.net. InvokeEvent에서 Public Event FireEvent (보낸 사람 객체, e As System.EventArgs)가 이벤트이며 직접 호출 할 수 없다는 오류가 발생합니다. 'RaiseEvent'문을 사용하여 이벤트를 발생시킵니다. 그래서 나는 EventHandler와 같은 Public Event FireEvent에 대해 올바르게하지 않았다. 감사합니다 – jvcoach23

+0

안녕하세요 jvcoach23, 그냥 업데이트 된 답변을 확인 .. – Malcolm

1

UIElement에서 상속 덕분에 마우스 이벤트를 가진 반면 TextBoxMouseDown 이벤트가 발생합니다. TextBox의 텍스트 편집 영역을 클릭하면 마우스 이벤트가 발생하지 않습니다.

가장 가까운 값은 GotFocus 이벤트입니다.

관련 문제