2016-02-23 3 views
0

У меня есть кнопка и текстовое поле в той же форме. Можно ли перетащить кнопку и отбросить ее в текстовое поле (пробел)?Можно ли перетащить кнопку в текстовое поле?

+0

Просто из любопытства, почему ты сделал это? –

+0

wpf или winform? – Sakura

+0

Я думаю, что текстовое поле может содержать только текст –

ответ

0

Нет, вы не можете. Вы можете создать UserControl, в котором находятся оба элемента управления, но вы просто не можете поместить один элемент управления в другой.

1

Да, вы можете это сделать.

Все, что вам нужно сделать, это добавить Button или любой другой Control к Controls инкассо TextBox «s или, с немного меньшим типизации, сделать TextBox в Parent в Button.

Вот пример без перетаскивания & капания:

private void button1_Click(object sender, EventArgs e) 
{ 
    button1.Parent = textBox1; 
    button1.Location = Point.Empty; 
} 

До и после:

enter image description hereenter image description here

Как вы можете видеть, что это будет накладывать Text, и вы хотите установить Location. Найти хорошее место зависит от вас!

Так что если вы действительно хотите для вас может это сделать.

Адаптация кода для перетаскивания & Капля на самом деле не отличается от любого другого случая d & d. Существует даже little example on MSDN, который показывает точно, как перетащить Button на TextBox, но с целью поставить Button.Text.

Обратите внимание, что пример не только немного глупо, но также не говоря уже о том, что, как они делают это, а именно, начиная с d & д в MouseDown, то Button больше не может быть щелкнул!

Вот исправленный пример:

private void textBox1_DragEnter(object sender, DragEventArgs e) 
{ 
    if ((e.AllowedEffect & DragDropEffects.Link) != 0 
     && e.Data.GetDataPresent(typeof(Button))) 
     e.Effect = DragDropEffects.Link; 
} 

private void textBox1_DragDrop(object sender, DragEventArgs e) 
{ 
    Button btn = e.Data.GetData(typeof(Button)) as Button; 
    btn.Parent = textBox1; 
    btn.Location = new Point(textBox2.Width - btn.Width - 2, -2); 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    textBox1.Text = "The Button is still working!"; 
} 

// we use the MouseMove with a check for the left button 
private void button1_MouseMove(object sender, MouseEventArgs e) 
{ 
    if (e.Button == System.Windows.Forms.MouseButtons.Left) 
     DoDragDrop((sender as Button), DragDropEffects.Link); 
} 
+0

Спасибо @Taw. Пожалуйста, что я могу сделать, если я хочу, чтобы я мог писать в области текстового поля после кнопки. Я имею в виду, что я не хочу, чтобы кнопка сбрасывала текст. –

+0

Ну, это займет пространство __some__, поэтому вы лучше всего сделаете текстовое поле достаточно большим и поместите кнопку вправо, как вторая часть кода. – TaW

Смежные вопросы