c# 多TabPage中的PictureBox实现拖拽文件并显示
代码块
代码块语法遵循标准markdown代码,例如:
string fileName = string.Empty;
private void ImageScan_DragDrop(object sender, DragEventArgs e)
{
//获取第一个文件名
fileName = (e.Data.GetData(DataFormats.FileDrop, false) as String[])[0];
try
{
Point screenPoint = Control.MousePosition;//鼠标相对于屏幕左上角的坐标
Point formPoint = this.PointToClient(Control.MousePosition);//鼠标相对于窗体左上角的坐标
//Point contextMenuPoint = contextMenuStrip1.PointToClient(Control.MousePosition); //鼠标相对于contextMenuStrip1左上角的坐标
label1.Location = winPoint;
IntPtr formHandle = WindowFromPoint(winPoint);//得到窗口句柄
Control con = Control.FromHandle(formHandle);
Point point = this.PointToScreen(new Point(e.X, e.Y));
DragOverSetPic(screenPoint, this.Controls, fileName);
}
catch (Exception) { MessageBox.Show("文件格式不对"); }
}
private void DragOverSetPic(Point point, System.Windows.Forms.Control.ControlCollection c, string fileName)
{
foreach (Control item in c)
{
if (item.HasChildren)
{
//如果是tabPage,只选择当前激活页遍历,SkinTabPage,if(this.ta.tabControl1.SelectedTab==)
if (item is CCWin.SkinControl.SkinTabPage)
{
if (item.Visible)
DragOverSetPic(point, item.Controls, fileName);
}
else
DragOverSetPic(point, item.Controls, fileName);
}
if (item is CCWin.SkinControl.SkinPictureBox)
{
Rectangle rc = item.RectangleToScreen(item.ClientRectangle);
if (rc.Contains(point))
((CCWin.SkinControl.SkinPictureBox)(item)).ImageLocation = fileName;
}
}
}
private void ImageScan_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effect = DragDropEffects.All;
else e.Effect = DragDropEffects.None;
}