2015-11-23 4 views
2

У меня есть приложение Windows Form с несколькими текстовыми полями. Я пытаюсь добавить в него вставку правой кнопкой мыши &. Я добавил контекстное меню с помощью ContextMenuStrip. Тем не менее, я использую это меню для двух разных текстовых полей в приложении. Когда я выбираю и выделяю текст из текстового поля, а затем делаю то же самое, выбирая и выделяя текст из другого текстового поля, он копирует текст из обоих текстовых полей. Как отделить его так, чтобы он знал, с какого текстового поля копировать?C# Выбор текста из правильного текстового поля

Это код, у меня есть:

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

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

Почему вы рассказали о ContextMenuStrip, но покажите нам метод copyToolStripMenuItem_Click? – 3per

+0

, потому что это элемент в этом контекстном меню? – Danny

+0

Извините, посмотрите это http://stackoverflow.com/questions/4886327/determine-what-control-the-contextmenustrip-was-used-on – 3per

ответ

1

Если вы хотите, чтобы определить, какие TextBox мышь находится над, вы можете попробовать следующее.

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

Если мышь не должна быть над текстовым полем, чтобы скопировать, вы всегда магазин, который текстовое поле последнего клика.

Textbox lastClicked; 

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

Я думаю, что когда пользователь нажимает пункт меню, курсор мыши может не быть над текстовое окно. – 3per

0

Чтобы получить текущее активное текстовое поле, вы можете использовать ActiveControl. Сначала вам нужно щелкнуть по этому текстовому полю, чтобы активировать его. Но если вы просто выберите текст, а затем щелкните правой кнопкой мыши, это будет сделано.

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

я сделал что-то вроде этого,

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

Так вот несколько вещей об этой функции,
~ Это позволит определить текстовое поле, где текст был ранее выделен
~ Проблема: возможно, что несколько текстовых полей могут выделять текст за раз, поэтому он будет идентифицировать только последний, который он попадает в петлю.

Вам нужно будет добавить некоторые вали но я уверен, что это делает то, что описывает ваш ОП.
-Также это будет Console.WriteLine(b.Text); для вашей программы.
-Все мои элементы управления были внутри панели под названием pMainScreen, вместо этого вы можете использовать this.controls.oftype.blahblah, чтобы идентифицировать свои текстовые поля.