C# Drag AND Drop di oggetti su panel

mercoledì 03 dicembre 2014 - 09.31
Tag Elenco Tags  C#  |  .NET 3.5  |  Windows 7

secks Profilo | Senior Member

Salve a tutti.
Ho inserito in una win form di C# 2010 un panel ed una textbox.
Trascinando la textbox sul panel la text non viene importata sul panel, sembra come se venga trascinata dietro al panel.
Dovrei fare in modo che la textbox venga compresa tra gli oggetti appartenenti al panel, da cosa può dipendere?

public frmProva5()
{
InitializeComponent();
panel1.AllowDrop = true;
}

private void frmProva5_Load(object sender, EventArgs e)
{
}

void panel_DragEnter(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Move;
}

void panel_DragDrop(object sender, DragEventArgs e)
{
((TextBox)e.Data.GetData(typeof(TextBox))).Parent = (Panel)sender;
}

private void panel1_DragEnter(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Move;
}

0v3rCl0ck Profilo | Guru

Ti consiglio di provare prima dal designer di visual studio, metti letteralmente una textbox realmente dentro ad un panel, poi vai nel code-behind dove visual studio generale il codice della form, e guarda come fa a mettere la textbox dentro al panel, ed esegui lo stesso codice nei tuo evento di drop.

Probabilmente dovrai anche scollegare la textbox dal vecchio "parent", cioè la form su dove era prima, e poi rilanciare un bel redraw della form, con un form.Invalidate()

Poi per curiosità: ma perchè devi fare il drag & drop di una textbox in un panel? stai costruendo una sorta di designer?


Michael Denny | Microsoft Visual C# MVP
http://blogs.dotnethell.it/Regulator/
http://dennymichael.net
http://mvp.microsoft.com/mvp/Michael%20Denny-5000735
Twitter: @dennymic

secks Profilo | Senior Member

Ho provato infatti a creare un esempio semplice e basilare e funziona, solo che se attivo una funzione che permette di gestire il drag & drop sugli oggetti, gli oggetti trascinati vanno sotto il panel, penso perché la classe attivata vada ad influire sugli eventi del panel.

La classe che ho trovato in rete si chiama ControlMoverOrResizer.cs ed è molto carina in quanto permette di spostare gli oggetti sulla form ed addirittura di modificarne la dimensione! Solo che non ho esperienza sulla gestione degli eventi del mouse in combinazione con altri oggetti e mi trovo in difficoltà nel portare picture e textbox nel panel in quanto non riesco ad importare gli oggetti tramite trascinamento.

Si, vorrei creare una specie di design con alcuni campi importati dal un database e gestibile ad uso utente per generare etichette.

Se qualcuno ha qualche dritta ringrazio anticipatamente.

Grazie per l'attenzione.
Paolo.

0v3rCl0ck Profilo | Guru

secondo me non è che vanno sotto al panel, ma probabilmente non gli imposti la posizione X, Y all'interno del panel stesso, oppure peggio hanno la X e Y vecchia. Ad ogni modo se stai facendo un designer, più che spostare un controllo da un panel all'altro perchè non lo usi solo come riferimento, e crei un oggetto nuovo, esattamente come fa visual studio, di fianco di fa solo vedere la lista dei controlli a disposizione, quando trascini un controllo nella form, non stai spostando un controllo, ma lo stai creando da zero.


Michael Denny | Microsoft Visual C# MVP
http://blogs.dotnethell.it/Regulator/
http://dennymichael.net
http://mvp.microsoft.com/mvp/Michael%20Denny-5000735
Twitter: @dennymic
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5