如题,Form上面一个WebBrowser控件~~问题,文件拖放到WebBrowser上方响应不了Form的拖放事件,咋办?

解决方案 »

  1.   

    不知道搂主到底指的是谁的拖放事件响应不了WebBrowser控件默认是自动响应拖放事件的,在这个时候拖放消息已经被该控件给截获了,所以窗体没有响应到拖放事件。
      

  2.   

    WebBrowser控件盖满整个form,触发不了 form的事件了。可以直接把文件拖放到WebBrowser控件的。
    刚才试了一个文本文件,拖放到WebBrowser控件,直接就打开了。
      

  3.   

    WebBrowser控件盖满整个form,触发不了 form的事件了。可以直接把文件拖放到WebBrowser控件的。
    刚才试了一个文本文件,拖放到WebBrowser控件,直接就打开了。
      

  4.   

    楼主可以从WebBrowser派生一个类,然后重载WndProc,收到wm_dropfiles时通知主窗口
      

  5.   


    public class WebBrowserEx : WebBrowser
        {
            private const int WM_DROPFILES = 0x233;        [DllImport("shell32.dll")]
            private static extern uint DragQueryFile(
                IntPtr hDrop,
                uint iFile,
                StringBuilder lpszFile,
                uint cch);        [DllImport("shell32.dll")]
            private static extern void DragAcceptFiles(IntPtr hWnd, bool fAccept);        public WebBrowserEx()
                : base()
            {
                base.AllowWebBrowserDrop = false;
            }        public event DragFileEventHandler DragFile;        protected override void OnHandleCreated(EventArgs e)
            {
                base.OnHandleCreated(e);
                if (!DesignMode)
                {
                    DragAcceptFiles(Handle, true);
                }
            }        protected override void WndProc(ref Message m)
            {
                StringBuilder sb = new StringBuilder(1024);
                if (m.Msg == WM_DROPFILES)
                {
                    uint count = DragQueryFile(m.WParam, 0xffffffff, null, 0);
                    string[] files = new string[count];
                    for (uint i = 0; i < count; i++)
                    {
                        DragQueryFile(m.WParam, i, sb, 1024);
                        files[i] = sb.ToString();
                    }
                    OnDragFile(new DragFileEventArgs(files));
                    return;
                }            base.WndProc(ref m);
            }        protected virtual void OnDragFile(DragFileEventArgs e)
            {
                if (DragFile != null)
                {
                    DragFile(this, e);
                }
            }
        }    public delegate void DragFileEventHandler(
            object sender,
            DragFileEventArgs e);    public class DragFileEventArgs : EventArgs
        {
            private string[] _files;        public DragFileEventArgs(string[] files)
            {
                _files = files;
            }        public string[] Files
            {
                get { return _files; }
            }
        }
      

  6.   

    楼上代码可解决问题~~谢谢啦!!bs csdn~~ie6现在居然不能登录~~~