Пробую изучать C# нужна подсказка или помощ
Цитата: Aleksey от 03.04.2023, 16:41Да, нужно было навсегда, но при этом что бы в правом углу окно выскакивало. С той программой я закончил, вроде нормально работает. Теперь новое делаю всякое, вот например, есть такой вопрос.
Так же есть ещё вопрос, не могу разобраться как назначить на один контрол несколько действий, вот пример:
[spoiler title="код"]async void label1_Click(object sender, EventArgs e) { if (label1.Text == "Поставить все галочки") { await Task.Delay(100); foreach (CheckBox check in Controls.OfType<CheckBox>()) check.Checked = true; label1.Text = "Снять галочки"; // вот по второму нажатию на label1 не работает, снятие галочек else if (label1.Text == "Снять галочки") { foreach (CheckBox check in Controls.OfType<CheckBox>()) check.Checked = false; } }
[/spoiler]
Как сделать, что бы по второму нажатию на label1 галочки снимались именно на нажатие label1? что-то я забыл уже как это делать.
Да, нужно было навсегда, но при этом что бы в правом углу окно выскакивало. С той программой я закончил, вроде нормально работает. Теперь новое делаю всякое, вот например, есть такой вопрос.
Так же есть ещё вопрос, не могу разобраться как назначить на один контрол несколько действий, вот пример:
async void label1_Click(object sender, EventArgs e)
{
if (label1.Text == "Поставить все галочки")
{
await Task.Delay(100);
foreach (CheckBox check in Controls.OfType<CheckBox>())
check.Checked = true;
label1.Text = "Снять галочки";
// вот по второму нажатию на label1 не работает, снятие галочек
else if (label1.Text == "Снять галочки")
{
foreach (CheckBox check in Controls.OfType<CheckBox>())
check.Checked = false;
}
}
Как сделать, что бы по второму нажатию на label1 галочки снимались именно на нажатие label1? что-то я забыл уже как это делать.
Цитата: vitos от 04.04.2023, 02:40
Цитата: Aleksey от 05.04.2023, 13:54Приветствуюvitos,
Спасибо за помощь, оказывается, я был оочень близок, ошибся в скобках {}Может, вы ещё подскажите как в сообщение прикрепить несколько файлов для отправки? страницей ранее я писал вопрос.
[spoiler title="Код"]void button1_Click(object sender, EventArgs e) { string fromUser = richTextBox1.Text; // Тут пишем комментарий пользователю string uemail = textBox1.Text; string upassword = textBox2.Text; try { MailAddress from = new MailAddress(uemail); MailAddress to = new MailAddress("test@gmail.com"); MailMessage message = new MailMessage(from, to) { Subject = "Заголовок письма", Body = $"{Environment.NewLine}{fromUser}" }; SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587) { Credentials = new NetworkCredential(uemail, upassword), EnableSsl = true }; ```foreach (string item in label2.Text.Split('\n')) { message.Attachments.Add(new Attachment(item)); }``` smtp.Send(message); // Отправляем письмо MessageBox.Show("Сообщение успешно отправлено. Спасибо!"); Close(); } catch (FormatException) { MessageBox.Show("Неверный формат электронной почты. Почта должна иметь окончания - @gmail/yandex/mail/bk/list и другие"); textBox1.Clear(); } catch (ArgumentException ae) { MessageBox.Show("Строка с адресом не должна быть пуста \n" + ae); } catch (Exception ex) { MessageBox.Show(ex.HelpLink); } }
[/spoiler]
Приветствуюvitos,
Спасибо за помощь, оказывается, я был оочень близок, ошибся в скобках {}
Может, вы ещё подскажите как в сообщение прикрепить несколько файлов для отправки? страницей ранее я писал вопрос.
void button1_Click(object sender, EventArgs e)
{
string fromUser = richTextBox1.Text; // Тут пишем комментарий пользователю
string uemail = textBox1.Text;
string upassword = textBox2.Text;
try
{
MailAddress from = new MailAddress(uemail);
MailAddress to = new MailAddress("test@gmail.com");
MailMessage message = new MailMessage(from, to)
{
Subject = "Заголовок письма",
Body = $"{Environment.NewLine}{fromUser}"
};
SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587)
{
Credentials = new NetworkCredential(uemail, upassword),
EnableSsl = true
};
```foreach (string item in label2.Text.Split('\n'))
{
message.Attachments.Add(new Attachment(item));
}```
smtp.Send(message); // Отправляем письмо
MessageBox.Show("Сообщение успешно отправлено. Спасибо!");
Close();
}
catch (FormatException)
{
MessageBox.Show("Неверный формат электронной почты. Почта должна иметь окончания - @gmail/yandex/mail/bk/list и другие");
textBox1.Clear();
}
catch (ArgumentException ae)
{
MessageBox.Show("Строка с адресом не должна быть пуста \n" + ae);
}
catch (Exception ex)
{
MessageBox.Show(ex.HelpLink);
}
}
Цитата: vitos от 09.04.2023, 07:35Цитата: Aleksey от 05.04.2023, 13:54Приветствуюvitos,
Спасибо за помощь, оказывается, я был оочень близок, ошибся в скобках {}Может, вы ещё подскажите как в сообщение прикрепить несколько файлов для отправки? страницей ранее я писал вопрос.
[spoiler title="Код"][/spoiler][spoiler title=""]
[/spoiler]
Цитата: Aleksey от 05.04.2023, 13:54Приветствуюvitos,
Спасибо за помощь, оказывается, я был оочень близок, ошибся в скобках {}Может, вы ещё подскажите как в сообщение прикрепить несколько файлов для отправки? страницей ранее я писал вопрос.
Код
Спойлер
Цитата: Aleksey от 10.04.2023, 11:50vitos, приветствую
В моём коде, закидываются фалы через drag and drop, через FileDialog не делал, хочется чтоб работало drag and drop-ом.
Делаю, всё правильно вроде, но несколько файлов не хочет отправлять, может нужно где включить Multiselect в drag and drop.
Вот мой исходник
vitos, приветствую
В моём коде, закидываются фалы через drag and drop, через FileDialog не делал, хочется чтоб работало drag and drop-ом.
Делаю, всё правильно вроде, но несколько файлов не хочет отправлять, может нужно где включить Multiselect в drag and drop.
Вот мой исходник
Цитата: Adler от 10.04.2023, 12:07Добрый день.
Пока не разбирался в вашем вопросе, но заметил другой момент.
ИспользуяrequireAdministratorв манифесте и стандартныйDrag-and-dropон вообще не будет работать у пользователей со включенным UAC.
Вы уверены что программе нужны права администратора? Если да, тоDrag-and-dropнужно реализовывать так, либо добавлять возможность выбора файлов через OpenFileDialog, как это сделано, например, в твикере.
Добрый день.
Пока не разбирался в вашем вопросе, но заметил другой момент.
Используя СкопированоrequireAdministrator в манифесте и стандартный СкопированоDrag-and-drop он вообще не будет работать у пользователей со включенным UAC.
Вы уверены что программе нужны права администратора? Если да, то СкопированоDrag-and-drop нужно реализовывать так, либо добавлять возможность выбора файлов через OpenFileDialog, как это сделано, например, в твикере.
Цитата: Aleksey от 10.04.2023, 13:17Приветствую Adler,
Не думал, что праваrequireAdministratorмогут влиять наDrag-and-drop, сейчас буду менять обратно наasInvoker.
Просто когда-то сделал права администратора в программе и потом в этом же проекте, делаю другой.
Если я правильно понимаю, нужно просто вернутьasInvokerи сохранить проект, или еще что-то менять ?
Приветствую Adler,
Не думал, что права СкопированоrequireAdministrator могут влиять на СкопированоDrag-and-drop, сейчас буду менять обратно на СкопированоasInvoker.
Просто когда-то сделал права администратора в программе и потом в этом же проекте, делаю другой.
Если я правильно понимаю, нужно просто вернуть СкопированоasInvoker и сохранить проект, или еще что-то менять ?
Цитата: Aleksey от 10.04.2023, 13:37Удалил из обозревателя решений, файл с манифестом, сохранил по новой, пересобрал решение и так же, один файл отправляет, несколько файлов нет.😔
Как я увидел в примере от vitos, он в OpenFileDialog включаетMultiselect.
Может как-то нужно в методеDrag-and-dropтоже включить подобное? 🙏
Удалил из обозревателя решений, файл с манифестом, сохранил по новой, пересобрал решение и так же, один файл отправляет, несколько файлов нет.😔
Как я увидел в примере от vitos, он в OpenFileDialog включает СкопированоMultiselect .
Может как-то нужно в методе СкопированоDrag-and-drop тоже включить подобное? 🙏
Цитата: Adler от 10.04.2023, 13:57Ну
requireAdministratorникакого отношения к вашей проблеме не имел. Я написал в общем, что при таком раскладе с включенным UAC будут проблемы (Drag-and-drop не работал бы вообще).
При Drag-and-drop и так "перетягиваются" все имена файлов с путями, смысл лишь в том, как вы это потом обрабатываете. Покопаться детальнее в вашем исходнике пока не было времени.P.S.
void panel1_DragDrop(object sender, DragEventArgs e) { label1.Text = ""; List<string> paths = new List<string>(); foreach (string obj in (string[])e.Data.GetData(DataFormats.FileDrop)) if (Directory.Exists(obj)) paths.AddRange(Directory.GetFiles(obj, "*.*", SearchOption.AllDirectories)); else paths.Add(obj); label2.Text = string.Join("\r\n", paths); }Вроде все верно.
А какие именно файлы не добавляются, какие-то конкретно или случайным образом? Желательно видео.
Ну СкопированоrequireAdministrator никакого отношения к вашей проблеме не имел. Я написал в общем, что при таком раскладе с включенным UAC будут проблемы (Drag-and-drop не работал бы вообще).
При Drag-and-drop и так "перетягиваются" все имена файлов с путями, смысл лишь в том, как вы это потом обрабатываете. Покопаться детальнее в вашем исходнике пока не было времени.
P.S.
void panel1_DragDrop(object sender, DragEventArgs e)
{
label1.Text = "";
List<string> paths = new List<string>();
foreach (string obj in (string[])e.Data.GetData(DataFormats.FileDrop))
if (Directory.Exists(obj))
paths.AddRange(Directory.GetFiles(obj, "*.*", SearchOption.AllDirectories));
else
paths.Add(obj);
label2.Text = string.Join("\r\n", paths);
}
Вроде все верно.
А какие именно файлы не добавляются, какие-то конкретно или случайным образом? Желательно видео.
Цитата: Aleksey от 10.04.2023, 16:20Любые файлы кидаю
Drag-and-dropв моём случае, одну картинкуjpgи один файл текстовыйtxt? пробовал разные, и папкой тоже.
Вот видео
Любые файлы кидаю СкопированоDrag-and-drop в моём случае, одну картинку Скопированоjpg и один файл текстовый Скопированоtxt? пробовал разные, и папкой тоже.
Вот видео
Цитата: Adler от 10.04.2023, 16:31Добрый день.
А при чем тут Drag-and-drop? Через него передаются только пути к файлам и по видео явно видно, что это работает. Вопрос в том, как вы потом этим списком пользуетесь.
А проблема у вас тут:foreach (string item in label2.Text.Split('\r', '\n')) { Attachment attachment = new Attachment(item); message.Attachments.Add(attachment); }Смотрите что у вас возвращает
label2.Text.Split('\r', '\n'). Вообще оно как-то на вскидку не правильно у вас.
По идее должно быть такlabel2.Text.Split(new char[] {'\r', '\n'}, StringSplitOptions.RemoveEmptyEntries)
или
label2.Text.Split(new string[] {"\r\n"}, StringSplitOptions.RemoveEmptyEntries)
Добрый день.
А при чем тут Drag-and-drop? Через него передаются только пути к файлам и по видео явно видно, что это работает. Вопрос в том, как вы потом этим списком пользуетесь.
А проблема у вас тут:
foreach (string item in label2.Text.Split('\r', '\n'))
{
Attachment attachment = new Attachment(item);
message.Attachments.Add(attachment);
}
Смотрите что у вас возвращает Скопированоlabel2.Text.Split('\r', '\n'). Вообще оно как-то на вскидку не правильно у вас.
По идее должно быть так Скопированоlabel2.Text.Split(new char[] {'\r', '\n'}, StringSplitOptions.RemoveEmptyEntries)
или
Скопированоlabel2.Text.Split(new string[] {"\r\n"}, StringSplitOptions.RemoveEmptyEntries)
Цитата: Aleksey от 10.04.2023, 16:51Adler, большое спасибо,
Заработало, ураааа.label2.Text.Split(new char[] {'\r', '\n'}, StringSplitOptions.RemoveEmptyEntries)
А можете немного расшифровать?
Почему мы добавляем новыйnew char[]массив символов?
Сейчас отправляет, текстовые файлы и фотки, но например закинул файлы txt / jpeg / exe (программу), и файл exe не хочет отправлять, где указать, что бы любой файл который кинуть, такой и отправлялось?
Adler, большое спасибо,
Заработало, ураааа. Скопированоlabel2.Text.Split(new char[] {'\r', '\n'}, StringSplitOptions.RemoveEmptyEntries)
А можете немного расшифровать?
Почему мы добавляем новый Скопированоnew char[] массив символов?
Сейчас отправляет, текстовые файлы и фотки, но например закинул файлы txt / jpeg / exe (программу), и файл exe не хочет отправлять, где указать, что бы любой файл который кинуть, такой и отправлялось?
Цитата: Adler от 10.04.2023, 18:33Читайте String.Split()
Отправлять .exe запрещено обычно почтовыми сервисами.
Читайте String.Split()
Цитата: vitos от 10.04.2023, 19:37А можете немного расшифровать?
Почему мы добавляем новыйnew char[]массив символов?Метод Split() принимает массив символов, по которым нужно разбить строку. Для создания массива символов мы используем синтаксис "new char[] {...}", где в фигурных скобках перечисляем символы, по которым необходимо производить разбиение. В данном случае мы используем '\r' и '\n' - символы переноса каретки и перевода строки, которые являются стандартными символами разделения строк в текстовых файлах и сообщениях.
Использование нового массива символов позволяет явно указать, по каким символам нужно производить разбиение строки. Если мы не зададим массив символов, метод Split() будет использовать символы по умолчанию, которые могут не соответствовать требованиям нашей задачи.
А можете немного расшифровать?
Почему мы добавляем новыйСкопированоnew char[]массив символов?
Метод Split() принимает массив символов, по которым нужно разбить строку. Для создания массива символов мы используем синтаксис "new char[] {...}", где в фигурных скобках перечисляем символы, по которым необходимо производить разбиение. В данном случае мы используем '\r' и '\n' - символы переноса каретки и перевода строки, которые являются стандартными символами разделения строк в текстовых файлах и сообщениях.
Использование нового массива символов позволяет явно указать, по каким символам нужно производить разбиение строки. Если мы не зададим массив символов, метод Split() будет использовать символы по умолчанию, которые могут не соответствовать требованиям нашей задачи.

[/spoiler]