Ответы пользователя по тегу C#
  • Что такое "!="?

    @cicatrix
    было бы большой ошибкой думать
    В Си-подобных языках != - это проверка неравенства. В других языках используется <>.
    Данный код вылетит с ошибкой, если в текстовые поля ввести не цифры, а буквы.
    Вместо Convert.ToInt32 нужно пользоваться int.TryParse
    Ответ написан
    Комментировать
  • Ребят, какой вид цикла лучше использовать при вводе данных?

    @cicatrix
    было бы большой ошибкой думать
    Любой конечный цикл на машинных инструкциях выглядит как проверка условия + условный переход.
    В целом, тот же goto завёрнутый в красивую обёртку.
    Так что для процессора разницы нет никакой. Она есть для того, кто будет читать/поддерживать программу, поэтому пиши код так, будто сопровождать его будет кровожадный маньяк-психопат, который знает, где ты живёшь.
    Сделай свой код понятным и читаемым.
    Ответ написан
    Комментировать
  • Как реализовать поиск в DataGrid?

    @cicatrix
    было бы большой ошибкой думать
    Если у DataGrid есть источник данных, то лучше искать по этому источнику. Если источника данных нет, то делай
    обход в цикле каждой ячейки, где искать, проверяй, встречается ли искомая комбинация в тексте каждой ячейки.
    Если нужен регистронезависимый поиск (без разницы, большими или маленькими буквами написано), то либо приводить текст каждой ячейки к верхнему/нижнему регистру при сравнении (то же самое с искомым текстом), либо регулярным выражением.
    Ответ написан
    Комментировать
  • Раскадровка изображений в C#, как сделать?

    @cicatrix
    было бы большой ошибкой думать
    А в чём сложность? Тут больше условие непонятно, а не реализация.

    В каком именно виде поступает это "дерево", как кодируется? Требуется ли сохранять порядок изображений? Что делать, если ω < ширины самого узкого изображения или такая ситуация не предусмотрена условием?
    Вот набор картинок file1.jpg, file2.jpg, file3.jpg, file4.jpg, file5.jpg.
    Как подаётся информация, что file2, file4 и file5 образовывают колонку?

    Ну и не стоит надеяться, что этот курсач здесь за вас кто-нибудь напишет. Вы пишите, что сами уже сделали и что конкретно не получается.
    Ответ написан
    Комментировать
  • Почему не меняется цвет в картинке?

    @cicatrix
    было бы большой ошибкой думать
    Во-первых, это всё будет работать жутко медленно, если картинка хоть сколько-нибудь крупного размера. Кроме того, при скролле, программа будет "подвисать".
    Во-вторых, вот здесь:
    ((Bitmap)pictureBox1.Image).SetPixel(i, j, Color.FromArgb(hScrollBar4.Value, hScrollBar1.Value, hScrollBar2.Value, hScrollBar3.Value))

    Вы меняете копию картинки, а не напрямую картинку из Picturebox. Теперь надо изменённую картинку заново назначить в Picturebox.
    Ответ написан
    Комментировать
  • C# ASP.NET. Почему не передается модель?

    @cicatrix
    было бы большой ошибкой думать
    Через веб-запрос передаётся только СТРОКА (string).
    public void Create(string title, User model)
    Что за тип User? ASP.Net знает, как десериализовать тот JSON, что вы передаёте в тип User?
    Вы передаёте строку (JSON.stringify), а хотите получить какой-то объект. Замените на:
    public void Create(string title, <b>string</b>model)

    В model прилетит строка с JSON, уже внутри контроллера парсите и создаёте нужный объект.
    Ответ написан
    Комментировать
  • Зачем в методе нужен массив и что делать что бы при вводе данных в массив не выкидывало исключение?

    @cicatrix
    было бы большой ошибкой думать
    Вы код спастили криво, по всей видимости. У вас func вложена в main. Это во-первых, а во вторых, зачем - это ведь быстрая сортировка, и да, чтобы отсортировать массив, надо ей его передать. А ввода данных в массив в вашем коде не присутствует в настоящее время.
    Ответ написан
    4 комментария
  • Как при проверке формы не перемещалась на вверх страница?

    @cicatrix
    было бы большой ошибкой думать
    Если просто тупо сделать форму, то при нажатии на кнопку типа Submit будет происходить POST запрос с соответствующей перезагрузкой страницы.
    Тут возможно несколько вариантов. Если валидацию можно безопасно сделать на клиенте, делайте на клиенте, отправляя форму программно. Либо делать AJAX запрос.
    В любом случае вместо
    <button type="submit".. >
    указывайте
    <button type="button"..>

    Дальше ловите нажатие этой кнопки и либо отправляйте данные через AJAX, либо через клиентскую валидацию решайте, отправлять форму или нет.
    Ответ написан
    Комментировать
  • Где быстро изучить основы WCF?

    @cicatrix
    было бы большой ошибкой думать
    Там, в целом, изучать особо нечего. Главное принцип понять, а дальше, если опыт есть само пойдёт.
    Вот хороший пример с калькулятором.
    Ответ написан
    Комментировать
  • Почему var привелся к int?

    @cicatrix
    было бы большой ошибкой думать
    Евгений Семашко, Это не тонкости и приколы, а часть спецификации языка.
    (Вот ссылка, если интересно).

    Если в двух словах, для каждого оператора предусмотрено несколько перегрузок, в зависимости от типа операндов. В частности, для деления (подробнее здесь) предусмотрено целочисленное деление, деление с плавающей точкой (IEEE 754) и десятичное.

    Здесь, поскольку оба операнда одного типа, применяется целочисленное деление. Чтобы использовать другую перегрузку, необходимо, чтобы хотя бы один из операндов был числом с плавающей точкой или десятичным.
    7 / 2 = 3
    7f / 2 = 3.5
    Ответ написан
    Комментировать
  • Обработка одномерных массивов, как доработать код?

    @cicatrix
    было бы большой ошибкой думать
    А зачем пилить 2 прохода? Можно сразу на этапе ввода определять, положительное или нет.
    Ну и Convert.ToDouble - плохая практика. Лучше Double.TryParse
    Console.WriteLine("Введите 10 элементов массива:");
    double[] m = new double[10];
    int lastPositive = -1;
    for (int i = 0; i < 10; ++i)
    {
        
       bool validate = false; // Флаг правильного ввода пользователя
       while (!validate)
       {
          Console.Write($"№ {i}:");
          validate = double.TryParse(Console.ReadLine(), out m[i]); // Вернёт false если пользователь ввёл фигню
       }
       if (m[i]  > 0) lastPositive = i;
    }
    if (-1 == lastPositive) Console.WriteLine("Положительных чисел не вводилось");
    else 
    Console.WriteLine($"Последнее положительное число имеет индекс {lastPotitive}");
    Ответ написан
    Комментировать
  • Как изменить позиционирование контрола при dock?

    @cicatrix
    было бы большой ошибкой думать
    При borderless окне у него клиентская часть совпадает с физическими размерами. Когда есть граница и заголовок, клиентская часть меньше. Нативными средствами .NET переопределить клиентскую часть окна, вроде бы, нельзя, но средствами Win32API можно. Попробуйте переопределить клиентскую часть окна при помощи AdjustWindowRectEx.
    Ответ написан
    Комментировать
  • Как передавать заголовки POST через HttpRequest?

    @cicatrix
    было бы большой ошибкой думать
    В двух словах, после создания запроса, надо открыть RequestStream, записать в него все POST данные и отправить на сервер.
    Вот выдернул из готового проекта отправку POST запроса:
    // в data передаются параметры POST (ключ - значение)
    // если надо загрузить файл - передаётся в file
    internal static string Post(string url, Dictionary<string, string> data, FileUploadData file = null)
            {
                string ServerResponse = null;
                HttpWebRequest wrq = (HttpWebRequest)HttpWebRequest.Create(url);
                wrq.Method = WebRequestMethods.Http.Post;
                wrq.UserAgent = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name + 
                                System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();
                wrq.Timeout = 600000;
                try
                {
                    // Это на случай использования прокси, можно выкинуть
                    if (Config.UseProxy)
                    {
                        WebProxy proxy = new WebProxy(Config.ProxyAddress, Config.ProxyPort);
                        if (Config.ProxyLogin != string.Empty || Config.ProxyPass != string.Empty)
                        {
                            proxy.Credentials = new NetworkCredential(Config.ProxyLogin, Config.ProxyPass);
                            proxy.UseDefaultCredentials = false;
                        }
                        else
                        {
                            proxy.UseDefaultCredentials = true;
                        }
                    }
    
                    if (null == file) // проверяем, надо ли загружать файл на сервер
                    {
                        wrq.ContentType = "application/x-www-form-urlencoded";
                        Stream requestStream = wrq.GetRequestStream();
                        List<string> keydata = new List<string>();
                        foreach (string key in data.Keys)
                        {
                            keydata.Add($"{HttpUtility.UrlEncode(key)}={HttpUtility.UrlEncode(data[key])}");
                        }
                        WriteToStream(requestStream, string.Join("&", keydata));
                        requestStream.Flush();
                    }
                    else
                    {
                        // Формируем multipart/form-data (отправка данных с формы)
                        string boundary = "----------" + DateTime.Now.Ticks.ToString("x");
                        wrq.ContentType = "multipart/form-data; boundary =" + boundary;
                        Stream requestStream = wrq.GetRequestStream();
                        WriteMultipartForm(requestStream, boundary, data, file);
                    }
                    // Посылаем данные на сервер и ждём ответа
                    wrq.BeginGetResponse(a =>
                    {
                        try
                        {
                            WebResponse resp = wrq.EndGetResponse(a);
                            Stream respStr = resp.GetResponseStream();
                            using (StreamReader sr = new StreamReader(respStr))
                            {
                                ServerResponse = sr.ReadToEnd();
                            } // using sr
                    } // try
                    catch (Exception ex)
                        {
                            Logger.LogError("Transport.Post", Globalizer.ID_Transport_Request_executing_error, ex);
                        } // catch
                }, null);
                }  // try
                catch(Exception ex)
                {
                    Logger.LogError("Transport.Post", Globalizer.ID_Transport_Could_not_connect_to_server, ex);
                    return null;
                }
                return ServerResponse;
            } // Post
    
    private static void WriteMultipartForm(Stream s, string boundary, Dictionary<string, string> data, FileUploadData file)
            {
                /// The first boundary
                byte[] boundarybytes = Encoding.UTF8.GetBytes("--" + boundary + "\r\n");
                /// the last boundary.
                byte[] trailer = Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n");
                /// the form data, properly formatted
                string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}";
                /// the form-data file upload, properly formatted
                string fileheaderTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\";\r\nContent-Type: {2}\r\n\r\n";
    
                /// Added to track if we need a CRLF or not.
                bool bNeedsCRLF = false;
    
                if (data != null)
                {
                    foreach (string key in data.Keys)
                    {
                        /// if we need to drop a CRLF, do that.
                        if (bNeedsCRLF)
                            WriteToStream(s, "\r\n");
    
                        /// Write the boundary.
                        WriteToStream(s, boundarybytes);
    
                        /// Write the key.
                        WriteToStream(s, string.Format(formdataTemplate, key, data[key]));
                        bNeedsCRLF = true;
                    }
                }
    
                /// If we don't have keys, we don't need a crlf.
                if (bNeedsCRLF)
                    WriteToStream(s, "\r\n");
    
                WriteToStream(s, boundarybytes);
                WriteToStream(s, string.Format(fileheaderTemplate, file.FieldName, file.Filename, file.ContentType));
                /// Write the file data to the stream.
                WriteToStream(s, file.FileData);
                WriteToStream(s, trailer);
            }
    
    private static void WriteToStream(Stream s, string txt)
            {
                byte[] bytes = Encoding.UTF8.GetBytes(txt);
                s.Write(bytes, 0, bytes.Length);
            } // WriteToStream
    Ответ написан
    Комментировать
  • C#, что не так?

    @cicatrix
    было бы большой ошибкой думать
    Приведите listen к родному типу, object индексирование не поддерживает.
    Ответ написан
    Комментировать
  • Как избавится от потери точности при ReadProcessMemory для float под c#?

    @cicatrix
    было бы большой ошибкой думать
    float - 32 бита в памяти.
    885px-Float_example.svg.png
    Ответ написан
    Комментировать
  • Как вызвать переменную в WPF?

    @cicatrix
    было бы большой ошибкой думать
    new MainWindow(), как несложно догадаться создаст НОВЫЙ экземпляр, а тебе нужен существующий.
    Либо сохраняй ссылку на главное окно, либо передавай её при создании ShopWindow.
    И static там, в общем-то не нужен.
    Ответ написан
    Комментировать
  • Как решить проблему с суммированием?

    @cicatrix
    было бы большой ошибкой думать
    if (time == 3)
                {
                    time = 0;


    Даже если до вызова time и равнялось 3, то после этого значение этой переменной стало 0, соответственно, условие больше не выполнится
    Ответ написан
    9 комментариев
  • Можете помочь убрать автообновление приложение?

    @cicatrix
    было бы большой ошибкой думать
    Посмотри, куда оно лезет и заблокируй в hosts или в файрволле, если есть.
    Ответ написан
  • Как перебирать коллекцию и присваивать значения переменной?

    @cicatrix
    было бы большой ошибкой думать
    На стороне клиента вам необходимо после нажатия клавиш инициировать Ajax запрос на сервер, потом ловить от сервера ответ, какую команду поставить в поле.
    Но каждый раз на сервер таскаться за командами как-то криво. Я бы передавал 10 последних команд вместе со страницей, а на сервер лез только если надо в более раннюю историю залезть.
    Ответ написан