Когда вы выполняете перетаскивание в элементе управления treeview, вам необходимо поддерживать некоторые функции автоматического прокрутки. Например, когда вы перетаскиваете элемент из видимого узла дерева, а узел дерева назначения находится за пределами текущего представления дерева, элемент управления должен автоматически прокручивать вверх или вниз в зависимости от направления мыши.
Элемент управления Windows Forms Treeview не включает встроенные функции для выполнения этого. Тем не менее, это довольно просто реализовать.
Шаг 1: Получите ваш код перетаскивания дерева древовидной структуры
Убедитесь, что ваш код перетаскивания древовидной структуры работает правильно без автопрокрутки. См. Разделы в этой папке для получения дополнительной информации о том, как реализовать перетаскивание в древовидной структуре.
Шаг 2: добавьте определение функции SendMessage
Чтобы рассказать о древовидной структуре для прокрутки вверх или вниз вам нужно вызвать функцию Windows API SendMessage (). Для этого добавьте следующий код в верхнюю часть вашего класса:
// Make sure you have the correct using clause to see DllImport:
// using System.Runtime.InteropServices;
[DllImport("user32.dll")]
private static extern int SendMessage (IntPtr hWnd, int wMsg, int wParam,
int lParam);
Шаг 3: Захват события DragScroll
В событии DragScroll определите, где находится курсор мыши по отношению к верхней и нижней части управления древовидной структурой. Затем вызовите SendMessage для прокрутки как подходящего.
// Implement an "autoscroll" routine for drag
// and drop. If the drag cursor moves to the bottom
// or top of the treeview, call the Windows API
// SendMessage function to scroll up or down automatically.
private void DragScroll (
object sender,
DragEventArgs e)
{
// Set a constant to define the autoscroll region
const Single scrollRegion = 20;
// See where the cursor is
Point pt = TreeView1.PointToClient(Cursor.Position);
// See if we need to scroll up or down
if ((pt.Y + scrollRegion) > TreeView1.Height)
{
// Call the API to scroll down
SendMessage(TreeView1.Handle, (int)277, (int)1, 0);
}
else if (pt.Y < (TreeView1.Top + scrollRegion))
{
// Call thje API to scroll up
SendMessage(TreeView1.Handle, (int)277, (int)0, 0);
}
Взято из здесь .
создать класс, который вам нужен после определения в классе формы
class ContactType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('name');
$builder->add('price');
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => Content::class,
));
}
}
Следуйте за
$content = new Content();
$form = $this->createForm(ContactType::class, $content);
$form->handleRequest($request);
$formdata = $form->getData();
$content->getName();
$content->getOther();
...