• Как правильно "Собрать решение"?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    А если всю папку C:\Users\pupkin\source\repos\WindowsFormsApp1\WindowsFormsApp1\bin\Debug скопировать и запускать экзешник оттуда?
    При создании готовой программы, лучше выбрать конфигурацию сборки Release, и тогда вся папка C:\Users\pupkin\source\repos\WindowsFormsApp1\WindowsFormsApp1\bin\Release станет дистрибутивом программы, особенно, все dll-ки. Можно попытаться убрать из папки "лишние" файлы, но .exe и .dll все обычно нужны.
    Ответ написан
    8 комментариев
  • Готовый компонент для растягивания фигур?

    cyber_roach
    @cyber_roach
    UX дизайнер INEDIapps
    Базово - нет.
    Насколько я помню такие вещи делаются через Behavior's или addonners

    Вот старый пример бихейвора с использованием библиотеки System.Windows.Interactivity
    10rem.net/blog/2010/01/09/a-wpf-behavior-for-windo...

    Вот еще более старый, но вот тут на мой взгляд, более верный подход - через кастомный контрол и Аддоннеры, можно просто достать нужные куски кода себе.
    https://www.codeproject.com/Articles/22952/WPF-Dia...

    А вот просто документация, где все необходимые знания чтобы сделать такой же, но свой с блекджеком и дамами
    https://docs.microsoft.com/en-us/dotnet/framework/...
    Ответ написан
    Комментировать
  • Как создать свой дизайн интерфейса в WPF?

    cyber_roach
    @cyber_roach
    UX дизайнер INEDIapps
    Дополню Foggy Finder
    1) напрямую использовать элементы Фотошопа (как и другого редактора) - зло. так или иначе работы по дизайну WPF строятся в 3 этапа
    а) дизайн (картинки)
    б) верстка дизайна в XAML
    в) код контролов, анимации интерактив привязка интерфейса к данным(C#+XAML)

    Кроме того Фотошоп это растр, а WPF это вектор.
    отсюда ответ на вопрос 2
    2) именно для дизайна UI под дальнейшую интеграцию в XAML мы остановились на Inkscape
    т.к.
    а) его методы рендеринга почти совпадают с direct2D что использует WPF (это очень касается шрифтов, а то в Фотошопе можно такого со шрифтами понаделать, чего в WPF потом будет повторить очень трудоемко)
    б) у него есть XML-эдитор который позволяет взять любой векторный объект и вставить его в XAML код как есть (иконки например) т.к. формат Path в WPF это по сути тот же SVG
    в) в Inkscape невозможно нарисовать то, чего нельзя сделать в WPF т.е. получается на выходе после верстки почти 1:1
    3) Metro - просто стиль дизайна, нет каких-то особых приложений WPF. НО есть UWP, это уже немного другое, хотя схожа платформа с WPF, точнее будет сказать это ее эволюция.

    По итогу:
    Дизайн WPF приложения нельзя создать без дизайнера (капитанство но факт)
    Даже если использовать готовый UI-kit (что в реальных проектах почти не применимо), то вам нужен верстальщик (аналогия c HTML+CSS версткой) который реализует верстку элементов и форм.
    Если хотите разобраться с версткой сами - сначала надо освоить сам WPF и , что еще важнее C#
    Выше посоветовали книгу М. Макдональда - Я так же начинал с неё.
    Но вот XAML и стилизацию, придется освоить самостоятельно уже после, т.к. это чуть уровнем выше (мало знать XAML, надо разбираться во всех тонкостях, чтобы не накосячить) и литературы по этому вопросу нет.
    Что важно! Без дизайнерской жилки и тяги к интерфейсам, а так же понимания анимаций, графического дерева элементов, гайдлайнов и еще массы всего сопутствующего - ничего не получится, говорю как не раз пытавшийся обучить этому ремеслу обычных программистов. По факту это отдельная профессия (как и html верстальщик аналогии прямые).
    Ответ написан
    Комментировать
  • Как вставить подстроки строки в ячейки Excel?

    @MamaLuyba
    Бьешь строку на подстроки, записываешь их в массив. Первый элемент массива соединяешь с первой строкой. Последующие элементы вставляешь в остальные ячейки. Ширину выставляешь через параметры.
    Или тебе нужен готовый код на VBA?
    Ответ написан
    Комментировать
  • Как в listbox.items добавить картинку и строку?

    RomanGL
    @RomanGL
    Разработчик .NET (UWP)
    Здравствуйте!

    Работаете с WPF? Для ListBox вы можете задать DataTemplate, что является шаблоном для отображения ваших данных. Посмотреть примеры и узнать подробнее о шаблонах вы можете здесь: https://docs.microsoft.com/ru-ru/dotnet/framework/...
    Ответ написан
    Комментировать
  • Как подключиться и получить данные с websocket'а сайта exmo.me на C#?

    MrMureno
    @MrMureno
    VR for all
    https://exmo.me/ru/api#/public_api
    так у них есть готовое апи с примерами. неужели там нет курса вам нужного?
    и даже если нет, то возможно все же проще будет в поддержку написать ,чем раскапывать их протокол общения по вебсокету)
    Ответ написан
    1 комментарий
  • Почему file.exists не видит файл?

    Указывайте полный путь в вызове File.Exists()
    Ответ написан
    Комментировать
  • Какая разница между input model и view model?

    @vhelsing90 Автор вопроса
    Студент технического вуза
    Ответ написан
    Комментировать
  • C#. Как правильно получить список файлов из папки в нужном порядке?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    В Windows уже есть готовая функция, которая выполняет натуральное сравнение строк, лучше использовать её. Эта функция разбивает строку на числовые и строковые части и ищет эти части друг с другом, причём числовые части сравнивает как числа, а строковые - алфавитно.

    var testFiles = Directory.EnumerateFiles(solutionDirectory + @"\samples");
    
    var sortedTestFiles1 = testFiles.OrderBy(x => x, new NaturalComparer());
    // или
    var sortedTestFiles2 = testFiles.ToList();
    sortedTestFiles2.Sort(new NaturalComparer());
    
    /// <summary>
    /// Натуральное сравнение строк
    /// </summary>
    public class NaturalComparer : IComparer<string>
    {
        /// <summary>
        /// Вызов WinApi-функции для натурального сравнения строк
        /// </summary>
        [DllImport("shlwapi.dll", CharSet = CharSet.Unicode)]
        private static extern int StrCmpLogicalW(string psz1, string psz2);
    
        /// <summary>
        /// Натуральное сравнение строк
        /// </summary>
        /// <param name="x">Первая строка</param>
        /// <param name="y">Вторая строка</param>
        /// <returns>Сравнивает две строки, возвращая -1, 0 или 1</returns>
        public static int Compare(string x, string y)
        {
            return StrCmpLogicalW(x, y);
        }
    
        /// <summary>
        /// Натуральное сравнение строк
        /// </summary>
        /// <param name="x">Первая строка</param>
        /// <param name="y">Вторая строка</param>
        /// <returns>Сравнивает две строки, возвращая -1, 0 или 1</returns>
        int IComparer<string>.Compare(string x, string y)
        {
            return StrCmpLogicalW(x, y);
        }
    }
    Ответ написан
    1 комментарий
  • Как в C# получить доступ к ресурсам из библиотеки классов dll?

    shai_hulud
    @shai_hulud
    либо в Library для сборки добавить атрибут InternalsVisibleToAttribute.
    либо сделать класс ресурсов Resource1 публичным, для этого в свойствах файла поменять Custom Tool с ResXFileCodeGenerator на PublicResXFileCodeGenerator.
    Ответ написан
    1 комментарий
  • Какое регулярное выражение использовать?

    Stalker_RED
    @Stalker_RED
    Так?
    (?:#([^!#]+)!!#)|(?:#!(.+)!#)
    https://regex101.com/r/18PVEe/2

    Или так:
    #!?(.+?)!{1,2}#
    https://regex101.com/r/18PVEe/3/

    В обоих случаях я исхожу из предположения, что ни в строке с ошибкой ни в строке сообщения нет символов !#.
    Ответ написан
    Комментировать
  • Как изменить фон у button по Click при реализованном новом шаблоне?

    SpacePurr
    @SpacePurr Автор вопроса
    c#, wpf
    Вопрос решен использованием {Binding MyVarName} и реализацией MyVarName переменной в Code Behind с реализованным интерфейсом INotifyPropertyChanged .
    Binding работает как в Border так и в Trigger.
    Все изменяется динамически в процессе работы программы (написал тестовое окно с двум полями, куда вводил HEX цвет, все отлично работает).
    Binding не работает в ColorAnimation. Для передачи цвета в анимацию, аргумент должен быть "замороженным". Однако эта проблема также решаема созданием своего класса Button, наследуемого от FrameworkElement, но для меня это пока дебри.

    Итого:
    1. Реализация линейного градиента
    2. Реализация градиентной зацикленной анимации при наведении
    3. Реализация радиальной заливки при нажатии
    4. Динамическая смена цвета градиента

    XAML:
    <Window x:Class="SxApp.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:SxApp"
            mc:Ignorable="d"
            Title="Aesthetic" Height="450" Width="450">
    
    
        <Window.Background>
            <ImageBrush 
                ImageSource="/SxApp;component/images/bck.jpg" Stretch="UniformToFill"/>
        </Window.Background>
    
    
        <Window.Resources>
            <Color x:Key="vapor_1">#db2525</Color>
            <Color x:Key="vapor_2">#a944ff</Color>
            <Color x:Key="vaporBorder">#8c5791</Color>
            <Color x:Key="vaporLime">#32CD32</Color>
            
            
            <ControlTemplate x:Key="ButtonTemplate"
                             TargetType="Button">
                <Border x:Name="Border"
                        CornerRadius="2000" 
                        TextBlock.Foreground="pink"
                        TextBlock.FontSize="23"
                        TextBlock.FontStyle="Italic"
                        TextBlock.FontWeight="Bold"
                        Margin="10"
                        >
                    <Border.Background >
                        <LinearGradientBrush>
                            <GradientStopCollection>
                                <GradientStop Offset="0" Color="{Binding ButtonColor1}"/>
                                <GradientStop Offset="1" Color="{Binding ButtonColor2}"/>
                            </GradientStopCollection>
                        </LinearGradientBrush>
                    </Border.Background>
    
                    <ContentPresenter
                        RecognizesAccessKey="True"
                        VerticalAlignment="Center"
                        HorizontalAlignment="Center"
                        />
                </Border>
    
                <ControlTemplate.Triggers>
                    <Trigger Property="IsPressed" Value="True">
                        <Setter TargetName="Border" Property="Background">
                            <Setter.Value>
                                <RadialGradientBrush>
                                    <GradientStop Color="{Binding ButtonPressColor1}" Offset="1" />
                                    <GradientStop Color="{Binding ButtonPressColor2}" Offset="0.2" />
                                </RadialGradientBrush>
                            </Setter.Value>
                        </Setter>
                    </Trigger>
    
                    <EventTrigger RoutedEvent="MouseEnter">
                        <BeginStoryboard>
                            <Storyboard>
                                <ColorAnimation Storyboard.TargetName="Border"
                                                Storyboard.TargetProperty=
                                                "Background.GradientStops[0].Color" 
                                                To="{StaticResource vapor_2}" Duration="0:0:1"
                                                AutoReverse="True"
                                                RepeatBehavior="Forever">
                                </ColorAnimation>
    
                                <ColorAnimation Storyboard.TargetName="Border"
                                                Storyboard.TargetProperty="Background.GradientStops[1].Color" 
                                                To="{StaticResource vapor_1}" Duration="0:0:1"
                                                AutoReverse="True"
                                                RepeatBehavior="Forever">
                                </ColorAnimation>
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger>
    
                    <EventTrigger RoutedEvent="MouseLeave">
                        <BeginStoryboard>
                            <Storyboard>
                                <ColorAnimation Storyboard.TargetName="Border"
                                                Storyboard.TargetProperty="Background.GradientStops[0].Color" 
                                                Duration="0:0:1">
                                </ColorAnimation>
    
                                <ColorAnimation Storyboard.TargetName="Border"
                                                Storyboard.TargetProperty="Background.GradientStops[1].Color" 
                                                Duration="0:0:1">
                                </ColorAnimation>
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Window.Resources>
        
        
        <Grid>
            <Button
                Name="aesButton"
                Click="AesButton_Click"
                Content="Aesthetic"
                Width="200"
                Height="200"
                Template="{StaticResource ButtonTemplate}"/>
        </Grid>
    </Window>


    C#:
    using System;
    using System.ComponentModel;
    using System.Windows;
    
    namespace SxApp
    {
        public partial class MainWindow : Window, INotifyPropertyChanged
        {
            private string buttonColor1;
            public string ButtonColor1
            {
                get => buttonColor1;
                set
                {
                    buttonColor1 = value;
                    OnPropertyChanged("ButtonColor1");
                }
            }
    
            private string buttonColor2;
            public string ButtonColor2
            {
                get => buttonColor2;
                set
                {
                    buttonColor2 = value;
                    OnPropertyChanged("ButtonColor2");
                }
            }
    
            private string buttonPressColor1;
            public string ButtonPressColor1
            {
                get => buttonPressColor1;
                set
                {
                    buttonPressColor1 = value;
                    OnPropertyChanged("ButtonPressColor1");
                }
            }
    
            private string buttonPressColor2;
            public string ButtonPressColor2
            {
                get => buttonPressColor2;
                set
                {
                    buttonPressColor2 = value;
                    OnPropertyChanged("ButtonPressColor2");
                }
            }
    
            public MainWindow()
            {
                InitializeComponent();
                DataContext = this;
                ButtonColor1 = "#db2525";
                ButtonColor2 = "#a944ff";
                ButtonPressColor1 = "#8c5791";
                ButtonPressColor2 = "#32CD32";
            }
    
            private void AesButton_Click(object sender, RoutedEventArgs e)
            {
                string temp = ButtonColor1;
                ButtonColor1 = ButtonColor2;
                ButtonColor2 = temp;
            }
    
            public event PropertyChangedEventHandler PropertyChanged;
    
            public void OnPropertyChanged(string propertyName)
            {
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }


    5c5c52d0ec636963645101.png

    Для реализации динамической смены цвета в анимации советовали почитать главу "Рисованные элементы" и "Создание элемента управления лишенного внешнего вида" в книге "Мэтью Мак-Дональд. WPF: Windows Presentation Foundation в .NET 4.0 с примерами на C# 2010 для профессионалов".
    Всем большое спасибо.
    Ответ написан
    Комментировать
  • Как изменить фон у button по Click при реализованном новом шаблоне?

    WNeZRoS
    @WNeZRoS
    Чтобы button.Background = Brushes.Red; работал нужно в ControlTemplate для Border'a вместо фиксированного цвета/градиента использовать биндинг на фон кнопки:
    {TemplateBinding Background}

    Но при этом в IsPressed триггере всё ещё останется фиксированный цвет, чтобы его тоже можно было менять нужно найти или создать (attached) DependencyProperty у кнопки куда этот цвет можно забиндить.
    Так же в триггерах не работает TemplateBinding, вместо него следует использовать такой биндинг:
    {Binding RelativeSource={RelativeSource TemplatedParent}, Path=PressedBackground}
    Ответ написан
    1 комментарий
  • Где Junior разработчику искать компаньона/компаньонку для переезда в Москву?

    @MasterMike
    Также как и не Junior разработчику.
    Причем здесь IT вообще.
    Ответ написан
    Комментировать
  • Что означает .Net для Unity разработчика?

    mindtester
    @mindtester
    http://iczin.su/hexagram_48
    1 - .Net существует не только для Unity. точнее изначально существовал сам по себе. гулить историю/архитектуру Unity (что такое Mono, IL2Cpp и много интересных вещей, не все из которых реально необходимы что бы начать кодить)
    знание .Net для Unity разработчика
    может означать, что
    просто знание .Net
    недостаточно

    2 - в различных версиях, Unity поддерживал не только C#, бывали Js, и даже Boo. в этом контексте
    знание .Net для Unity разработчика
    может означать, что
    надо уметь кодить на C# в Unity, а не на Js или Boo


    3 - .. или и то и другое вместе
    Ответ написан
    4 комментария
  • Какой нужен стек технологий для Desktop Developera?

    makarychev13
    @makarychev13
    .NET-developer
    .NET
    Нативные штуки: WPF/UWP/Xamarin.Forms

    Дополнительно полезно будет изучить ReactiveUI, Avalonia и библиотеки для MVVM. Ну и посмотреть всякие Windows Community Toolkit и MahApps.Metro.

    JS
    Electron
    NW
    Недавно на хабре стали форсить Neutralino. Но это определённо самая худшая идея из всех (тоже не очень хороших) вариантов разработки десктопа на JS.

    C++
    Знаю только Qt, но наверняка есть что-то ещё.
    Ответ написан
    5 комментариев
  • Куда поступать на программиста в Новосибирске после 9 или лучше после 11?

    kawabanga
    @kawabanga
    Есть неплохой шанс потерять мотивацию после 9го класса. Поэтому я все таки рекомендую закончить 11 класс.
    В 9 классе вы еще молоды, и многие ваши действия я бы отдал под контроль родителей. Опять же, колледж будет перенасыщен людьми, которые просто не смогли пойти в 10 класс. А это очень опасное окружение, которое может негативно сыграть на ваше будущее.

    А вот в 10-11 классе вы можете пойти в школы подготовки, вроде как они есть у нас тут в НСК. И уже к концу 11 класса будете иметь представление о том, куда вы планируете развиваться.

    Английский учите. Без вариантов. Впрочем, за 2 года вызубрить ЕГЭ - не думаю что это проблема.
    Ответ написан
    5 комментариев
  • Как лучше всего изучать английский?

    @Asparagales
    Если стоит задача читать книги и разные мануалы по програмированию на английском, то это не сложно. В них испольуется простая грамматика и ограниченный, объем специфический лексики. Способность общаться с другими не носителями, используя английский как универсальный международный, дается немного сложнее. Если же требуется умение свободно общаться с носителями, то это уже совсем другой английский.

    Что касается грамматики, то лично я за классические бумажные учебники (хотя бы и в электроннм виде). Более того, я даже больше ратую за грамматические справочники. В них информация хорошо структурирована, я думаю, это должно понравиться программистам. Правда, ни один, даже толстый справочник не даст вам полного представления о всех нюансах грамматики. Если хотите иметь более детальные знания, придется обложиться многими учебниками и мануалами. Но здесь кроется одна опасность. Часто в разных книгах изложены одни и те же сведения, но по-разному. Это может запутывать, если не поймешь, что на самом деле в них говорится одно и то же разными словами. Иногда данные из одного источника могут прямо противоречить данным из другого. В общем, есть опасность погрязнуть во всей этой грамматике, вечно пребывая в процессе и не достигая результата.

    Что касается лексики. IT-шной лексики можно понабраться из соответствующих книг, сайтов и форумов. Чтобы овладеть более обширным и общим словарным запасом, нужно использовать самые разные источники с самой разной тематикой - художественная литература (но от разных авторов), нехудожественная литература, статьи о политике, экономике, культуре, искусству, науке и т.п., фильмы, - в общем, все подряд. Ибо в разных источниках используется совершенно разная лексика.

    Еще одно (мое личное, субъективное) мнение. Чтобы уметь читать, нужно начать читать, чтобы уметь писать, нужно начать писать. Для развития навыков понимания устной речи, нужно слушать устную речь. Чтобы научиться разговаривать нужно начать говорить. При этом навык чтения может способствовать навыку понимания на слух, а письмо может помогать говорению. Но именно помогать, а не полностью заменять.
    Ответ написан
    1 комментарий
  • Как работать с переменными типа класс?

    MrMureno
    @MrMureno
    VR for all
    эм. просто почитайте про Конструкторы класса. должно стать понятно все.

    узнаете, что есть дефолтный
    и можно создать
    Varaint2 = new A();

    и много всего другого полезного))

    Update.
    на всякий случай добавлю.вдруг...
    так же для понимания, неплохо было бы усвоить, что классы - это всего лишь описание/структура/классификация)) не знаю как корректнее назвать.

    работаете вы с объектами классов. создаете экземпляр класса(ссылку на него), или получаете ссылку на уже существующий.
    И уже по ссылке вам доступны поля, методы и тд.))
    Ответ написан
    1 комментарий