Вы должны войти, чтобы создавать сообщения и темы.

Пробую изучать C# нужна подсказка или помощ

1◄Страница 6 из 7►

Да, нужно было навсегда, но при этом что бы в правом углу окно выскакивало.  С той программой я закончил, вроде нормально работает. Теперь новое делаю всякое, вот например, есть такой вопрос.

Так же есть ещё вопрос, не могу разобраться как назначить на один контрол несколько действий, вот пример:

код

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, 
Спасибо за помощь, оказывается, я был оочень близок, ошибся в скобках {}

Может, вы ещё подскажите как в сообщение прикрепить несколько файлов для отправки?   страницей ранее я писал вопрос.

Код

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);
        }
    }

 

Цитата: Aleksey от 05.04.2023, 13:54

Приветствуюvitos, 
Спасибо за помощь, оказывается, я был оочень близок, ошибся в скобках {}

Может, вы ещё подскажите как в сообщение прикрепить несколько файлов для отправки?   страницей ранее я писал вопрос.

Код

Спойлер

vitos, приветствую
В моём коде, закидываются фалы через drag and drop, через FileDialog  не  делал, хочется чтоб работало drag and drop-ом.
Делаю, всё правильно вроде, но несколько файлов не хочет отправлять, может нужно где включить Multiselect в drag and drop.
Вот мой исходник 

Добрый день.
Пока не разбирался в вашем вопросе, но заметил другой момент.
Используя СкопированоrequireAdministrator в манифесте и стандартный СкопированоDrag-and-drop он вообще не будет работать у пользователей со включенным UAC.
Вы уверены что программе нужны права администратора? Если да, то СкопированоDrag-and-drop нужно реализовывать так, либо добавлять возможность выбора файлов через OpenFileDialog, как это сделано, например, в твикере.

Приветствую Adler, 
Не думал, что права СкопированоrequireAdministrator могут влиять на СкопированоDrag-and-drop, сейчас буду менять обратно на СкопированоasInvoker.
Просто когда-то сделал права администратора в программе и потом в этом же проекте, делаю другой.
Если я правильно понимаю, нужно просто вернуть СкопированоasInvoker и сохранить проект, или еще что-то менять ?

Удалил из обозревателя решений, файл с манифестом, сохранил по новой, пересобрал решение и так же, один файл отправляет, несколько файлов нет.😔
Как я увидел в примере от vitos, он в OpenFileDialog включает СкопированоMultiselect  .
Может как-то нужно в методе СкопированоDrag-and-drop тоже включить подобное? 🙏

Ну Скопировано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);
        }

Вроде все верно.
А какие именно файлы не добавляются, какие-то конкретно или случайным образом? Желательно видео.

Любые файлы кидаю СкопированоDrag-and-drop в моём случае, одну картинку Скопированоjpg и один файл текстовый Скопированоtxt? пробовал разные, и папкой тоже.
Вот видео 

Добрый день.
А при чем тут 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)

Adler, большое спасибо, 
Заработало, ураааа. Скопированоlabel2.Text.Split(new char[] {'\r', '\n'}, StringSplitOptions.RemoveEmptyEntries)
А можете немного расшифровать? 
Почему мы добавляем новый Скопированоnew char[] массив символов?
Сейчас отправляет, текстовые файлы и фотки, но например закинул файлы txt / jpeg / exe (программу), и файл exe не хочет отправлять, где указать, что бы любой файл который кинуть, такой и отправлялось?

Читайте String.Split()

Отправлять .exe запрещено обычно почтовыми сервисами.
Лайкнул Aleksey
Aleksey
А можете немного расшифровать? 
Почему мы добавляем новый Скопированоnew char[] массив символов?

Метод Split() принимает массив символов, по которым нужно разбить строку. Для создания массива символов мы используем синтаксис "new char[] {...}", где в фигурных скобках перечисляем символы, по которым необходимо производить разбиение. В данном случае мы используем '\r' и '\n' - символы переноса каретки и перевода строки, которые являются стандартными символами разделения строк в текстовых файлах и сообщениях.

Использование нового массива символов позволяет явно указать, по каким символам нужно производить разбиение строки. Если мы не зададим массив символов, метод Split() будет использовать символы по умолчанию, которые могут не соответствовать требованиям нашей задачи.

Лайкнул Aleksey
Aleksey
1◄Страница 6 из 7►