Книги по windows forms c

Книги по windows forms c

Уроки Windows Forms C++/C#

Элементы button textBox и label в MVS C++/C#

В этом уроке буден показано создание первой простой, но полноценной программы. Суть которой в том, что вы пишите в текстовом поле какое-то предложение, нажимаете на копку и на форме появляется надпись – тоже самое предложение. Для тех ещё не прочитал введение, нужно знать, для того, чтобы создать проект в Windows Forms нужно запустить Microsoft Visual Studio C++C#, нажать “Создать проект”, выбрать (слева) “CLR”, далее выберите “Приложение Windows Forms” и назовите свой проект, например, “first_lesson()”. И так, познакомимся сначала с интерфейсом компилятора: справа от вас находиться панель всевозможных инструментов (элементов), а слева, собственно, сама форма, на которую вы и будете размещать, выбранные вами, элементы.

Нажмём на “Стандартные элементы” и выберем из них – "button" "textbox" и "label, перетаскивая из поочерёдно на форму.

Нажав, например, на кнопку "button1", справа вы увидите ёё свойства, их там очень много. Для начала выберете свойство "Text" и напишите там вместо "button1"– “Копировать”. В дальнейшем большую часть свойств мы будем изменять программным кодом – так эффективней и удобней.

Так же вы наверняка уже заметели, что размер формы и элементов можно изменять. Сделайте так же как показанно здесь.

Далее щёлкните два раза по форме – перед вами раскроется новое окно с программным кодом, в котором мы и будем, собственно, писать код. В данном случае откроется событие Form_Load, где вам нужно написать label1->Text = ""; В конце урока будет показан код и на C#. Эта строка говорит о том, что, когда произойдёт запуск (загрузка) программы, текст "label1" станет равным "".

После этого нажмите наверху "Form1.h[Конструктор]". Откроется Событие "button1_Click". Напишите в нём label1->Text = textBox1->Text; Это будет говорить о том, что когда, при загрузке формы, вы нажмёте (clickните) на кнопку произойдёт описанное действие – текст, написанный, в “textBox1” скопируется в "label1". Далее приведён код на "C++" и "C#", после чего показан результат работы программы.

#pragma endregion private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) < label1->Text = ""; > private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) < label1->Text = textBox1->Text; > >; >

Результат: Следующий урок >>

Сейчас самостоятельно изучаю C# (по Шилдту), но в этой книге рассматривается создание только консольных приложений

Подскажите пожалуйста, какую почитать литературу (на русском) по созданию приложений Windows Forms на C#?

По самому C# учебников в сети тьма, а по Windows Forms нашел только учебник Лабора (2003 г. издания). Ну либо самоучители, которые показывают не дальше чем Hello World, либо непонятный новичку msdn.

з.ы. По тостеру естественно искал, но вся литература, что на русском языке идет исключительно по C#, а не по созданию на нем Windows-приложений.

  • Вопрос задан более трёх лет назад
  • 9068 просмотров

> потому что есть WPF. Изучайте его. Он быстрее, лучше, мощнее
Не врите.
Быстрее — это смотря что писать.
На уровне простого дефолтного GUI без весьма активной перерисовки местами — явно быстрее Winforms, а WPF будет медленно грузиться и жрать ОЗУ.
Если куча свистоперделок, анимаций, или 3D — то WPF.

Мощнее (гибче в плане свистоперделок и прочих нестандартных возможностей) — да.
Но Winforms попроще, поудобнее будет. Попроще — особенно для новичка. Поудобнее — особенно на слабых компах, где WPFовский WYSIWYG тоже будет тормозить.

> WinForms не развивается дальше, в отличии от WPF
WPF развивается дальше? Это параллельно UWP что ли?
А сторонние решения для Winforms — Telerik, DevExpress, тоже не развиваются?

Роман: как вы все зае. достали твердить заученные фразочки про аппаратную отрисовку. Наслушались их от MS или еще кого — и твердите. Ну не знаете вы недр Winforms и WPF, тем более недр винды, так и не лезли бы. Только позориться перед путными разрабами, которые аж до уровня байт и бит углубиться могут при необходимости.

