2015-11-23 2 views
2

J'ai une application Windows Form avec plusieurs zones de texte. J'essaye d'ajouter un droit-copie la fonction de coller & dedans. J'ai ajouté le menu contextuel en utilisant le ContextMenuStrip. Cependant, j'utilise ce menu pour 2 zones de texte différentes dans l'application. Lorsque je sélectionne et met en surbrillance du texte d'une zone de texte, puis que je fais la même chose en sélectionnant et en surlignant le texte de l'autre zone de texte, il copie dans le texte des deux zones de texte. Comment puis-je le séparer pour qu'il sache de quelle boîte de texte copier?C# Sélection de texte dans la zone de texte appropriée

C'est le code que j'ai:

private void copyToolStripMenuItem_Click(object sender, EventArgs e) 
     { 
      string leadSelectedText = leadsTextBox.SelectedText; 
      string resultSelectedText = resultTextBox.SelectedText; 

      Console.WriteLine(leadSelectedText); 
      Console.WriteLine(resultSelectedText); 
     } 
+0

Pourquoi avez-vous parlé de ContextMenuStrip, mais vous nous avez montré une méthode copyToolStripMenuItem_Click? – 3per

+0

parce que c'est l'élément dans ce menu contextuel? – Danny

+0

Désolé, regardez ceci http://stackoverflow.com/questions/4886327/determine-what-control-the-contextmenustrip-was-used-on – 3per

Répondre

1

Si vous voulez déterminer quelle zone de texte de la souris est terminé, vous pouvez essayer ce qui suit.

 if (leadsTextBox == GetChildAtPoint(MousePosition)) 
     { 
      //copy from leads text 
     } 
     else if (resultTextBox == GetChildAtPoint(MousePosition)) 
     { 
      //copy from results text 
     } 

Si la souris ne doit pas être au-dessus de la zone de texte à copier, vous pouvez toujours magasin qui a été la dernière zone de texte cliqué.

Textbox lastClicked; 

private void leadsTextbox_mouseDown() 
{ 
    if (!string.IsNullOrEmpty(leadsTextbox.SelectText)) 
     lastClicked = leadsTextbox; 
} 
+0

Je pense que lorsque l'utilisateur clique sur l'élément de menu, le curseur de la souris ne peut pas être sur le zone de texte. – 3per

0

Vous pouvez utiliser ActiveControl pour obtenir la zone de texte active. Vous devez d'abord cliquer dans cette zone de texte pour l'activer. Mais si vous sélectionnez un texte, cliquez avec le bouton droit de la souris.

private void copyToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    System.Windows.Forms.Control control = this.ActiveControl; 
     if (control.GetType() == typeof(System.Windows.Forms.TextBox)) 
      System.Console.WriteLine(((System.Windows.Forms.TextBox)control).SelectedText); 
} 
0

Je l'ai fait quelque chose comme ça,

private void toolStripButton1_Click(object sender, EventArgs e) 
    { 
     List<TextBox> box = new List<TextBox>(); 
     box = pMainScreen.Controls.OfType<TextBox>().Where(c => c.Name.Contains("")).ToList(); 

     foreach(TextBox b in box) 
     { 
      if (b.SelectionLength > 0) 
       label7.Text = b.Text; 
     } 
    } 

Voici donc peu de choses sur cette fonction,
~ Cela permettra d'identifier la zone de texte où le texte avait été précédemment mis en évidence
~ Problème: Il Il est possible que plus d'une zone de texte puisse avoir du texte en surbrillance à la fois, de manière à identifier uniquement la dernière qu'elle touche dans la boucle

Vous devrez ajouter Dation ontop de cela, mais je suis assez sûr que cela fait ce que votre OP décrivent.
-Aussi ce sera Console.WriteLine(b.Text); pour votre programme.
-Tous mes contrôles étaient à l'intérieur d'un panneau appelé pMainScreen, vous pouvez utiliser this.controls.oftype.blahblah à la place pour identifier vos zones de texte.