• Как сделать чтобы при нажатии на кнопку событие click генерировалось только для нее?

    @smozhaykin
    Выставляйте в обработчике ToggleButton RoutedEventArgs.Handled = true:

    <Window x:Class="WpfApplication1.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:WpfApplication1"
            mc:Ignorable="d"
            Title="MainWindow" Height="350" Width="525">
        <Button Click="Button_Click">
            <ToggleButton Click="ToggleButton_Click" />
        </Button>
    </Window>


    private void Button_Click(object sender, RoutedEventArgs e)
    {
        MessageBox.Show("Button clicked");
    }
    
    private void ToggleButton_Click(object sender, RoutedEventArgs e)
    {
        MessageBox.Show("ToggleButton clicked");
        e.Handled = true;
    }
    Ответ написан
    Комментировать
  • Как сделать чтобы при нажатии на кнопку событие click генерировалось только для нее?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Можно попробовать разделить кнопки. Grid очень легко позволяет отобразить один элемент поверх другого. Или у вас по бизнес-логике ToggleButton обязательно должен быть внутри Button?
    Ответ написан
    Комментировать
  • Есть ли простой способ подключить динамическую библиотеку ( .dll) в проект?

    Nipheris
    @Nipheris Куратор тега C++
    Что-то тут вам насоветовали в комментах....

    Для начала нужно у вас спросить, как вы хотите загружать эту DLL - статически, т.е. заранее точно знать имя файла который будет загружен и загружать его при запуске программы, или же подгружать динамически - не имея заранее информации о том, какой конкретно файл нужно загрузить, но осуществлять поиск по каким-либо критериям, и загружать (как например делает foobar2000 при загрузке плагинов - находит все dll в конкретной папке).

    Если статически - то ничего сложного нет, создайте в студии проект DLL или сами прочитайте про макросы для импорта/экспорта - они нужны, чтобы с ОДНИМ И ТЕМ ЖЕ хедером и компилить DLL, и пользоваться ей. По сути вам нужны эти макросы (которые студия сделает за вас, если создадите проект по шаблону), и вам нужно проставить их на каждом классе или свободной функции, которые нужно экспортировать. Все. Теперь вы можете и саму DLL скомпилить с этим заголовочным файлом, и подключить его в другой проект, который должен использовать DLL.

    Если динамически - тогда без описания прототипов действительно не обойтись. И генерация из DLL тоже не особо поможет вам, т.к. информация о классах действительно потеряется.

    Запомните - роль метаданных для компилятора C++ играют именно заголовочные файлы. В отличие и java и прочих дотнетов, где информация о том, что "внутри" поставляется вместе с кодом в том же самом контейнере (в пакете в джаве и в сборке в дотнете), скомпилированные нативные модули вроде EXE, ELF, DLL, LIB, SO и прочих не имеют стандартизированных способ хранить информацию о классах. Они просто не на том уровне работают - они больше для операционной системы или линковщика, чем для компилятора. А классы - это фишка конкретного языка, в Си например нет классов по определению. Соответственно, низкоуровневые вещи вроде DLL не должны заботиться о такой вещи, как классы C++. Поэтому практически с любой библиотекой на C++, даже если она компилится в LIB или DLL, поставляется хедер-файл. Возможно, вы еще не сталкивались с Boost - в нем многие классы вообще не могут быть скомпилированы заранее, т.к. являются шаблонными, и поэтому они поставляются прямо в виде заголовочных файлов. Такие библиотеки, в которых все или часть сущностей не подлежат предварительной компиляции, а поставляются в виде исходного кода файлов для последующего инклуда, называются header-only. Это вам для общего развития.

    Так что и в случае динамического подключения, все не так сложно - вам точно так же нужно иметь заголовочный файл с прототипами, а также с парными им типами указатель-на-функцию. Этот хедер также можно будет использовать как в самой DLL, так и при ее загрузке через LoadLibrary и получении функций через GetProcAddress (вы же это имели в виду в вопросе?). Но еще раз отмечу - это "сложный" способ, который требуется только если вы заранее НЕ ЗНАЕТЕ, что хотите загрузить - это используется как правило для реализации плагинов.
    Ответ написан
    2 комментария
  • Есть ли простой способ подключить динамическую библиотеку ( .dll) в проект?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    От прототипов никуда не денешься. Другое дело, что прототипы функций с++ можно сгенерировать из самой dll, поскольку экспортированные имена содержат всю необходимую для этого информацию.
    Ответ написан
    9 комментариев
  • Конструкция "class{}Name;" вместо "class Name{};"?

    Olej
    @Olej
    инженер, программист, преподаватель
    class ClassName {
       //...
    };

    - создаёт описание класса, как тип, который вы можете в дальнейшем использовать; никакие объекты в коде при этом не создаются.
    class {
      //...
    } ClassName;

    - создаёт описание структуры анонимного (не именованного) класса и тут же создаёт объект с именем ClassName (поэтому имя очень неудачное, уместно было бы ObjName); поскольку класс не имеет имени, вы больше не сможете создать объектов такого класса ... разве что так:
    class {
      //...
    } Obj1, Obj2, Obj3, ...;
    Ответ написан
    Комментировать
  • Конструкция "class{}Name;" вместо "class Name{};"?

    @KaminskyIlya
    Если я правильно понял ваш вопрос, то конструкция { ... } ClassName создаст нам объект класса анонимного класса, а конструкция: { ... } StructName - соответственно переменную с анонимной структурой.
    Ответ написан
    6 комментариев
  • Что делает программиста программистом?

    27cm
    @27cm
    TODO: Написать статус
    В вашем списке нет самого главного. Можно всё перечисленное знать, но не быть программистом.

    Программиста делают программистом написанные им программы!
    Ответ написан
    5 комментариев
  • Уместен ли return в void функциях? Как лучше else-if-else или множественные return`ы?

    TanVD
    @TanVD
    Джуниор C++/QT
    Как правило return уместен в случае, если выполнение алгоритма идёт по ненормальному сценарию, использование его приводит к меньшей вложенности кода, однако так же приводит и к возможному повторению общего для всех сценариев исполнения алгоритма кода выхода (например отключение логирования перед return (справиться с этим помогут, к примеру, аспекты)).
    Использование return уместно в коде без сложных условий на выход.
    В некоторых случаях от использования повторяющихся if поможет избавиться паттерн состояние (не в данном случае)
    Про красивый код можно почитать тут или же прочесть совершенный код Макконела. Так же есть смысл посмотреть руководства по стилю в каких-то больших проектах на том же github (они обычно лежат в разделе wiki), или, возможно, таковое есть на сайте msdn.
    Ответ написан
    Комментировать
  • Уместен ли return в void функциях? Как лучше else-if-else или множественные return`ы?

    Dark_Scorpion
    @Dark_Scorpion
    У вас заметил всего 1 if+else. Значит правильно использовать его.
    Если много вложенности if+else много, надо использовать switch+case. Если вложенность состоит из стандартных проверок, по именам файлов , то цикл.
    При стандартных проблемах вложенности, return почти не используется. Это дурной тон.
    Ответ написан
    Комментировать
  • Уместен ли return в void функциях? Как лучше else-if-else или множественные return`ы?

    Стандарт кодирования, это такая вещь, из-за которой любят поломать копья. Он - как поэзия, сложно измерить его вклад в вашу жизнь. На мой взгляд, самое правильное - сформулировать свой стандарт (он может на 100% совпадать с каким-то уже существующим), обосновать его самому себе и жить спокойно. Стандарт можно пересматривать по необходимости время от времени.

    Скорее всего, вам нужно разбить эту функцию на две (или больше). Без полного кода точно не сказать.

    Существует мнение, что чем меньше уровней вложенности в коде (второй вариант), тем лучше. Но это только мнение и вы сами должны понимать, когда его принимать в расчет, а когда нет.
    Разумеется, это понимание нужно выработать, но сделать это можно только практикуясь. Так что, пишите код, читайте книги, читайте чужой код и постепенно выработаете свой стандарт (Хотя, почитать что-нибудь на эту тему, конечно, совсем не вредно - https://refactoring.guru)
    Ответ написан
    Комментировать
  • Стоит ли изучать TypeScript или дождаться EcmaScript 6?

    @artemt
    Full-stack developer
    Стоит, порог вхождения низкий. 2 июня на edx.org стартует курс "Introduction to TypeScript". Можно начало глянуть и самому оценить.
    Ответ написан
    6 комментариев
  • Rust или C++/C?

    afiskon
    @afiskon
    Ответ написан
    Комментировать