Алгоритмы отрисовки — лишь малая часть GUI-фреймворка. В WPF еще куча всего, о чем вы представления не имеете. А ведь оно там убого сделано, и вот, например, нагрузка на ОЗУ обычно получается выше, это без проблем проверяется тестами. Выделение памяти разве не занимает время?
Еще DirectX медленно грузится, это и в WPF перекочевало.
И др.
И компенсировать все эти тормоза скоростью отрисовки — возможно далеко не в любом приложении.
Млять, хотя бы элементарные тесты с профилированием провели, хоть бы открыли диспетчер задач и глянули, прежде чем пиндеть чухню не пойми откуда взятую.

> Да параллельно UWP.
Пруф?
И какие новые реально стоящие фичи появились в WPF в 2015-2016?

Читайте также:  Методы нлп по притягиванию человека

> потому что есть WPF. Изучайте его. Он быстрее, лучше, мощнее
Горе-преподаватель сморозил лажу.
Быстрее — это смотря что писать.
На уровне простого дефолтного GUI без весьма активной перерисовки местами — явно быстрее Winforms, а WPF будет медленно грузиться и жрать ОЗУ.
Если куча свистоперделок, анимаций, или 3D — то WPF.

Мощнее (гибче в плане свистоперделок и прочих нестандартных возможностей) — да.
Но Winforms попроще, поудобнее будет. Попроще — особенно для новичка. Поудобнее — особенно на слабых компах, где WPFовский WYSIWYG тоже будет тормозить.

> WinForms не развивается дальше, в отличии от WPF
WPF развивается дальше? Это параллельно UWP что ли?
А сторонние решения для Winforms — Telerik, DevExpress, тоже не развиваются?

Спасибо за развернутый ответ!

Но половину терминологии я совершенно не понял.

Давайте немного конкретизирую:

Я изучаю программирование, чтобы создавать Desktop-приложения, позднее Web-приложения и (возможно) сайты. До этого с программированием вообще не сталкивался. Выбрал для изучения C# и начал его учить по книге Шилдта. Но беда в том, что в его книге рассматриваются исключительно консольные приложения.

С одной стороны я понимаю, что в Шилдте дан фундамент C# — операторы там, литералы, переменные. Но с другой стороны мне этого явно недостаточно для создания Desktop-приложений.

Вопрос: Как создавать десктоп-приложения на C#? Что для этого использовать? Конечно хочется, чтобы технология для создания была наиболее актуальной и я мог в дальнейшем долго пользоваться этими знаниями.

Newbie1: > мне этого явно недостаточно для создания Desktop-приложений
Для создания Desktop-приложений нужен GUI-фреймворк.
Ваши Winforms и WPF — это 2 различных GUI-фреймворка, доступных на C#.
Что такое GUI — погуглите.
Что такое фреймворк — тоже погуглите.
Заодно начнете разбираться с терминологией.

> Как создавать десктоп-приложения на C#?
Ну, для начала надо в VS создать проект типа "Приложение Windows Forms" или "Приложение WPF".

> Что для этого использовать?
Из моего ответа вроде ясно, что и Winforms и WPF имеют право на жизнь, но для новичка проще Winforms, а если комп слабый, то еще и физически легче.

> хочется, чтобы технология для создания была наиболее актуальной и я мог в дальнейшем долго пользоваться этими знаниями
То есть хотите зациклиться на одной технологии?
Каждый инструмент — для своего круга задач. Чем меньше инструментов, тем уже круг задач.
Вас устроит быть ограниченным? Если да, то круг задач сделайте узким. Где будете работать, что именно писать и т.д.

WinForms может быть быстрее, если приложение простое. Если приложение хотя бы среднее, то WPF будет быстрее. Под "быстрее" я понимаю и быстродействие самого приложения, и скорость разработки, и время изменений в проекте. Вы же сами сказали — "смотря что писать". Сделать на WinForms решение квадратного уравнения будет быстрее (и то, не факт). Про "жрать ОЗУ" тоже не факт, это сильно зависит от того, как сделано и что сделано.

