Just nu i M3-nätverket
Gå till innehåll

Drag ifrån WebBrowser


.M

Rekommendera Poster

Jag vill använda en WebBrowserkontroll och dra bilder ifrån websidor till andra kontroller i mitt formulär... är detta möjligt?? Noterade att DragDrop eventet inte är tillgängligt på en WebBrowserkontroll. Så jag kanske måste hitta ett annat sätt?

 

Länk till kommentar
Dela på andra webbplatser

  • 2 veckor senare...

Vad du behöver göra är följande:

1. I de kontroller som ska ta emot bilderna sätt AllowDrop till true.

ex: pictureBox1.AllowDrop = true;

 

2. Lägg till en eventhandler på eventet DragEnter på de berörda kontrollerna.

ex:

private void pictureBox1_DragEnter(object sender, DragEventArgs e)
{
// Check that the Copy effect is allowed.
if ((e.AllowedEffect & DragDropEffects.Copy) != 0)
	e.Effect = DragDropEffects.Copy;
}

 

Detta gör att du "meddelar" att du kan ta emot data.

 

3. Lägg till en eventhandler på eventet DragDrop på de berörda kontrollerna.

ex:

private void pictureBox1_DragDrop(object sender, DragEventArgs e)
{
// Get the MemoryStream with the DIB (Device-Independent Bitmap).
var dibStream = (Stream)e.Data.GetData(DataFormats.Dib);

// Get a Bitmap from the stream.
var img = BitmapFromDib(dibStream);
if (img != null)
	((PictureBox)sender).Image = img;
}

 

Detta hämtar och visar bilden som droppades på PictureBox kontrollen.

 

Som du kanske märker finns det en metod (BitmapFromDib) som hämtar själva bilden. Den kommer här:

public static Bitmap BitmapFromDib(Stream dib)
{
// Create a new Bitmap File in memory.
var reader = new BinaryReader(dib);

var headerSize = reader.ReadInt32();
var pixelSize = (int)dib.Length - headerSize;
var fileSize = 14 + headerSize + pixelSize;

var bmp = new MemoryStream(fileSize);
var writer = new BinaryWriter(bmp);

// 1. Write Bitmap File Header:			 
writer.Write((byte)'B');
writer.Write((byte)'M');
writer.Write(fileSize);
writer.Write((int)0);
writer.Write(14 + headerSize);

// 2. Copy the DIB 
dib.Position = 0;
var data = new byte[(int)dib.Length];
dib.Read(data, 0, (int)dib.Length);
writer.Write(data, 0, (int)data.Length);

// 3. Create a new Bitmap from our new stream:
bmp.Position = 0;
return new Bitmap(bmp);
}

 

Som du märker behöver du inte bry dig om Drag n' Drop från WebBrowser kontrollen alls. Det är "mottagarna" som behöver veta vad de ska göra om en bild droppas på dem.

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...