Рейтинг:
0
OriginalGriff
Перетаскивание "элементов управления" в форму во время выполнения - это не простая концепция-вам нужно будет создать приложение "контейнер", чтобы удерживать элементы управления в форме, которую они могут перетаскивать, и изменить свое приложение, чтобы принять это падение. Это самая простая часть, решение Ричарда охватывает основы этого.
После этого все становится ужасно сложным, потому что элемент управления, брошенный на форму, не делает ничего полезного, поскольку ничто в приложении не знает, как с ним взаимодействовать. В основном то, что вы смотрите на переписывание всего VS designer, с дополнительным усложнением, что ваш код уже скомпилирован, и вы не можете добавить к нему, пока он работает.
Почти наверняка вы пытаетесь реализовать что - то, что является плохой идеей, и вам, вероятно, следует сделать шаг назад и переосмыслить, почему вы считаете это хорошей идеей-мы понятия не имеем, чего вы пытаетесь достичь, поэтому мы даже не можем начать догадываться, а тем более предоставлять вам код!
Member 12712527
Пользовательский элемент управления-это элемент управления, очень похожий на кнопку. Итак, если вы можете перетащить кнопку в форму, то почему вы не можете перетащить пользовательский элемент управления...?
OriginalGriff
Ах... если вы имеете в виду падение UserControl на вашей форме во время разработки, то вы можете - я делаю это все время.
Все, что вам нужно сделать, это скомпилировать UC (если он находится в вашем текущем проекте), и он появится в панели инструментов в разделе "компоненты YourProjectName" в качестве перетаскиваемого элемента при переключении на конструктор.
Ваше использование "программно" подразумевает, что вы хотите отбросить элементы управления в запущенном приложении, которое вы написали, и именно на это мы с Ричардом отвечали. Во время разработки рабочий UC просто появляется в панели инструментов, и вы используете его так же, как кнопку или текстовое поле.
Member 12712527
Решение для кнопочного управления
общественности частичного класс form1 : форма
{
private bool isDragging = false;
частный int oldX, oldY;
кнопка частная ;
открытый form1()
{
метод InitializeComponent();
Text = "кнопка перетаскивания & drop";
Размер = новый размер(270, 180);
кнопка = новый ();
кнопка.Родитель = это;
кнопка.Курсор = Курсоры.Рука;
кнопка.Text = "Кнопка";
кнопка.Местоположение = новая точка(20, 20);
кнопка.MouseDown += новый MouseEventHandler(OnMouseDown);
кнопка.MouseUp += новый MouseEventHandler(OnMouseUp);
кнопка.MouseMove += новый MouseEventHandler(OnMouseMove);
CenterToScreen();
}
private void OnMouseDown(отправитель объекта, MouseEventArgs e)
{
isDragging = true;
oldX = e.X;
старовато = е.Г;
}
private void OnMouseMove(отправитель объекта, MouseEventArgs e)
{
if (isDragging)
{
кнопка.Верхняя кнопка.Топ + (Эл.Г - старовато);
кнопка.Левая = кнопка.Слева + (например, X - oldX);
}
}
private void OnMouseUp(отправитель объекта, MouseEventArgs e)
{
isDragging = false;
}
}
Member 12712527
Точно так же можно было бы управлять пользователем. Позвольте мне сначала попробовать....