Путь разработчика    

Как сделать две формы открытыми друг друга в C#

Рекомендуем: фильм Паразиты (Корея) - пересказ сюжета, смысл
eda2480d

Это своего рода упражнение новичка в создании двух форм, работающих друг с другом, хотя оно поднимает некоторые проблемы, не связанные с новичком.

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

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

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

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

Каждая из форм содержит кнопку, отображающую другую форму.

Следующий код показывает код второй формы.

Python

Сначала код создает переменную с именем TheForm1 для хранения экземпляра класса Form1. Поскольку обработчик события первой формы Load инициализирует его, переменная должна быть объявлена public.

Когда вы нажимаете кнопку формы, код скрывает текущую форму. Обратите внимание, что это не уничтожает форму, она просто делает ее невидимой.

Затем код отображает первую форму, которая хранится в переменной TheForm1.

В следующем коде показан код первой формы.

Python

Как и вторая форма, этот код имеет ссылку на другую форму. Поскольку эта форма является единственной, которая должна ссылаться на переменную TheForm2, объявляется private.

Когда форма загружается, обработчик события Load создает новый объект Form2 и сохраняет ссылку на него в переменной TheForm2.

Далее код инициализирует переменную TheForm1 новой формы, чтобы она указывала на текущую форму, имеет тип Form1. Теперь Form2 может вернуться к этому Form1.

Когда форма показывает друг друга, они иногда оказываются ниже других программ на рабочем столе. Чтобы предотвратить отбрасывание форм в обратную сторону, необычная особенность Windows, программа устанавливает оба свойства формы TopMost в true. Это держит их выше всех других не-верхних форм.

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

Это основной подход, но есть еще одна важная проблема. По умолчанию начальная форма, которая изначально Form1, играет важную роль в программе C#. Когда эта форма уничтожается, программа заканчивается. В этом примере, если вы нажмете форму запуска, форма запуска скрывает и отображает вторую форму. Теперь, если вы закрываете вторую форму, вторая форма исчезает, но форма запуска все еще скрыта. Это означает, что нет возможности закончить программу. Он сидит там на заднем плане, как зомби, тратящие ресурсы.

Существует несколько подходов. Два самых простых и самых очевидных - закрыть первую форму и предотвратить вторую закрытие. Для обоих подходов вы добавляете обработчик события Form_Closing во вторую форму.

Чтобы закрыть первую форму при закрытии второй формы, просто сделайте обработчик события Form_Closing закрытием второй формы, как в следующем коде.

Python

Теперь, когда вторая форма закрывается, она также закрывает первую (стартовую) форму, поэтому программа заканчивается.

Для второго подхода make обработчик события Form_Closing установил для параметра e.Cancel значение e.Cancel для предотвращения закрытия второй формы. Затем скройте его и покажите стартовую форму, как и раньше. Следующий код показывает этот подход.

Python

В любом случае пользователь не может закрыть вторую форму, не закрывая форму запуска, так что вы не получите программу зомби.

Источник: http://csharphelper.com/blog/2016/07/make-two-forms-open-c/



Отзывы (через Facebook):

Оставить отзыв с помощью аккаунта FaceBook:


Как сохранить несколько изображений в Access на C#

Пример Сохранить изображения в базе данных Access в C# включает базу данных Access. К сожалению, если вы сохраняете несколько изображений в базе данных и з...

21 06 2021 12:10:59

Перезапустите диспетчер очереди печати в C#

Время от времени мой компьютер запутывается и думает, что принтер отключен. Это не так уж плохо, за исключением того, что Windows не предоставляет простой...

20 06 2021 11:41:38

Класс BufferedWriter в Java

Класс BufferedWriter обладает функциональностью записи буферов символов в файл. Он расширяет Writer, который является абстрактным классом для записи потоко...

19 06 2021 2:30:38

Сделайте диалог выбора, в котором используется цветное колесо в C#

Пример Нарисуйте цветное колесо с альфа-и насыщенными значениями в C# позволяет пользователю выбрать цвет на цветном колесе. В этом примере используется эт...

18 06 2021 13:12:38

Классификация языков программирования: кратко

Классификация языков программирования. Сейчас существует огромное количество самых разных языков программирования. По некоторым подсчетам, всего их более чем 120....

17 06 2021 15:30:58

List (список) в Python

List ( Список) в Python - один из наиболее часто используемых и очень универсальных типов данных, используемых в Python. Списки являются объектами и содержа...

16 06 2021 14:48:20

Слияние видео в C#

( Обратите внимание, что этот пример был написан в Visual Studio 2010.) Моя первоначальная проблема заключалась в том, что я создал кучу видео и вам нужно б...

15 06 2021 7:29:29

Класс Java Scanner

Класс Java Scanner - это класс в пакете Java.util, который позволяет пользователю считывать значения различных типов. Это простой текстовый сканер, который...

