Ответы пользователя по тегу C#
  • Почему не выполняется InitializeComponent?

    tomnolane
    @tomnolane
    профессиональный разработчик
    тут походу содержится ваш ответ (в самом внизу)
    Ответ написан
    1 комментарий
  • Если я пишу код на основе других, это плохо?

    tomnolane
    @tomnolane
    профессиональный разработчик
    90% так и надо делать!
    1 правило хакера (точнее компьютерщика кодера, программиста) - не создавать велосипед, а использовать готовое.
    Если для повышения скила - то лучше конечно самим придумать/разработать/написать.
    Если для всего остального - чем быстрее напишите (особенно с учётом/доработками вашего проекта) - тем лучше для всех. Останется время пиво попить и футбол посмотреть) или с семьёй побыть рядом.

    п.с. для повышения скила можно и тостер использовать в частности - пытаясь отвечать/решать вопросы +
    попробовать в чужом коде сделать рефакторинг +
    когда столкнётесь с тем, что даже примерно аналога нету - конечно придётся самим решать, НО, вы же не просто ctrl+c ctrl+v делаете, а подгоняете код под ваши нужды и хоть немного но разбираетесь в том, что он делаете (т.е. вы увеличиваете скилл). И лучше за n-промежуток времени столкнуться 1-2 раза, когда сами ручками и головой будете решать ТАКОЕ, чем на каждый чих - тратить время

    Если я пишу код на основе других, это плохо?

    в 90% случаев - НЕТ

    п.с.с.
    умение найти чужой код (понять его), который будет работать + его доработать(встроить) - тоже, очень и очень важное умение!

    03aee4062f1347ed96f49f044ebe25b3.PNG
    Ответ написан
    2 комментария
  • Отправка письма на email.?

    tomnolane
    @tomnolane
    профессиональный разработчик
    вы уверены, что:
    1) указали верный порт smtp принимающей(к какой подключаетесь) стороны? (точно 587 ??? не всегда используется 587 для smtp)
    2) указали верный адрес почты?
    3) верный логин и пароль?

    вот рабочий код:
    class Program
        {
            static void Main(string[] args)
            {
                 
                // отправитель - устанавливаем адрес и отображаемое в письме имя
                MailAddress from = new MailAddress("somemail@gmail.com", "Tom");
                // кому отправляем
                MailAddress to = new MailAddress("somemail@yandex.ru");
                // создаем объект сообщения
                MailMessage m = new MailMessage(from, to);
                // тема письма
                m.Subject = "Тест";
                // текст письма
                m.Body = "<h2>Письмо-тест работы smtp-клиента</h2>";
                // письмо представляет код html
                m.IsBodyHtml = true;
                // адрес smtp-сервера и порт, с которого будем отправлять письмо
                SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587);
                // логин и пароль
                smtp.Credentials = new NetworkCredential("somemail@gmail.com", "mypassword");
                smtp.EnableSsl = true;
                smtp.Send(m);
                Console.Read();
            }
        }


    вот асинхронный код:
    class Program
        {
            static void Main(string[] args)
            {
     
                SendEmailAsync().GetAwaiter();
                Console.Read();
            }
     
            private static async Task SendEmailAsync()
            {
                MailAddress from = new MailAddress("somemail@gmail.com", "Tom");
                MailAddress to = new MailAddress("somemail@yandex.ru");
                MailMessage m = new MailMessage(from, to);
                m.Subject = "Тест";
                m.Body = "Письмо-тест 2 работы smtp-клиента";
                SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587);
                smtp.Credentials = new NetworkCredential("somemail@gmail.com", "mypassword");
                smtp.EnableSsl = true;
                await smtp.SendMailAsync(m);
                Console.WriteLine("Письмо отправлено");
            }
        }

    если через это не отправится - значит проблемы с указанными данными: порт, емеил, логи и пароль...
    Ответ написан
    1 комментарий
  • Что такое методы?

    tomnolane
    @tomnolane
    профессиональный разработчик
    это "штука" позволяющая внутри себя описать логику, для выполнения какого-либо действия:
    например вывести надпись "Hello World" или подключиться к сайту или всё что угодно (и что возможно).
    Т.е. ЭТО нужно для того, чтобы вы не городили всё и вместе (перемешивали логику, под логику и т.д.) а как-то структурировали все вещи для работы, чтобы "механизм" работы был отдельно, "внешняя оболочка" отдельно... проверка каких-то вещей отдельно... т.е. если абстрагироваться на тему автомобиля: чтобы двигатель и детали к нему были в одном месте, салон и обивка в другом, каркас в третьем... а не вперемешку, где вы ставите фару, тут же пытаетесь подключить провод к аккумулятору, но его ещё нет - занимаетесь аккумулятором, потом двигателем, потом лобовым стеклом и т.д.

    метод выглядит так:
    [модификатор] возвращаемый_тип ИмяМетода([параметр])
    {
    //тело метода
    }

    модификатор - private, public, protected, internal, protected internal (подробнее
    возвращаемый_тип: void либо (например) string, string[], int, float, double либо свои какие-то вещи Personal, Car подробнее
    ИмяМетода - любое (лишь бы не начиналось с цифры, не использовалось "зарезервированное слово" - например int, string, и т.д. и написанное латиницей)
    тело метода - непосредственно код в котором описывается логика. Например:
    Console.WriteLine("Hello World!");
    если возвращаемый_тип void: то метод выполняется без возврата результата. т.е. выше код - он говорит: в консоле напиши мне слово Hello World!
    если возвращаемый тип не void (а любой другой), то метод значит что-то возвращает (результат, причем он должен быть таким же, как и сам возвращаемый_тип) т.е. если метод принимает строку (string) то он и должен её вернуть. Пример:
    public string Hello()
    {
       string text = "say Hello!";
       return text ; //return всегда в самом конце логики
    }

    и вызов метода:
    string my_new_text = Hello();

    также в метод можно передавать параметры. Лучше посмотреть на примере тут например
    п.с. параметры бывают и пустыми (т.е. их не обязательно вставлять/использовать)
    п.с.с. переменные созданные/объявленные внутри метода - доступны только в рамках(внутри) этого метода
    Ответ написан
    1 комментарий
  • Как в c# в TextBox вывести текст с параметрами {0}?

    tomnolane
    @tomnolane
    профессиональный разработчик
    доп.
    в c# (версии 6) есть такая возможность (чтобы не цифры использовать):
    string bla = "первое слово";
    string bla2 = "второе слово";
    textBox1.Text = string.Format($"({bla}, {bla2})"); //знак $ нужен для того, чтобы сказать, что тут именованные переменные нужно брать
    Ответ написан
    Комментировать
  • Найти сумму элементов расположенных между 1 и 2 отрицательными элементами?

    tomnolane
    @tomnolane
    профессиональный разработчик
    глаза разбегаются и появляются много слов, начинающих с "почему?" и "зачем это..."
    я опущу комментарии некоторые и просто дам вам очень простой способ, как через while
    Найти сумму элементов расположенных между 1 и 2 отрицательными элементами

    //допустим, в ниже переменных вы тем или иным способом уже получили какие-то данные
     double[] val1 = {-13.2, -14.8, 23, 0, -2.1, -6};
                double[] val2 = { -18.8, -11.2, 13, 0, -4.5, -2 };
                double sum = 0;
                int temp = 0;
                int temp2 = 1;
    
                //между массивами c одинаковым индексом
                while (sum == 0)
                {
                    if (val1[temp] < 0 && val2[temp] < 0)
                    {
                        sum = val1[temp] + val2[temp];
                    }
                    temp++;
                }
                Console.WriteLine("Сумма: " + sum);
    
                sum = 0; temp = 0;
                //между массивами c разным индексом
                while (sum == 0)
                {
                    if (val1[temp] < 0)
                    {
                        sum += val1[temp];
                        bool yeap = false;
                        while (yeap == false)
                        {
                            if (val2[temp2] < 0) { sum += val2[temp2]; break; }
                            temp2++; 
                        }
                        break;
                       
                    }
                    temp++;
                }
                Console.WriteLine("Сумма: " + sum);
    
    
                //1) если даны два массива с перемешанными данными и нужно найти
                //у каждого массива свои отрицательные числа и сложить (1 и 2-ой)
                sum = 0; temp = 0; temp2 = 0;
                double[] val3 = { -13.2, -14.8, -23, 0, -2.1, -6 };
                double[] val4 = { 2, -11.2, 13, 10, -4.5, 5 }; 
                
                //для 1 массива
                while (temp2 < 2)
                {
                    if (val3[temp] < 0)
                    {
                        sum += val3[temp];
                       temp2++;
                    }
                    temp++; 
                }
                Console.WriteLine("Сумма первых двух отрицательных чисел у массива val3: " + sum);
    
                sum = 0; temp = 0; temp2 = 0;
                //для 2 массива (аналогично)
                while (temp2 < 2)
                {
                    if (val4[temp] < 0)
                    {
                        sum += val4[temp];
                        temp2++;
                    }
                    temp++;
                }
                Console.WriteLine("Сумма первых двух отрицательных чисел у массива val4: " + sum);
    
                //2) если даны два массива с перемешанными данными и нужно найти
                //1 отрицательное число у первого массива со вторым отрицательным числом у второго массива
                sum = 0; temp = 0; temp2 = 0;
                int temp3 = 0;
                while (temp2 < 1 || temp3 < 2)
                {
                    if (val3[temp] < 0 && temp2 == 0)
                    {
                        sum += val3[temp];
                        temp2++;
                    }
    
                    if (val4[temp] < 0 && temp3 < 2)
                    {
                        if(temp3 == 1) { sum += val4[temp]; }
                        temp3++;
                    }
    
                    temp++;
                }
                Console.WriteLine("Сумма первых двух отрицательных чисел у массивов val3(1 отрицательное) и у val4(2 отрицательное): " + sum);


    п.с. рекомендую поощрять людей, которые вам помогают (судя по вашему "портфолио" - вы не особо используете кнопки "отметить решением" и "нравится", а ведь даже кошке доброе слово приятно)
    Ответ написан
    Комментировать
  • Где найти примеры парсеров данных на C#?

    tomnolane
    @tomnolane
    профессиональный разработчик
    Ответ написан
    Комментировать
  • Как на сайте имитировать щелчёк мыши по кнопке, а после этого получить новуй страницу и записать её html в переменную?

    tomnolane
    @tomnolane
    профессиональный разработчик
    сразу быстро не ответишь.. есть несколько вариантов и вам рекомендую начать с самого простого:
    посмотреть какие запросы отправляются при нажатии на кнопку и этот запрос воссоздать через HttpWebRequest и HttpWebResponse:

    string urlAddress = "http://google.com";
    
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlAddress);
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    
    if (response.StatusCode == HttpStatusCode.OK)
    {
      Stream receiveStream = response.GetResponseStream();
      StreamReader readStream = null;
    
      if (response.CharacterSet == null)
      {
         readStream = new StreamReader(receiveStream);
      }
      else
      {
         readStream = new StreamReader(receiveStream, Encoding.GetEncoding(response.CharacterSet));
      }
    
      string data = readStream.ReadToEnd();
    
      response.Close();
      readStream.Close();
    }


    или так:
    using System.Net;
    
    using (WebClient client = new WebClient())
    {
        client .QueryString.Add("ключ", "значение"); //для get
        string htmlCode = client.DownloadString("http://somesite.com/index.html");
    }
    
    //post запрос:
    string url = "http://site.com/";
    
                using (var webClient = new WebClient())
                {
                    // Создаём коллекцию параметров
                    var pars = new NameValueCollection();
    
                    // Добавляем необходимые параметры в виде пар ключ, значение
                    pars.Add("ключ", "значение");
    
                    // Посылаем параметры на сервер
                    // Может быть ответ в виде массива байт
                    var response = webClient.UploadValues(url, pars); 
                }


    если не удастся так сделать, то выход через COM библиотеку MSHTML (для этого добавьте её "references" -> "COM" -> «Microsoft HTML object library»
    далее using mshtml;
    тут пример использования

    где полученный html вы передаёте в
    HTMLDocument doc = new HTMLDocument();
                    IHTMLDocument2 doc2 = (IHTMLDocument2)doc;
                    doc2.clear();
                    doc2.write(//тут html-код (string));
     
                    IHTMLDocument3 doc3 = (IHTMLDocument3)doc2;
                    IHTMLElement btns = doc3.getElementById("YouId or ne YouId");

    далее находите кнопку:
    IHTMLElementCollection buttons = btns.all;
     
                    foreach (IHTMLElement element in buttons )
                    { 
                            element.click(); 
                     }


    далее опять парсим страницу.
    (п.с.с. примерно так)

    можно через webbrowser выполнить javascript
    тык и тык
    Ответ написан
  • Правильно ли я понял, что если осилить C#, то..?

    tomnolane
    @tomnolane
    профессиональный разработчик
    1. Можно будет писать игры (Unity)?
    2. Создавать веб-сайты (asp.net)? linux + nginx + mono сойдёт для продакшена?
    3. Создавать десктоп приложения?
    4. И мобильные приложения (Xamarin)?


    0. в целом да (возможно доп. понадобятся python и unity)
    1.
    Создавать веб-сайты (asp.net)
    да.
    linux + nginx + mono сойдёт для продакшена
    не уверен
    2. Да, более чем. Единственное - нужно будет определиться, для каких ОС приложения. Т.е. если для XP то создавать (и использовать С#4 или 5 точно не помню, но уж точно не c#7) и .Net Framework 4.0. Если для 7-ки и выше, то .Net Framework 4.5 (желательно не выше) и C#5. Если для 8-ки и выше, то .Net Framework 4.6 и выше и С#7
    3. Опять же в принципе да, но не всё легко и гладко будет (у xamarin свои заморочки не связанные с С#)

    вот доп. инфа
    Ответ написан
    Комментировать
  • Есть ли функции с управляемым контекстом?

    tomnolane
    @tomnolane
    профессиональный разработчик
    *тут взрыв мозга*
    можно короче, и по сути - без размышлений?
    п.с. лучше покажите код которые сейчас, и что хотите в итоге - хотя бы словами в самом коде, если хотите чтобы вам помогли

    upd

    чем код "проще" && меньше && без заморочек, тем он = лучше.
    Как вы описали в комментарии - при нажатии на какую-нибудь клавишу с клавиатуры - меняется значение key очень удобно и прагматичнее. В любом случае, вам нужно задавать || указывать условия для key ... и способов много, как можно реализовать. Хоть используя рандом.
    Не совсем понятно по поводу "смысловой нагрузки" ключа... в коде должны быть только те вещи, которые используются, либо "понапихать" всякого, чтобы для ревёрсиров было тяжелее его понять. Key (если нужен) можно задавать хоть через switch или по timer'у или через if и по сути, это не так важно, нежели действительно его потребность.

    я бы сделал (для себя) примерно так:
    if (Input.GetKeyDown (KeyCode)) {
    KeyFlag=true;
    }
    else if (Input.GetKeyUp (KeyCode)) {
    KeyFlag=false;
    //или через switch
    
    if(KeyFlag==false) {
     // тут код, когда <b>key</b> = false
    }
    else {
      // тут код, когда <b>key</b> = true
    }

    просто, не заморочено и легко понять/отлаживать.
    Ответ написан
    3 комментария
  • Путь имеет недопустимую форму?

    tomnolane
    @tomnolane
    профессиональный разработчик
    вот корректный шаблон, который работает
    Image image1 = Image.FromFile("c:\\FakePhoto1.jpg");

    проверьте правильность ABS_FromFile() - возможно некорректно указан

    п.с. допустимые форматы: BMP, GIF, JPEG, PNG, TIFF
    п.с.с. 99,9% вы указали не полный(либо не правильный) путь к файлу, либо сокращённый путь ("FakePhoto1.jpg" к примеру). Если последнее, то он пытается найти в рабочем каталоге процесса.. (спасибо Толстый Лорри )
    Ответ написан
  • Чтобы отнималась цифра?

    tomnolane
    @tomnolane
    профессиональный разработчик
    float lyboe_4islo = (float)Console.ReadLine(); //ввод, правда без проверки - число или нет
    
    float money = 9447.50f - lyboe_4islo;
    switch (RusOperator)
    {
    case "МТС":
    {
    Console.WriteLine("Ваш оператор МТС");
    Console.Write("Сумма пополнение счета телефона:  " + money);
    Console.ReadLine();
    break;
    }
    case "Теле2":
    {
    Console.WriteLine("Ваш оператор Теле2");
    Console.Write("Сумма пополнение счета телефона:  " + money);
    break;
    }
    case "Билайн":
    {
    Console.WriteLine("Ваш оператор Билайн");
    Console.Write("Сумма пополнение счета телефона:  " + money);
    break;
    }
    case "Мегафон":
    {
    Console.WriteLine("Ваш оператор Мегафон");
    Console.Write("Сумма пополнение счета телефона:  " + money);
    break;
    }
    }


    проверку можно сделать так:
    bool proverka = false;
    float lyboe_4islo;
    while(proverka == false)
    {
       try{
    lyboe_4islo = (float)Console.ReadLine();
    if(lyboe_4islo .GetType() == "System.Single" && lyboe_4islo != null) //System.Single == alias float
    {
    proverka = true;
    }
    }
    catch{
    //заглушка
    }
    
    }


    upd
    из комментариев проверка от Станислав Силин
    float lyboe_4islo;
    while (!float.TryParse(Console.ReadLine(), out  lyboe_4islo));
    Ответ написан
  • Реализация CR4 на C#?

    tomnolane
    @tomnolane
    профессиональный разработчик
    посмотрите на строчки.... у себя в коде...
    byte[] ByteCrypt = ASCIIEncoding

    string strout = UTF8Encoding

    byte[] pass = ASCIIEncoding.Unicode.GetBytes(TBpass.Text);
    RC4 encoder = new RC4(pass);
    string textCrypt = TBtext.Text;
    byte[] ByteCrypt = ASCIIEncoding.Unicode.GetBytes(textCrypt);
    byte[] result = encoder.Encode(ByteCrypt, ByteCrypt.Length);
    string strout = ASCIIEncoding.Unicode.GetString(result, 0, result.Length); // UTF8Encoding поменять на ASCIIEncoding
    TBtext.Text = strout;


    п.с. не тестил... но по нему у вас разная кодировка...

    п.с.с. в вашей ссылке на сайт(статью) кусок кода:
    byte[] key = ASCIIEncoding.ASCII.GetBytes("Key");
    
    RC4 encoder = new RC4(key);
    string testString = "Plaintext";
    byte[] testBytes = ASCIIEncoding.ASCII.GetBytes(testString);
    byte[] result = encoder.Encode(testBytes, testBytes.Length);
    
    RC4 decoder = new RC4(key);
    byte[] decryptedBytes = decoder.Decode(result, result.Length);
    string decryptedString = ASCIIEncoding.ASCII.GetString(decryptedBytes);


    нигде не смешиваются кодировки ASCIIEncoding и UTF8Encoding (а у вас в коде смешиваются)
    Ответ написан
    Комментировать
  • Разные иконки для самой программы и в панели задач на C# !?

    tomnolane
    @tomnolane
    профессиональный разработчик
    была аналогичная проблема и суть её в том (если у вас ОС WINDOWS), что используется кеширование папок, эскизов со всеми значками и т.д. и используются старые... точно не помню как именно очищал (то ли через программу CCleaner) то ли вручную...

    ОЧИЩЕНИЕ КЭШ ЭСКИЗОВ

    Делается это при помощи программы «Очистка диска». Идем в «Мой компьютер», правой кнопкой мыши кликаем по «Локальный диск С». В меню выбираем «Свойства». Открываем вкладку «Общие»

    Далее выбираем из списка нужный нам диск, в нашем случае это «С».
    В открывшемся окне помимо необходимого можно выбрать и дополнительные параметры очистки. Затем нажимаем «ОК» и «Удалить файлы».
    При желании кеширование эскизов можно вообще отключить. Делается это в редакторе локальной групповой политики операционной системы (Win+R вводим команду gpedit.msc и «ОК»).


    upd

    после очистки - значки (после перекомпиляции) обновились
    Ответ написан
    Комментировать
  • Почему ValueTuple не работает из коробки?

    tomnolane
    @tomnolane
    профессиональный разработчик
    может поможет....

    тут тоже самое пишут
    Ответ написан
    Комментировать
  • Почему не работают кортежи?

    tomnolane
    @tomnolane
    профессиональный разработчик
    обновите/скачайте .Net Framework
    в VS2015 при выходе (и до сих пор) были/есть баги разные. И в VS2017 с вероятностью 99,9% они тоже есть.
    Ответ написан
    Комментировать
  • Почему вознекает ошибка "System.ArgumentOutOfRangeException"?

    tomnolane
    @tomnolane
    профессиональный разработчик
    10a6daa339194b02b5cc5f25b61477ab.JPGb8a21c3f74fd410ba56e545296ecbf57.JPGМетод Math.Round
    Округляет значение до ближайшего целого или указанного количества десятичных знаков.

    Пример Math.Round (Double, Int32) :
    Math.Round(3.44, 1); //3.4
    Math.Round(3.46, 1); //3.5


    возможно у вас получаемое число (которое "с" при делении) - слишком большое
    а также значение k равно 51 (а должно быть от 0 до 15) (в комментарии верно подмечено)

    п.с. и лучше выкладывать код - а не картинку - очень мелко даже на 15-ти дюймовом дисплее
    Ответ написан
  • Как вызвать из одного .cs файла другой?

    tomnolane
    @tomnolane
    профессиональный разработчик
    не совсем понятен вопрос... точнее
    как запустить сначала cs файл с меню, а из него через switch вызвать второй файл?


    Есть (мне известных) 2 способа как "что-то" другое использовать:
    1) используя "Рефлексию", где берётся либо .dll (динамическая библиотека) либо .exe (исполняющий файл) который подключается к вашему проекту через Рефлексию и вы можете получить доступ к содержимому.
    2) оба .cs фала находятся в одном солюшене (проекте) и доступ друг к другу осуществляются через маркеры доступа "public, internal, и т.д.". Если разный namespace - подключаем через using *тут имя namespace другого .cs фала" и можем использовать (к примеру public) классы, методы, свойства "другого .cs файла"

    My_Main.cs
    using System; 
    using My_Second;
    
    namespace My_Main
    {
        class Program
        {
            static void Main(string[] args)
            { 
                Console.BackgroundColor = ConsoleColor.Green;
                Console.ForegroundColor = ConsoleColor.Black;
                Console.WriteLine("********************");
                Console.WriteLine("**** Мой проект ****");
                Console.WriteLine("********************"); 
                Console.BackgroundColor = ConsoleColor.Black;
                Console.ForegroundColor = ConsoleColor.Green; 
    
                //создаём экземпляр класса KK из My_Second.cs
               KK blabla = new KK();
            
                Console.WriteLine(blabla.Hello_Wolrd()); //вызываем метод у My_Second.cs 
    
                // Ожидание нажатия любой клавиши  перед завершением работы
                Console.ReadLine();
            }
        }
    }


    My_Second.cs
    using System; 
    namespace My_Second
    {
    public class KK
    {
    public string Hello_Wolrd()
    {
    return "Hello World";
    }
    }
         
    }
    Ответ написан
    Комментировать
  • Как добавить в коллекцию типа определенного класса из консоли?

    tomnolane
    @tomnolane
    профессиональный разработчик
    class Program
    {
        static void Main()
        {
    
            List<string> list = new List<string>();
    
            for (int i = 1; i < 6; i++)
            {
                Console.WriteLine("Введите " + i + " число:"); 
                list.Add(Console.ReadLine()); // ввод тут
            }
    
        }
    }


    А если тип LIst выступает класс Phone? Как тогда добавить через Console.Readline()?


    using System;
    using System.Collections.Generic; 
    
    namespace test
    {
        class Program
        {
            static void Main(string[] args)
            {
                List<Phone> list = new List<Phone>();
    
                for(int i = 1; i < 6; i++)
                {
                    Console.WriteLine("Введите " + i + " имя телефона:"); 
                    list.Add(new Phone() { phone_name = Console.ReadLine() });
                }
            }
        }
    
        public class Phone
        {
            private string _phone_name = string.Empty;
            public string phone_name { get { return _phone_name; } set { _phone_name = value; } }
        }
    }
    Ответ написан
    2 комментария