Member 13961763 Ответов: 1

Как я перетаскиваю почтовое сообщение в текстовое поле в качестве ввода в C#


привет,
Как я могу перетащить почтовое сообщение в текстовое поле в качестве ввода в c# , чтобы после этого я мог сохранить его в другом пути.
Я перепробовал все решения, которые нашел в интернете, и они не сработали.
Я хочу иметь возможность перетаскивать файл из проводника (теперь он работает) или почтового элемента,
или почтовые вложения ( это работает)

Что я уже пробовал:

публичный класс MyTextBox : TextBox
{
общественное мнение.Приложение _Outlook = новый Outlook.Приложение();
публичный MyTextBox()
{
AllowDrop = true;
Многострочный = true;
DragDrop += новый DragEventHandler(MyTextBox_DragDrop);
DragEnter += новый DragEventHandler(MyTextBox_DragEnter);

}
...
..
..
частная MyTextBox_DragEnter недействительным(объект отправителя, DragEventArgs е)
{
// для этой программы мы разрешаем удалить файл из Проводника
если (электронная.Данных.GetDataPresent(Версии Dataformats.FileDrop))
{ e.Effect = DragDropEffects.Копировать; }
// или это говорит нам, если это падение вложения Outlook
остальное, если (электронная.Данных.GetDataPresent("FileGroupDescriptor"))
{ e.Effect = DragDropEffects.Копировать; }
// или ничего из вышеперечисленного
еще

{ e.Effect = DragDropEffects.None;

}
// д. Эффект = DragDropEffects.Копировать;
}
..
..
частная MyTextBox_DragDrop недействительным(объект отправителя, DragEventArgs е)
{

{
если (электронная.Данных.GetDataPresent(Версии Dataformats.FileDrop, false) == true)
{
этот.Text = ((string[])e.Data.GetData(DataFormats.FileDrop))[0];
}
остальное, если (электронная.Данных.GetDataPresent("FileGroupDescriptor"))
{

Трансляция файла поток = (Поток)Эл.Данных.Метода GetData("FileGroupDescriptor");
byte[] fileGroupDescriptor = новый байт[512];
theStream.Read(fileGroupDescriptor, 0, 512);
// используется для построения имени файла из блока FileGroupDescriptor
StringBuilder fileName = новый StringBuilder("");
// этот трюк получает имя файла переданного вложенного файла
for (int i = 76; fileGroupDescriptor[i] != 0; i++)
{ имя файла.Добавить(Преобразовать.ToChar(fileGroupDescriptor[i])); }
файла поток.Закрывать();
string path = Path.GetTempPath();
// поместите zip-файл во временный каталог
строка theFile = путь + имя файла.Метод toString();
этот.Текст = файл;
если (файл.Содержит(".msg"))
{

Прогноз.Проводник oExplorer = _Outlook.ActiveExplorer();
Прогноз.Выбор oSelection = oExplorer.Выбор;
Прогноз.Сообщения Ми = (прогнозом.MailItem)oSelection;
mi.SaveAs(Path.GetTempPath() + mi.Subject.Метод toString() + ".МСГ",прогноз.OlSaveAsType.olMSG);
файл = путь.GetTempPath() + Ми.Тему.Метод toString() + ".сообщение";

этот.Текст = файл;
FileInfo tempFile = новый FileInfo(theFile);
если (!tempFile.Существует == истина)
{
Ящик для сообщений.Show("файл не был создан!" + Окружающая среда.Перевод строки + файл);
}
}
еще
{

MemoryStream ms = (MemoryStream)e.Data.GetData(
"FileContents", правда);

byte[] fileBytes = новый байт[МС.Длина];

ms.Position = 0;
ms.Read(fileBytes, 0, (int)ms.Длина);

Файлового потока ФС = новый файловый поток(файл, содержит filemode.Создавать);
fs.Write(fileBytes, 0, (int)fileBytes.Длина);

fs.Close(); // закройте файл

FileInfo tempFile = новый FileInfo(theFile);

// всегда полезно убедиться, что мы действительно создали этот файл
если (!tempFile.Существует == истина)
{
Ящик для сообщений.Show("файл не был создан!" + Окружающая среда.Перевод строки + файл);
}
}
}

1 Ответов

Рейтинг:
0

OriginalGriff

Вы могли бы начать здесь Outlook Drag and Drop in C#[^]