enis okatan Ответов: 2

Как я могу изменить свой код, чтобы увидеть текст, который я перетаскиваю во время выполнения операции перетаскивания?


Привет
Я пытаюсь разработать приложение, похожее на краску, и рисую панель.

Я использую текстовое поле, чтобы взять текст от пользователя, а затем перетащить его и бросить в панель с созданием метки, но я хочу видеть, где именно он находится на панели с добавлением тени, как вещь?. Можете ли вы дать мне несколько советов или идей о том, как это сделать, или есть лучший способ сделать это?

Я имею в виду, что просто хочу видеть предмет, который я перетаскиваю, пока я его перетаскиваю.
Вот так(https://imgur.com/a/092QtTO).

Что я уже пробовал:

Вот код, который я получил в настоящее время;

private void panel1_MouseDown(object sender, MouseEventArgs e)
{
    string strText = textBox1.Text;
    DoDragDrop(strText, DragDropEffects.Copy);
    mouse = new Point(e.X, e.Y);
}

private void panel1_DragDrop(object sender, DragEventArgs e)
{
    //Get the text
    string strText = e.Data.GetData("Text", true) as string;

    //Get the position relative to the client where the drop occurred
    Point pt = panel1.PointToClient(new Point(e.X, e.Y));

    //Create a new label to store in the panel
    Label lbl = new Label();
    lbl.Text = strText;
    lbl.BackColor = Color.Transparent;
    lbl.Location = pt;
    lbl.AutoSize = true;

    //Add to the panel
    panel1.Controls.Add(lbl);
}

private void panel1_DragEnter(object sender, DragEventArgs e)
{
    if (e.Data.GetDataPresent("Text"))
        e.Effect = DragDropEffects.Copy;
    else
        e.Effect = DragDropEffects.None;
}


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

OriginalGriff

Что плохого в том, что у тебя есть?
Что он делает такого, чего вы не ожидали, или не делает того, что вы сделали?

Помните, что мы не можем видеть ваш экран, получить доступ к вашему жесткому диску или прочитать ваши мысли - мы получаем только то, что вы печатаете для работы.
Используйте виджет "улучшить вопрос", чтобы отредактировать свой вопрос и предоставить более подробную информацию.

enis okatan

Извините, теперь все более ясно?

BillWoodruff

"добавление этой тенеподобной штуки" - к чему это относится ?

enis okatan

Пожалуйста, посмотрите фотографию, которую я прикрепил через imgur.

2 Ответов

Рейтинг:
2

Sandeep Mewara

Звуки, которые вы ищете DragDropEffects. Указывает на возможные последствия перетащите и падение операции.

Высокий уровень:

Effects Description
Move 	The drag appears as a box along with the cursor. Data is moved to the target through the drop operation.

Copy 	The drag appears as a box with a plus sign along with the cursor. Data is copied to the target through the drop operation. 

Scroll 	The drop target is scrolling while the item is being dragged.

Link 	Data from the source of the item being dragged is linked to the target it is being dropped into.

All 	The data is moved and scrolled in the drop target 

Вместо эффекта к элементу вы также можете изменить цвет фона или другие способы выделения, например:
// in the DragEnter event after 
e.Effect = DragDropEffects.None;
this.Backcolor = Color.Red;// example, change it to any control you want to highlight

Весь пример можно найти в ссылках ниже:
Ссылка: DragDropEffects Enum (System.Окна.Формы) | Microsoft Docs[^]

Убер ссылка:
Пошаговое руководство: выполнение операции перетаскивания - Windows Forms | Microsoft Docs[^]
Перетаскивание с помощью C#[^]


enis okatan

Я думаю, что я не был так ясен, как мог бы быть раньше. Пожалуйста, проверьте мой обновленный вопрос.

Sandeep Mewara

Это не приложение winforms. В интернете перетаскивание текста имеет такое поведение по умолчанию.

Вы можете попробовать такие эффекты, как: https://www.codemag.com/article/0407031/Enable-Your-Windows-Forms-Applications-to-Drag-and-Drop-Data-Objects

Рейтинг:
2

Member 8182832

Самый простой способ-создать делегат для события перетаскивания. Вы можете сделать это, подписавшись на метод, который обновит метку при перетаскивании элемента. Я бы создал пользовательский тип метки, наследуемый от метки или независимо от того, что вы перетаскиваете, чтобы вы могли контролировать поведение. Это будет выглядеть примерно так. Нижеприведенное не проверено, и я сделал это блокнотом на своем телефоне. Поэтому вам, возможно, придется немного изменить его, чтобы он соответствовал вашим целям, но это сработает.

<pre lang="c#">
public static class Program
	{
		public delegate void DragEventHandler(object src, EventArgs e)

		   public event System.Windows.Forms.DragEventHandler DragOver;


		public static void Main()
		{
			OnDragOver += DoSomeWork;
		}

		public static protected void OnDragOver(object src, EventArgs e)
		{
			if (DragOver != null)
			{
				DragOver(src, e);
			}
		}

		public void DoSomeWork(object o, EventArgs e)
		{
			label.Text = e.data.ToString;
		}
	}