#c# #winforms #drag-and-drop
#c# #winforms #перетаскивание
Вопрос:
У меня есть некоторый код, который позволяет мне перетаскивать гиперссылку с веб-страницы на форму Windows, и он разделяет URL и заголовок и помещает их в два разных текстовых поля.
Это прекрасно работает в Windows XP, но в Windows 7 это больше не работает. Я не уверен, в чем разница.
object data = e.Data.GetData("UniformResourceLocator");
данные всегда будут равны нулю, но когда я использую
string[] fmts = e.Data.GetFormats();
одним из fmts всегда будет UniformResourceLocator, наряду с кучей других, от которых я, похоже, никогда не смогу получить никаких данных. Если у кого-нибудь есть ресурсы, на которые я мог бы указать, или что-то еще, я был бы очень признателен, это действительно сбивает меня с толку.
Спасибо.
ОБНОВЛЕНИЕ: добавлен код метода, который раньше работал
string hyperLinkUrl = null;
string hyperLinkText = null;
hyperLinkUrl = e.Data.GetData(typeof(string)) as string;
// some browser deliver url and text
// in UniformResourceLocator (Firebird)
string[] tokens = null;
if (hyperLinkUrl != null)
{
tokens = hyperLinkUrl.Split('n');
}
if (tokens != null amp;amp; tokens.Length > 1)
{
hyperLinkUrl = tokens[0];
hyperLinkText = tokens[1];
}
// we have to read FILEGROUPDESCRIPTOR to get the text (IE)
else
{
System.IO.Stream ioStream =
(System.IO.Stream)e.Data.GetData("FileGroupDescriptor");
byte[] contents = new Byte[512];
try
{
ioStream.Read(contents, 0, 512);
}
catch (Exception x)
{
}
ioStream.Close();
System.Text.StringBuilder sb = new System.Text.StringBuilder();
//The magic number 76 is the size of that part of the
//FILEGROUPDESCRIPTOR structure before
// the filename starts - cribbed
//from another usenet post.
for (int i = 76; contents[i] != 0; i )
{
sb.Append((char)contents[i]);
}
if (!sb.ToString(sb.Length - 4, 4).ToLower().Equals(".url"))
{
throw new Exception("filename does not end in '.url'");
}
hyperLinkText = sb.ToString(0, sb.Length - 4);
}
tbLinkTitle.Text = hyperLinkText;
tbLinkAddress.Text = hyperLinkUrl;
Комментарии:
1. я добавил несколько неаккуратный код метода
2. Прошу прощения. Когда код говорит что-то вроде
the magic number 76 is the size of that part of the FILEGROUPDESCRIPTOR structure before the filename starts
, и вы пытаетесь использовать его на платформе, отличной от той, на которой он был написан, все ставки отменяются.3. Как это не работает, срабатывает ли исключение? Синтаксический анализ отключен? Подробные сведения. Подробные сведения. Подробные сведения.
4. @KyleGobel: Вы проверили значение вашего
contents
массива, чтобы увидеть, есть ли в нем что-нибудь? Возможно, позиция отключена, и она больше не равна 76.5. извините, я должен был упомянуть, что ioStream будет равен null, я на самом деле не могу найти способ, чтобы e.Data.getData не возвращал нулевые данные, хотя e.Data.GetFormats вернет множество доступных форматов. Если бы я мог получить какие-либо данные в массив байтов содержимого, я, вероятно, смог бы это исправить.
Ответ №1:
перетащите гиперссылку с веб-страницы
Эта страница не была бы в веб-браузере, работающем с низкой целостностью (например, в защищенном режиме IE), не так ли? Перетаскивание не работает на разных уровнях целостности.
Что произойдет, если вы также используете icacls
для установки низкого уровня целостности вашего исполняемого файла? Если drag-and-drop начинает работать, значит, это была проблема.