На чём быстрее писать код — на Visual Studio 2008 или Visual Studio 2015? "Восьмёрка" неизмеримо быстрее запускается, скорость работы быстрее (но уже не так сильно). Но насколько "пятнадцатая" даёт скорости именно работы? На мощном компе работает быстро, и даёт очень много для производительности труда программиста.

WPF имеет более высокую кривую обучения, много сложных новых концепций, которых нет в WinForms. Изучить сложнее, но проще потом всё это использовать.

Вы сами в своём ответе сказали, что в WPF во многом лучше. Но ваш опыт будет в том, что вам это удобнее. Пусть так, я не против. Мой опыт в том, что на WPF я сделаю быстрее, используя MVVM, DI с IoC, интерфейсами, биндингами, конвертерами и пр. Особенно, когда проект развивается, изменяется.
Telerik, DevExpress — это не Microsoft, это внешние решения. К тому же, многие из вещей работают и в WinForms, и в WPF, и в Silverlight.

Ну и последнее. Сколько проектов (новых) начинается с WinForms, и сколько с WPF? То-то и оно.

В общем, для начинающего программиста полезнее изучать сразу WPF, чем WinForms.

Это бесплатная глава книги Библия C#. В новом издании эта глава переписана с учетом универсальных при-ложений Windows, а старая версия главы, которая не потеряла еще своей актуаль-ности стала бесплатной и доступной всем.

Начнем с создания пустого приложения и посмотрим, что для нас сгенерирует мастер Visual Studio, чтобы на экране появилось окно программы, и из чего все это состоит. Для создания проекта выполняем команду меню File | New | Project и в открывшемся окне выбираем Windows Forms Application в разделе языка программирования Visual C# | Windows (рис. 5.1). Я назвал свое новое приложение OurFirstVisualApplication.

Читайте также:  Спецификация программного обеспечения образец

Давайте посмотрим, какие модули добавлены в решение. Их всего два: Form1.cs (этот модуль состоит из нескольких файлов) и Program.cs. Начнем со второго файла, потому что именно с него начинается выполнение программы, и там находится метод Main(). Код файла вы можете увидеть в листинге 5.1.

Листинге 5.1. Содержимое файла Program.cs

Рис. 5.1. Окно создания нового проекта (выделен пункт для создания визуального приложения)

Чтобы сэкономить место, я убрал комментарии, но в них всего лишь было написано, что перед нами входная точка приложения. А мы уже и без комментариев знаем, что метод Main() всегда вызывается первым при запуске приложения. Но давайте все по порядку.

Файл Program.cs нужен только в качестве заглушки, в которой объявлен класс с методом Main(). Он не несет в себе никакой логики, кроме создания приложения и отображения главного окна программы. Чаще всего в этот файл вы заглядывать не будете, но знать о его существовании желательно.

5.1.1. Пространства имен

В самом начале файл Program.cs подключает три пространства имен, с которыми будет происходить работа. На самом деле для компиляции программы достаточно только двух пространств: первого и третьего. Второе пространство не нужно, и в данном коде не используется, поэтому мы не будем его пока рассматривать. Это пространство имен относится к коллекциям, а это тема отдельного и очень серьезного разговора главы 8.

Из необходимых остаются два пространства имен:

  • System — мы подключали это пространство имен для всех приложений, которые писали до сих пор, — точнее, мастер подключал его вместо нас. В этом пространстве в .NET объявлены основные типы данных и все, без чего не проживет ни одно приложение .NET, которое хоть что-то делает;
  • System.Windows.Forms — в этом пространстве имен расположено все, что необходимо для функционирования формы. Формами в .NET называют проект будущего окна. Если класс — это спецификация, по которой создается объект, то форма — это спецификация, по которой создается окно. Мы планируем работать с визуальным интерфейсом, поэтому это пространство имен просто необходимо.

