Ответы пользователя по тегу C#
  • Что написать на C#?

    DmitryITWorksMakarov
    @DmitryITWorksMakarov
    Когда коту нечего делать, он "занимается гигиеной", когда программисту нечего делать - он занимается рефакторингом.
    Ответ написан
    6 комментариев
  • Как из приложения c# добавить в head html script jquery?

    DmitryITWorksMakarov
    @DmitryITWorksMakarov
    В первую очередь надо попробовать у webKitBrowser`а дернуть методы Refresh или Update, хотя скорее всего это не должно принести результата, потому что скорее всего WebKit куда-то в свой буфер рендерит и по этим методам просто обновляет экран из буфера.

    А зачем вообще нужна такая функциональность к браузере? Если на страничке используется jQuery, то и добавляй, пожалуйста, в страничке его. Если не используется, то и не нужен он. Или подразумевается еще какой-нибудь скрипт до кучи/или вместо грузить? Снифер там или что еще? =)

    По идее загрузка и отображение странички в браузере идет, если упрощенно, так: загрузка->построение DOM->рендеринг. Причем современные броузеры делают это потоково, то есть постепенно отображая загруженное, но в некоторых случаях могут и все перерендерить (например при изменении размера окна). В вашем случае нужно вклиниться где-то в процесс загрузки заголовка или добавление в DOM заголовка, но что-то я не увидел в WebKit.NET хуков/событий для такой возможности.

    Можно попробовать сделать фиктивное масштабирование или искусственно вызвать событие изменение размера окна, но это грязный хак.

    Ну а что то похожее на правду можно сделать, если реализовать некий прокси, через который направить http-трафик, на лету искать заголовок и вставлять ваш скрипт.
    Ответ написан
    4 комментария
  • Как через DragDrop передать объект по ссылке?

    DmitryITWorksMakarov
    @DmitryITWorksMakarov
    Не очень понял.
    Напрямую ссылку с объекта из процесса в процесс не передать. У процессов память разная. Процессы объекты друг друга не видят.

    Если вам нужно только состояние объекта: например, в одном процессе тем или иным способом инициализировали и передаете во второй процесс. То тут достаточно, чтобы в процессы были загружены сборки с типом вашего объекта, и через сериализацию склонировать ваш объект.

    Но поскольку вы пишите, что вам сериализация не подходит, могу предположить, что вы хотите из одного процесса обращаться к методам и свойствам объекта другого процесса, чтобы это вызывало некий отклик в первом процессе (ну допустим через события генерирующие при изменении состояния объекта). Тогда во втором процессе нужен некий прокси-объект, который, когда обращаются к его методам и свойствам, будет посредством некой системы сообщений обращаться к методам и свойствам исходного объекта. Это похоже на .NET Remoting или WCF.
    Ответ написан
    3 комментария
  • Как отсортировать datagridview?

    DmitryITWorksMakarov
    @DmitryITWorksMakarov
    Вот тут посмотрите: DataGridView.Sort

    Там указан пример реализации IComparer`а, который нужно дать методу сорт. Вам нужно изменить у класса RowComparer метод Compare. В вашей реализации сравнения двух DataGridViewRow вам нужно выделить содержимое ячейки с текстом даты, распарсить с помощью DateTime.Parse и выдать результат сравнения дат.
    Ответ написан
    Комментировать
  • Какой язык программирования изучить новичку для написания GUI приложений?

    DmitryITWorksMakarov
    @DmitryITWorksMakarov
    В свое время когда я начинал программировать с QBasic`а и TurboPascal`a, особых вариантов куда дальше развиваться не было: С++. Реальный язык для решения реальных задач.

    Для работы с GUI в Win логичным продолжением было Delphi и С++Builder. MFC от M$ был настолько корявый (по моему мнению), что даже смотреть в его сторону не хотелось.

    Затем меня надолго унесло в сторону микроконтроллеров и там С/C++ мне помог в работе наиболее полно: быстрые программы, полный контроль над памятью - то, что нужно.

    Потом, мне опять понадобился GUI. Как раз .NET и С# к этому моменту поборол свои детские болезни. С# мне показался очень цельным языком и легким в обучении. С С# я наиболее полно разобрался с ООП (в С++ я с ООП как-то плавал: не складывалась цельная картина). Сейчас C# продолжает развиваться. Это современный язык. Есть много задач, для которых он идеальный инструмент. Впрочем С++ не отстает и современные спецификации тоже включают в себя практически все новинки. Но все равно С++ сложнее: есть куча способов запнуться на ровном (как минимум с точки зрения С#) месте, муторная работа с памятью.

    Сейчас при работе .NET с С# иногда возникает необходимость работать со старыми библиотеками, написанными на С++. В .NET есть такой язык как С++/CLR, который с одной стороны умеет работать с .NET, а с другой стороны спокойно работает с "чистым" С++ и становится спасительным мостиком в таких случаях. Кроме того, пару раз мне приходилось реализовывать в С++/CLR сложные, с вычислительной точки зрения, задачи. Сейчас правда вижу, что можно тоже самое было сделать не выходя за рамки С#, но в С++ это получилось все равно сделать проще.

    В общем, в моем случае мне сильно помогло, что я начинал с С++. Но работаю я все же в основном в C#. Как бы не получилось так, что начав с С#, как с более простого, вашему знакомому будет потом сложновато в редких задачах, где понадобиться навыки работы в С++.

    Совет, наверное, стоит сделать такой: изучайте С# для GUI, попробуйте для развлечения поковыряться с микроконтроллерами: там где реально нужно будет самому на С++ писать. Можно, например, для ардуино на с++ писать: и паять не нужно ничего, и стоит недорого. Не скетчи, а именно разобраться как с С++ работать.

    А еще смотрите другие языки: JavaScript, Python, функциональное что-нибудь. Главное чтоб мозги не костенели в какой-нибудь одной парадигме, а могли смотреть на задачу максимально широко.
    Ответ написан
    Комментировать
  • Как реализовать скелетную модель?

    DmitryITWorksMakarov
    @DmitryITWorksMakarov
    Мне кажется, такого интерфейса для базового элемента достаточно:

    interface IBone 
    {
        float angle; // in radians
        float length;
    
        IEnumerable<IBone> children;
    }


    Из соображений оптимизации и исключения всяких тригонометрий можно хранить не угол и длину, а смещение по Х и смещение по Y, хотя в полярной системе координат по мне так наглядней.

    При необходимости рисования скелета делаем так:

    void DrawBone(Graphics inGraphics, PointF inPosition, IBone inBone)
    {
        var boneEnd = inPosition + new SizeF((float)(inBone.length * Math.Cos(inBone.angle)), 
                                             (float)(inBone.length * Math.Sin(inBone.angle)));
    
        inGraphics.DrawLine(Pens.Black, inPosition, boneEnd);
    
        foreach (var next in inBone.children)
        {
            DrawBone(inGraphics, boneEnd, next);
        }
    }
    Ответ написан
  • Как можно определить несколько классов с одним родителем в рамках одного типа?

    DmitryITWorksMakarov
    @DmitryITWorksMakarov
    Эм.....а почему нельзя кэшировать в "массив" типа ParentClass?
    Для каждого объекта кэша будут известны все его методы, а реализацию (или уточнение реализации) их берут на себя потомки.
    Я насколько понимаю ООП, наследование и полиморфизм для того придумано....
    Ответ написан
    2 комментария
  • Переход с C# на C++?

    DmitryITWorksMakarov
    @DmitryITWorksMakarov
    В с++ больше свободы....в нем вы можете написать наделать кучу ошибок на пустом месте.....если хорошо знать с# и следовать этому пути/стилю в с++, то в сходных задачах особой разницы нет, даже может хорошо что начали с с#....ну, возможно, подисциплинированнее нужно быть.
    Но есть задачи специфичные для с++: низкоуровневое программирование, работа с памятью, указатели. Тут другой мир совсем....
    Ответ написан
    Комментировать
  • Как удалить элемент списка в цикле (C#)?

    DmitryITWorksMakarov
    @DmitryITWorksMakarov
    foreach тут в любом случае не подходит

    посмотрите вот тут например.....несколько реализаций задачи подходящей под ваше описание (правда не все корректные =)
    Ответ написан
    1 комментарий
  • Возможно ли создать интерфейс для списка следующих классов?

    DmitryITWorksMakarov
    @DmitryITWorksMakarov
    Может компоновщик подойдет? плюс свойство с мета-информацией об текущем объекте....
    Ответ написан
    Комментировать
  • Как лечится кризис начинающего программиста?

    DmitryITWorksMakarov
    @DmitryITWorksMakarov
    Начинай писать какой-нибудь проект. Я в свое время, когда учился программировать (правда по другой книге: "С# для профессионалов" какая-то из редакций), тоже заскучал.....начал писать проекты (например, решение системы линейных уравнений с произвольным порядком, что-то с нейронными сетями еще делал, с СОМ-портом что-то)....появилась какая-то уверенность в своих силах.....появились вопросы....искал в "интернетах", возвращался к книжке....в итоге язык освоил, а книжку использую как справочник.
    Ответ написан
    Комментировать
  • Как добавить кнопку закрытия на tabpage c#(winforms)?

    DmitryITWorksMakarov
    @DmitryITWorksMakarov
    Создать наследника от TabControl.

    В в режиме дизайнера установить DrawMode=System.Windows.Forms.TabDrawMode.OwnerDrawFixed;

    Переопределить OnDrawItem:
    рисование крестика поверх базовой реализации рисования вкладки.

    Переопределить OnMouseClick:
    Перебрать в цикле все вкладки idx от 0 до TabCount-1. Проверять попадают ли координаты мыши в TabRect=GetTabRect(idx) и внутри TabRect попадают ли в Rectangle описывающий ваш крестик. Если да, то удалить из TabControl это вкладку и прервать цикл.

    У структуры Rectangle есть метод для проверки попадает ли Point во внутрь его.

    P.S. К сожалению я далеко от вижуал студии, поэтому только идея....без реализации.
    Ответ написан
    Комментировать
  • Как разделить в camelCase строку на слова?

    DmitryITWorksMakarov
    @DmitryITWorksMakarov
    Можно через регулярное выражение:
    Regex
         .Matches("helloMyNameId", 
                  @"^[a-z]*|(\G[A-Z][a-z]*)")
         .Cast<Match>()
         .Select(match=>match.Value)
         .Select(str=>char.IsLower(str[0])?str.Substring(0,1).ToUpper()+str.Remove(0,1):str)
         .ToArray();
    Ответ написан
    Комментировать
  • Проектирование классов, наследование, агрегация, что выбрать?

    DmitryITWorksMakarov
    @DmitryITWorksMakarov
    Поддерживаю asdz. По идее поведение классов для N исполнителей не должно отличаться с учетом N (даже если N = 1).
    Если уж очень важно отношение "я есть заказ с одним/многими исполнитель/-ями" можно указать, что заказ на чтение курса и на устный перевод реализует интерфейс IHaveOnePerformer, а заказ на письменный перевод реализует интерфейс IHaveSeveralPerformer.
    Ответ написан
    Комментировать
  • Какую книгу/учебник Вы бы предложили для изучения C# от уровня новичка до профессионала?

    DmitryITWorksMakarov
    @DmitryITWorksMakarov
    1. К.Нейгейл, Б.Ивьен, Дж.Глин, К.Уотсон, М.Скиннер "C#4 и платформа .NET4 для профессионалов" (хотя есть книги из этой серии и для С#2, и для С#3, и для С#4,5) подробно описаны основы языка.
    2. (через год) Дж.Скит, "С# для профессионалов. Тонкости программирования" (описаны различия С# разных версий и зачем они были введены)
    3. (и еще через год ) Дж.Рихтер, "CLR via C#"(более глубокое погружение в язык)


    Но на самом деле не обязательно читать их с таким большим промежутком. Их можно читать и параллельно. Лишь бы было понятно о чем речь. Обязательно параллельно книгам, разрабатывать какое-нибудь приложение (лучше несколько по очереди с усложнением), иначе обучение будет поверхностным. Книги толстые, информации много. Информацию нужно завязать в знания, выстроить свои какие-то связи. Это только через практику.

    Я время от времени возвращаюсь к этим книгам как к справочнику, а иногда открываю в них что-то новое для себя, то что раньше пропустил из-за того, что не был готов.
    Ответ написан
    Комментировать
  • Как реализовать паттерн "Наблюдатель" при нажатии на кнопку?

    DmitryITWorksMakarov
    @DmitryITWorksMakarov
    Еще вот ссылка: Вики.Наблюдатель
    Ответ написан
    Комментировать
  • Вопрос по языку с# ?

    DmitryITWorksMakarov
    @DmitryITWorksMakarov
    Для красоты можно добавить еще сокращение, выделение целой и дробной части, неявное приведение целых чисел к рациональным....
    Ответ написан
    Комментировать
  • Стоит ли изучать JavaScipt и C# одновременно с нуля?

    DmitryITWorksMakarov
    @DmitryITWorksMakarov
    Расскажу свои субъективные впечатления.
    Я достаточно неплохо знаю С# и сравнительно недавно начал изучать JS.
    Сначала С# тебя "ведет" в обучении, он не дает делать совсем глупые вещи, он обучает тебя ООП. Конечно, можно писать на С# и в процедурном стиле, но в основном в книгах и видеоуроках вас будут учить в С# объектно-ориентированному программирования, а потом через несколько лет вы (возможно =) ) придете к паттернам проектирования.

    С JSом все не так. В JS можно много того что нельзя в С#. JS - это свобода самовыражения. Нужно четко понимать: что вы хотите сделать и как вы это хотите сделать и почему нельзя делать по другому, хотя это проще. Я бы назвал JS даже не языком, а метаязыком. Чтобы работать с JS нужно самому определить себе правила и им следовать (С# сам эти правила задавал). А вот какие выбрать правила, тут уже нужен опыт.

    С# можно изучать самостоятельно легко и ненапряжно, а для JS нужны определенные знания и опыт. Я думаю можно совместить, но, по моему мнению, в таком случае для JS нужен хороший живой наставник.
    Ответ написан
    2 комментария
  • Как решить данную задачу?

    DmitryITWorksMakarov
    @DmitryITWorksMakarov
    Еще один вариант со связанным списком
    using System;
    using System.Collections.Generic;
    using System.Linq;
    
    namespace throughOneKill
    {
        class Program
        {
            static void Main(string[] args)
            {
                int N = 10;
    
                var list = new LinkedList<int>(Enumerable.Range(1, N));
                Console.WriteLine(string.Join(" ", list));
                var currentItem = list.First;
                while (list.Count != 1)
                {
                    list.Remove(currentItem.Next ?? list.First);
                    currentItem = currentItem.Next ?? list.First;
                }
                Console.WriteLine(list.First.Value);
    
                Console.ReadKey();
            }
        }
    }
    Ответ написан
    Комментировать