2010-05-17 7 views
2

J'utilise silverlight 3 et je voudrais créer un gestionnaire et un événement câblé jusqu'à un clic de souris dans une zone de texte créée dans le code derrière. Quelqu'un peut me diriger dans la bonne direction.Comment ajouter un événement click à une zone de texte créée avec le code

Je dois faire en sorte que certaines choses se déclenchent lorsque l'on clique sur cette zone de texte.

si vous avez un exemple dans vb.net ce serait encore mieux. merci shannon

+0

Quel code avez-vous actuellement? – ChrisF

+0

chercher le modèle de commande –

Répondre

1

Le code suivant va simuler un clic de souris dans une zone de texte créée dans le code derrière.

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; 
    } 

Vous voulez probablement ajouter un contrôle d'addition que le temps entre la souris vers le bas et la souris est inférieure à 500 millisecondes (par exemple) et que la souris n'a pas bougé plus d'un pixel ou deux entre Les événements.

+0

merci pour la réponse .. question ci-dessus ce que vous avez posté ci-dessus .. je ne vois pas où vous ajoutez les gestionnaires d'événements pour le mouseleftbuttongup/bas. de ce à quoi il ressemble au-dessus du code est là pour gérer un événement .. mais pas en tirer un. peut-être peut continuer à m'aider ... merci – jvcoach23

+0

@ jvcoach23 - J'ai utilisé le formulaire court - manquant le 'new MouseButtonEventHandler' pour maintenir le code assez étroit pour s'adapter sans défilement. Je dois admettre que je n'ai pas testé le code quand je l'ai posté - mais j'ai maintenant. Cela fonctionne, mais seulement lorsque vous cliquez sur la bordure selon la réponse de @ AnthonyWJones. – ChrisF

+0

ChrisF .. plus de questions ... d'abord ... si la zone de texte est créée et mise en tant qu'enfant à une bordure, lorsque vous cliquez dans la zone de texte ... est-il ramassé comme vous avez cliqué dans la bordure. Le code que j'ai ressemble à quelque chose comme ça TextBox1 = New MyTextBox() TextBox1.AcceptsReturn = True TextBox1.TextWrapping = TextWrapping.Wrap TextBox1.VerticalScrollBarVisibility = ScrollBarVisibility.Hidden Me.brTyping.Child = TextBox1 cours Je n'ai toujours pas obtenu le code de conversion C# au travail que vous avez donné pour poser de bonnes questions .. mais 1 chose à la fois je suppose – jvcoach23

0

Je vais juste ajouter quelque chose à répondre ChrisF, et laissez-moi savoir si c'est ce que vous voulez ..

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); 
     } 

///// Voici son dans l'extrait de code vb.net s'il vous plaît essayez le code ci-dessous:

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

désolé pour le besoin d'être nourri à la cuillère ... j'ai converti ce que vous avez fourni vb.net. J'obtiens une erreur dans le InvokeEvent disant que l'événement public FireEvent (expéditeur en tant qu'objet, et en tant que System.EventArgs) est un événement, et ne peut pas être appelé directement. Utilisez une instruction "RaiseEvent" pour déclencher un événement. Donc, je n'ai pas fait quelque chose de bien sur l'événement public FireEvent en tant que EventHandler. Merci – jvcoach23

+0

HEY jvcoach23, il suffit de vérifier la réponse mise à jour .. – Malcolm

1

le TextBox tout en ayant des événements de souris en vertu de héritant de UIElement ne déclenche l'événement MouseDown lorsque la frontière est cliqué. Vous n'obtenez pas d'événements de souris lorsque vous cliquez dans la zone d'édition de texte du TextBox.

Le plus proche est l'événement GotFocus.

Questions connexes