Как узнать, какие пространства имен подключать, а какие не нужно? Тут может помочь файл помощи и MSDN, где при описании каждого класса, метода или свойства обязательно указывается, в каком пространстве имен его можно найти. Откройте файл помощи — командой меню Help | Index (Помощь | Индекс) — и введите в строку поиска Look for (Искать) в левой панели открывшегося окна: Application class. Щелкните по найденному имени двойным щелчком, и откроется страница помощи по этому классу (рис. 5.2).

Рис. 5.2. Файл помощи по классу Application

На рис. 5.2 я выделил рамкой тот фрагмент, где как раз и написано, в каком пространстве имен находятся описание и сборка (DLL-файл) с реализацией класса. Нас больше интересует именно пространство имен, а не сборка. Мне ни разу не приходилось использовать файл сборки, по крайней мере этот. Все основные файлы добавляются в раздел References проекта автоматически при создании проекта. Но если вы будете использовать что-либо специфическое, то может потребоваться подключение нужного файла сборки самостоятельно.

Второй метод узнать пространство имен — не думать о нем, а возложить всю головную боль на среду разработки. У Visual Studio голова достаточно хорошая, и она с легкостью решит такую задачу.

Попробуйте сейчас ввести где-нибудь в коде метода Main() слово OleDbConnection. Это класс, который используется для соединения с базами данных, — компилятор не найдет его среди подключенных пространств имен и конечно же подчеркнет. Теперь вы можете щелкнуть правой кнопкой по подчеркнутому имени, в контекстном меню раскрыть пункт Resolve (Разрешить), и в его подменю будут перечислены пространства имен, в которых среда разработки смогла найти указанное слово (рис. 5.3).

Рис. 5.3. Контекстное меню позволяет решить проблему подключения пространств имен

В контекстом меню доступны два варианта решения проблемы, между которыми находится разделитель. Выше разделителя указаны варианты, которые добавляют в начало модуля кода оператор using с выбранным пространством имен. Варианты ниже разделителя изменяют короткое имя метода на полное. То есть, в случае с типом данных OleDbConnection, если вы выберете вариант ниже разделителя, то тип данных заменится на System.Data.OleDb.OleDbConnection. Если вы знаете, что это единственное обращение к такому типу данных, то можно использовать полный путь, но если в модуле кода вы станете использовать этот тип данных много раз, то проще будет сразу добавить его в раздел using.

Чаще всего в этом подменю будет приведен только один вариант — и до разделителя, и после, но некоторые имена могут быть объявлены как для Windows, так и для Web. В таких случаях требуется выбрать нужную сборку. Это не сложно, потому что для Интернета чаще всего используется пространство имен System.Web. Например, класс Application для интернет-программирования находится в пространстве имен Microsoft.Web.Administration. Это определяется ключевым словом Web, которое находится в середине.

Читайте также:  Настройка датчика приближения iphone

Обратите также внимание, что мастер создания проекта поместил весь код нашего проекта в пространство имен, идентичное имени проекта. Всегда обрамляйте код в пространство имен.

Пространство имен по умолчанию для вашего проекта можно изменить. Для этого щелкните правой кнопкой мыши по имени проекта и выберите в контекстном меню пункт Properties, чтобы изменить свойства проекта. Здесь в разделе Application в поле Default namespace (Пространство имен по умолчанию) вы можете изменить имя пространства имен. При этом уже существующий код останется в старом пространстве имен. То есть, существующий код изменяться автоматически не будет, а вот новые файлы, которые будут добавляться в проект, станут попадать уже в новое пространство. Если вам нужно перенести существующий код в новое пространство, то следует сделать это руками, изменяя текущее пространство имен на новое. Можно оставить и старое имя, потому что в одной сборке могут быть и два, и три разных пространства имен, если вас это устраивает.

5.1.2. Потоки

Обратите внимание, что перед методом Main() в квадратных скобках стоит ключевое слово STAThread (см. листинг 5.1). Оно указывает на то, что модель разделения потоков для приложения будет одиночная (Single Thread Apartment model). Такой атрибут должен быть указан для всех точек входа в WinForms-приложения. Если он будет отсутствовать, то компоненты Windows могут работать некорректно.

