Control.AllowDrop Propiedad
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Obtiene o establece un valor que indica si el control puede aceptar los datos que el usuario arrastra al mismo.
public:
virtual property bool AllowDrop { bool get(); void set(bool value); };
public virtual bool AllowDrop { get; set; }
member this.AllowDrop : bool with get, set
Public Overridable Property AllowDrop As Boolean
Valor de propiedad
true
si están permitidas las operaciones de arrastrar y colocar en el control; en caso contrario, false
. De manera predeterminada, es false
.
Ejemplos
El ejemplo de código siguiente permite al usuario arrastrar una imagen o un archivo de imagen al formulario y mostrarlo en el punto en el que se coloca. El OnPaint método se invalida para volver a pintar la imagen cada vez que se pinta el formulario; de lo contrario, la imagen solo persistiría hasta que se vuelva a pintar la siguiente. El DragEnter método de control de eventos determina el tipo de datos que se arrastran al formulario y proporciona los comentarios adecuados. El DragDrop método de control de eventos muestra la imagen en el formulario, si se puede crear a Image partir de los datos. Dado que los DragEventArgs.X valores y DragEventArgs.Y son coordenadas de pantalla, en el ejemplo se usa el PointToClient método para convertirlos en coordenadas de cliente.
private:
Image^ picture;
Point pictureLocation;
public:
Form1()
{
// Enable drag-and-drop operations and
// add handlers for DragEnter and DragDrop.
this->AllowDrop = true;
this->DragDrop += gcnew DragEventHandler( this, &Form1::Form1_DragDrop );
this->DragEnter += gcnew DragEventHandler( this, &Form1::Form1_DragEnter );
}
protected:
virtual void OnPaint( PaintEventArgs^ e ) override
{
// If there is an image and it has a location,
// paint it when the Form is repainted.
Form::OnPaint( e );
if ( this->picture != nullptr && this->pictureLocation != Point::Empty )
{
e->Graphics->DrawImage( this->picture, this->pictureLocation );
}
}
private:
void Form1_DragDrop( Object^ /*sender*/, DragEventArgs^ e )
{
// Handle FileDrop data.
if ( e->Data->GetDataPresent( DataFormats::FileDrop ) )
{
// Assign the file names to a String* array, in
// case the user has selected multiple files.
array<String^>^files = (array<String^>^)e->Data->GetData( DataFormats::FileDrop );
try
{
// Assign the first image to the picture variable.
this->picture = Image::FromFile( files[ 0 ] );
// Set the picture location equal to the drop point.
this->pictureLocation = this->PointToClient( Point(e->X,e->Y) );
}
catch ( Exception^ ex )
{
MessageBox::Show( ex->Message );
return;
}
}
// Handle Bitmap data.
if ( e->Data->GetDataPresent( DataFormats::Bitmap ) )
{
try
{
// Create an Image and assign it to the picture variable.
this->picture = dynamic_cast<Image^>(e->Data->GetData( DataFormats::Bitmap ));
// Set the picture location equal to the drop point.
this->pictureLocation = this->PointToClient( Point(e->X,e->Y) );
}
catch ( Exception^ ex )
{
MessageBox::Show( ex->Message );
return;
}
}
// Force the form to be redrawn with the image.
this->Invalidate();
}
void Form1_DragEnter( Object^ /*sender*/, DragEventArgs^ e )
{
// If the data is a file or a bitmap, display the copy cursor.
if ( e->Data->GetDataPresent( DataFormats::Bitmap ) || e->Data->GetDataPresent( DataFormats::FileDrop ) )
{
e->Effect = DragDropEffects::Copy;
}
else
{
e->Effect = DragDropEffects::None;
}
}
private Image picture;
private Point pictureLocation;
public Form1()
{
// Enable drag-and-drop operations and
// add handlers for DragEnter and DragDrop.
this.AllowDrop = true;
this.DragDrop += new DragEventHandler(this.Form1_DragDrop);
this.DragEnter += new DragEventHandler(this.Form1_DragEnter);
}
protected override void OnPaint(PaintEventArgs e)
{
// If there is an image and it has a location,
// paint it when the Form is repainted.
base.OnPaint(e);
if(this.picture != null && this.pictureLocation != Point.Empty)
{
e.Graphics.DrawImage(this.picture, this.pictureLocation);
}
}
private void Form1_DragDrop(object sender, DragEventArgs e)
{
// Handle FileDrop data.
if(e.Data.GetDataPresent(DataFormats.FileDrop) )
{
// Assign the file names to a string array, in
// case the user has selected multiple files.
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
try
{
// Assign the first image to the picture variable.
this.picture = Image.FromFile(files[0]);
// Set the picture location equal to the drop point.
this.pictureLocation = this.PointToClient(new Point(e.X, e.Y) );
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
return;
}
}
// Handle Bitmap data.
if(e.Data.GetDataPresent(DataFormats.Bitmap) )
{
try
{
// Create an Image and assign it to the picture variable.
this.picture = (Image)e.Data.GetData(DataFormats.Bitmap);
// Set the picture location equal to the drop point.
this.pictureLocation = this.PointToClient(new Point(e.X, e.Y) );
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
return;
}
}
// Force the form to be redrawn with the image.
this.Invalidate();
}
private void Form1_DragEnter(object sender, DragEventArgs e)
{
// If the data is a file or a bitmap, display the copy cursor.
if (e.Data.GetDataPresent(DataFormats.Bitmap) ||
e.Data.GetDataPresent(DataFormats.FileDrop) )
{
e.Effect = DragDropEffects.Copy;
}
else
{
e.Effect = DragDropEffects.None;
}
}
Private picture As Image
Private pictureLocation As Point
Public Sub New()
' Enable drag-and-drop operations.
Me.AllowDrop = True
End Sub
Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
MyBase.OnPaint(e)
' If there is an image and it has a location,
' paint it when the Form is repainted.
If (Me.picture IsNot Nothing) And _
Not (Me.pictureLocation.Equals(Point.Empty)) Then
e.Graphics.DrawImage(Me.picture, Me.pictureLocation)
End If
End Sub
Private Sub Form1_DragDrop(ByVal sender As Object, _
ByVal e As DragEventArgs) Handles MyBase.DragDrop
' Handle FileDrop data.
If e.Data.GetDataPresent(DataFormats.FileDrop) Then
' Assign the file names to a string array, in
' case the user has selected multiple files.
Dim files As String() = CType(e.Data.GetData(DataFormats.FileDrop), String())
Try
' Assign the first image to the 'picture' variable.
Me.picture = Image.FromFile(files(0))
' Set the picture location equal to the drop point.
Me.pictureLocation = Me.PointToClient(New Point(e.X, e.Y))
Catch ex As Exception
MessageBox.Show(ex.Message)
Return
End Try
End If
' Handle Bitmap data.
If e.Data.GetDataPresent(DataFormats.Bitmap) Then
Try
' Create an Image and assign it to the picture variable.
Me.picture = CType(e.Data.GetData(DataFormats.Bitmap), Image)
' Set the picture location equal to the drop point.
Me.pictureLocation = Me.PointToClient(New Point(e.X, e.Y))
Catch ex As Exception
MessageBox.Show(ex.Message)
Return
End Try
End If
' Force the form to be redrawn with the image.
Me.Invalidate()
End Sub
Private Sub Form1_DragEnter(ByVal sender As Object, _
ByVal e As DragEventArgs) Handles MyBase.DragEnter
' If the data is a file or a bitmap, display the copy cursor.
If e.Data.GetDataPresent(DataFormats.Bitmap) _
Or e.Data.GetDataPresent(DataFormats.FileDrop) Then
e.Effect = DragDropEffects.Copy
Else
e.Effect = DragDropEffects.None
End If
End Sub
Notas a los desarrolladores de herederos
Al invalidar la AllowDrop propiedad en una clase derivada, utilice la propiedad de AllowDrop la clase base para extender la implementación base. De lo contrario, debe proporcionar toda la implementación. No es necesario invalidar los get
descriptores de acceso y set
de la AllowDrop propiedad; solo se puede invalidar uno si es necesario.