2010-12-15 1 views
1

Я пишу приложение Windows Forms (C#), у которого есть элемент управления WebBrowser (среди нескольких других кнопок и текстовых полей). Я хочу, чтобы иметь возможность удалить файл в любом месте формы. Проблема в том, что по умолчанию WebBrowser будет пытаться отобразить любой файл в свой контроль; Я не хочу этого, поскольку сначала мне нужно выполнить предварительную обработку файла. Элемент управления WebBrowser предоставляет свойство с именем AllowWebBrowserDrop, для которого я настроен на false, чтобы отключить это поведение. Однако результат заключается в том, что я ничего не могу потерять в элементе управления WebBrowser (обратная связь «не допускается»). Элемент управления WebBrowser занимает большую часть пространства, поэтому он был бы хромым, если бы вы где-то должны были отбросить файл в свободном пространстве. Как я могу включить удаление файла в любом месте в моей форме, если элемент управления WebBrowser не попытается его отобразить?Перетащите на форму (но не элемент управления WebBrowser в форме)

Я думаю, я должен добавить, что у меня есть AllowDrop на моей форме, установленной в true, и имеют обработчики для DragEnter и DragDrop. У меня есть AllowWebBrowserDrop на моем WebBrowser, установленном на false. Все остальное имеет настройки по умолчанию.

ответ

2

В зависимости от того, что вы делаете с помощью WebBrowser, вы можете обрабатывать событие Navigating, которое запускается до того, как браузер перейдет. Затем определите, хотите ли вы обработать падение, проверив URL. Например:

private void browser1_Navigating(object sender, WebBrowserNavigatingEventArgs e) 
{ 
    if (e.Url.IsFile) 
    { 
     // Prevent navigation 
     e.Cancel = true; 

     // Fire your other OnDrop code 
    } 
} 

Для этого, чтобы работать, вы хотели бы, чтобы оставить AllowWebBrowserDrop набор для true.

Если это работает для вашего делового случая, отлично; в противном случае вы, вероятно, застряли в обработке оконных сообщений непосредственно, как уже упоминалось, что не очень весело.

0

Не могли бы вы добавить прозрачный цвет Panel с более высоким z-порядком, чем над ним, и позволить панели обрабатывать падение?

+0

imo, это, скорее всего, поможет поймать событие drop, но также может сломать приложение, поскольку winforms только «подделывает» прозрачные фоны. Вероятно, это также исключает другие важные события. – 2010-12-15 21:34:22

+1

, возможно, переписывает события WndProc и forward _all_ в базовый WebBrowser, за исключением случая, когда событие Drop может работать. – 2010-12-15 21:36:06

Смежные вопросы