Дело в том, что без атрибута STAThread приложение будет пытаться использовать многопоточную модель разделения MTAThread (Multi Threaded Apartment model), которая не поддерживается для Windows Forms.

5.1.3. Класс Application

В листинге 5.1 в методе Main() все строки кода являются обращением к классу Application, который предоставляет статичные свойства и методы (это значит, что не нужно создавать экземпляр класса, чтобы их вызвать) для поддержки работы приложения. Основными методами являются запуск и останов приложения, а также обработка сообщений Windows. При возникновении каких-либо ситуаций ОС отправляет окну событие, и окно должно отработать это событие. Например, если пользователь нажал на кнопку закрытия окна, то этому окну направляется событие WM_CLOSE (если мне не изменяет память). Поймав это событие, окно должно отреагировать, освободить запрошенные ресурсы и приготовиться к уничтожению. Любой ввод пользователя, включая нажатие клавиш на клавиатуре и движение курсора мыши, обрабатывает ОС, а потом с помощью сообщений отправляет изменения в приложение.

Чтобы отлавливать сообщения, которые направляет приложению операцион- ная система, в приложении должен быть запущен цикл. В таких языках, как С/С++, цикл получает от ОС сообщение, обрабатывает его и ожидает следующего сообщения. Этот цикл продолжается до тех пор, пока не произойдет выхода из программы.

Класс Application берет на себя всю ответственность за получение сообщений от системы и перенаправление их в окна, чтобы вы могли эти сообщения обработать. Чуть позже мы научимся ловить сообщения, а пока нам нужно знать, что за подготовку сообщения для обработки отвечает именно класс Application.

Рассмотрим методы, которые вызываются в классе, который сгенерировал нам мастер Visual Studio. Первый метод класса Application, который мы вызываем:

EnableVisualStyles(). Этот метод включает отображение в стилях ОС, на которой запущено приложение. Если удалить эту строку и запустить программу, то все элементы управления будут выглядеть в стиле Windows 9x с квадратными углами даже в Windows 7. Не вижу смысла возвращаться в доисторические времена визуального интерфейса, но если вам вдруг это понадобится, теперь вы знаете, какую строку нужно удалить.

Следующий метод приложения, который вызывает программа: SetCompatibleTextRenderingDefault(). Некоторые элементы управления могут отображать текст с помощью старых функций GDI или с помощью новых функций GDI+. Если методу SetCompatibleTextRenderingDefault() передать значение false, то будут использоваться функции GDI+.

Это все были подготовительные методы, а последний метод: Run() является наиболее важным. Этот метод запускает скрытый цикл обработки сообщений ОС и делает видимой форму, которая передается в качестве параметра. В нашем примере в качестве параметра передается инициализация объекта класса Form1, для чего вызывается конструктор класса с помощью оператора new, как мы это делали ранее. Просто мы всегда присваивали результат выполнения new переменной, а в этом случае нам переменная не нужна, и мы больше не будем использовать объект в методе Мain(), поэтому, нигде ничего не сохраняя, сразу передаем новый объект методу. То же самое можно было написать так:

Ссылка на основную публикацию
Ключ для windows 7 максимальная сборка 7601
Если вы искали ключ для windows 7 максимальная (Ultimate), то вы попали по адресу, мы собрали для вас, массу ключей....
Какой ток на выходе usb
В современном мире гаджетов использование зарядных устройств в автомобиле — это необходимость. Т.к. гаджетов у меня много и в машине...
Какой телефон щас в моде
На Российском рынке представлено огромное количество смартфонов на любой вкус и цвет. Ассортимент настолько широк, что каждый любой пользователь гарантированно...
Ключ для повер поинт 365 лицензионный ключ
Microsoft Office 365 состоит не только из офисных программ Word, Excel, PowerPoint, OneNote, Publisher, Outlook, Access, OneDrive для бизнеса, Skype...
Adblock detector