14 06 2021 10:47:48

Модификаторы доступа в Java

Одним из основных принципов объектно-ориентированного программирования является «скрытие информации», что означает, что объекты не раскрывают все их детали...

13 06 2021 11:46:25

Отображение метафайла Windows (wmf) в C#

Метафайк Windows (wmf) - это файл изображения, содержащий инструкции для рисования фигур. Напротив, растровые, PNG, JPG и другие файлы растровых изображени...

12 06 2021 18:20:12

Объясните методы split () модуля «re» в Python

Модуль «re» в Python обеспечивает операции согласования регулярных выражений, аналогичные тем, которые были найдены в Perl. Оба шаблона и строки для поиска...

11 06 2021 5:15:52

JavaScript. Подробное руководство (Дэвид Флэнаган)

Пятое издание бестселлера "Javascript. Подробное руководство" полностью обновлено. Рассматриваются взаимодействие с протоколом HTTP и применение технологии...

10 06 2021 9:33:31

Сделайте отображение изображений ComboBox с текстом в C#

Пример Сделать цветной дисплей ComboBox или изображения на C# показывают, как сделать созданный владельцем ComboBox, который отображает либо серию цветовых...

09 06 2021 19:18:15

Функции в JavaScript

Функции - это «автономные» модули кода, которые выполняют определенную задачу. Он содержит инструкции, используемые для создания вывода с его ввода. Чтобы...

08 06 2021 13:12:35

Среда разработки PyCharm

PyCharm – интегрированная среда разработки для Python. Разрабатывалась компанией JetBrains. За основу взята другая интегрированная среда разработки Intelli...

07 06 2021 10:14:43

Проверка поддерева TreeView в C#

Иногда полезно, чтобы пользователь выбрал поддерево TreeView, щелкнув узел более высокого уровня. Затем пользователь может отменить выбор отдельных узлов в...

06 06 2021 21:31:29

Выберите разрешение принтера в C#

В этом примере показано, как разрешить пользователю выбирать разрешение принтера. Когда вы устанавливаете принтер объекта PrintDocument, его коллекция Defa...

05 06 2021 4:56:18

Нарисуйте простую гистограмму в C#

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

04 06 2021 14:54:22

Разница между @staticmethod и @classmethod в Python

Python @classmethod означает, что при вызове этого метода мы передаем класс как первый аргумент вместо экземпляра этого класса («self»). Функция @classmeth...

03 06 2021 3:52:37

Что такое отказобезопасные и отказоустойчивые итераторы в Java

Неуправляемые итераторы Fail-Fast iterators, возвращенные большинством типов коллекций, не переносят каких-либо структурных изменений в коллекции, итерации...

02 06 2021 16:12:49

Изменение ориентации и полей печати в C#

В этом примере показано, как изменить ориентацию и поля печати в распечатке или предварительном просмотре печати. По умолчанию, когда вы показываете предва...

01 06 2021 22:28:19

Почему Java не поддерживает указатели?

Большинство исследований согласны с тем, что указатели являются одной из основных функций, которые позволяют разработчикам вводить ошибки в свой код. Когда...

31 05 2021 12:19:53

Как распечатать содержимое элемента управления ListView на нескольких страницах в C#

Когда программа печатает в .NET, объект PrintDocument вызывает обработчик события PrintPage для создания каждой страницы. Эта программа должна установить п...

30 05 2021 21:20:50

Языки программирования для начинающих: с чего лучше начать?

Какие языки программирования подходят для начинающих? С какого лучше начать? В наше время программирование стало одной из самых востребовательных и высокооплачиваемых...

29 05 2021 17:35:16

Self в Python

Self в Python представляет экземпляр класса. В отличие от этого в C ++, «я» не является ключевым словом, это всего лишь соглашение о кодировании. Часто пер...

28 05 2021 15:10:45

Создаем динамические веб-сайты с помощью PHP, MySQL, JavaScript и CSS (Р. Никсон)

Научитесь создавать современные динамические веб-сайты, даже если у вас нет опыта в программировании. Если вы умеете писать статические сайты на HTML, то с...

27 05 2021 11:59:29

Создайте библиотеку кнопок XAML в C#

В этом примере показано, как можно создать библиотеку кнопок XAML с возможностью повторного использования в WPF. Пример Создание шаблона кнопки WPF в C# ис...

26 05 2021 15:22:15

Преобразование строки в массив символов в C#

В этой статье мы напишем программу в C# для преобразования String в массив символов.   Источник: http://www.csharpstar.com/convert-string-to-character...

25 05 2021 1:25:59

Посмотрите, заблокирован ли файл на C#

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

24 05 2021 18:37:26

Используйте SQL-запросы для отображения данных master-detail в C#

В этом примере SQL-запросы запрашивают данные master-detail только тогда, когда это необходимо. В течение довольно долгого времени .NET-ish способ манипули...

23 05 2021 5:57:14

Списки клонов и массивы объектов в C#

Это последнее сообщение, которое я напишу о клонах, по крайней мере на некоторое время. Некоторые классы коллекций уже могут создавать клоны. Например, мас...

22 05 2021 8:38:14

Turbo Pascal: Учебник (С. А. Немнюгин)

Цель данного учебного курса - обучить программированию на Паскале, точнее, на том его расширении, которое было создано фирмой Borland и называется Турбо Па...

21 05 2021 1:37:26

Как создать документ Word в C#

В этом примере показано, как заставить C# создать документ Word. Сначала откройте диалоговое окно « Добавить ссылки». На вкладке COM выберите « Библиотека об...

20 05 2021 8:33:48

HashMap в Java

В терминах компьютерного программирования карта представляет собой набор ассоциаций между парами объектов. Java HashMap - это базовая реализация интерфейса...

19 05 2021 20:15:10

Используйте объект ImageAttributes для применения общих цветовых тонов к изображению в C#

В этом примере используются методы, аналогичные тем, которые описаны в post Используйте объект ImageAttributes для преобразования изображения в оттенки кра...

18 05 2021 23:54:38

1С:Предприятие. Конфигурирование и администрирование для начинающих (Владимир Дубянский)

В книге 1 С: Предприятие. Конфигурирование и администрирование для начинающих описаны основные приемы программирования и конфигурирования, общие для всех ком...

17 05 2021 20:17:19

Получить информацию о формате даты для локали компьютера в C#

Объект System.Globalization namespace's InstalledUICulture предоставляет множество статических методов, предоставляющих информацию о численном, дате и врем...

16 05 2021 1:49:32

LINQ. Карманный справочник (Джозеф Албахари, Бен Албахари)

Справочник посвящен технологии LINQ (Language Integrated Query) — новой функциональной возможности языка C# и платформы .NET Framework, которая позволяет п...

15 05 2021 1:42:40

Клонирование сериализуемых объектов в C#

Если класс сериализуем, то вы можете создать глубокий клон объекта из этого класса, сериализируя его и десериализируя его. В этом примере используется след...

14 05 2021 2:28:50

1С: Предприятие,Эффективное программирование (Т.Н. Усиков)

Описан встроенный язык программирования пакета «1 С: Предприятие», методы настройки и конфигурирования системы с его помощью. Дополнительно содержит необход...

13 05 2021 15:43:19

Язык JavaScript (Илья Контор)

Эта часть позволит вам изучить Javascript с нуля или упорядочить и дополнить существующие знания. Мы будем использовать браузер в качестве окружения, но ос...

12 05 2021 0:37:43

Класс BufferedReader в Java

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

11 05 2021 2:24:33

Кортеж (Tuple) в Python

Кортеж представляет собой совокупность неизменных Python объектов, разделенных запятыми. Кортежи похожи на списки, но мы не можем изменить элементы кортежа...

10 05 2021 1:42:39

Выполнение нескольких действий по умолчанию в C#

Иногда (но не часто!) полезно, чтобы форма выполняла несколько действий по умолчанию в зависимости от той части формы, которую использует пользователь. В э...

09 05 2021 1:41:28

Delphi 6. Учебный курс (В. В. Фаронов)

В книге "Delphi 6. Учебный курс" даются начальные сведения по системе программирования Delphi, разработанной американской корпорацией Borland International...

08 05 2021 22:34:50

If, else, Switch в JavaScript

Все языки программирования предоставляют инструкции управления потоком, которые позволяют вам контролировать порядок выполнения кода. Условный оператор пре...

07 05 2021 22:40:42

Самоучитель С#. Начала программирования (Элеонора Ишкова)

Данная книга является превосходным и эффективным учебным пособием для изучения языка программирования С# с нуля. Правила и приемы С# иллюстрируются програм...

06 05 2021 19:41:56

Добавьте экран UAC для управления в C#

В Windows Vista и более поздних версиях Windows вы должны добавить экран UAC (контроль доступа пользователя) к кнопкам, запускающим процессы, требующие пов...

05 05 2021 5:51:42

Сохранение изображений в базе данных Access в WPF и C#

Пример Отображение изображений в Доступ к базе данных в WPF и C# показывает, как вы можете отображать изображения, сохраненные в базе данных Access. Конечн...

04 05 2021 13:57:31

Программирование на Java

Сокет - одна из самых фундаментальных технологий программирования компьютерной сети. Это способ подключения двух узлов в сети для связи друг с другом. Прог...

03 05 2021 4:49:10

Еще:
Программирование -1 :: Программирование -2 :: Программирование -3 :: Программирование -4 :: Программирование -5 ::

И сказал Великий Программист:
«После трёх дней без программирования жизнь теряет смысл»