Как сделать переход на другую форму в c
Перейти к содержимому

Как сделать переход на другую форму в c

  • автор:

Как сделать переход на другую форму в c

Чтобы добавить еще одну форму в проект, нажмем на имя проекта в окне Solution Explorer (Обозреватель решений) правой кнопкой мыши и выберем Add(Добавить)->Windows Form.

добавление новой формы

Дадим новой форме какое-нибудь имя, например, Form2.cs:

создание новой формы

Итак, у нас в проект была добавлена вторая форма. Теперь попробуем осуществить взаимодействие между двумя формами. Допустим, первая форма по нажатию на кнопку будет вызывать вторую форму. Во-первых, добавим на первую форму Form1 кнопку и двойным щелчком по кнопке перейдем в файл кода. Итак, мы попадем в обработчик события нажатия кнопки, который создается по умолчанию после двойного щелчка по кнопке:

private void button1_Click(object sender, EventArgs e)

Теперь добавим в него код вызова второй формы. У нас вторая форма называется Form2, поэтому сначала мы создаем объект данного класса, а потом для его отображения на экране вызываем метод Show:

private void button1_Click(object sender, EventArgs e)

Теперь сделаем наоборот — чтобы вторая форма воздействовала на первую. Пока вторая форма не знает о существовании первой. Чтобы это исправить, надо второй форме как-то передать сведения о первой форме. Для этого воспользуемся передачей ссылки на форму в конструкторе.

Итак перейдем ко второй форме и перейдем к ее коду — нажмем правой кнопкой мыши на форму и выберем View Code (Просмотр кода). Пока он пустой и содержит только конструктор. Поскольку C# поддерживает перегрузку методов, то мы можем создать несколько методов и конструкторов с разными параметрами и в зависимости от ситуации вызывать один из них. Итак, изменим файл кода второй формы на следующий:

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace HelloApp < public partial class Form2 : Form < public Form2() < InitializeComponent(); >public Form2(Form1 f) < InitializeComponent(); f.BackColor = Color.Yellow; >> >

Фактически мы только добавили здесь новый конструктор public Form2(Form1 f) , в котором мы получаем первую форму и устанавливаем ее фон в желтый цвет. Теперь перейдем к коду первой формы, где мы вызывали вторую форму и изменим его на следующий:

private void button1_Click(object sender, EventArgs e)

Поскольку в данном случае ключевое слово this представляет ссылку на текущий объект — объект Form1, то при создании второй формы она будет получать ее (ссылку) и через нее управлять первой формой.

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

Мы можем также создавать объекты и текущей формы:

private void button1_Click(object sender, EventArgs e)

При работе с несколькими формами надо учитывать, что одна из них является главной — которая запускается первой в файле Program.cs. Если у нас одновременно открыта куча форм, то при закрытии главной закрывается все приложение и вместе с ним все остальные формы.

Переход от формы к форме

Хотелось бы понять идеологию перехода на простой задаче, а то ее как то упускают из вида, наверное считая это само-собой разумеющимся.
Задача такая:
есть 3 формы, допустим абсолютно разные ос всякими контролами и примочками. Помимо этих контролов есть по 2 кнопки на форме.
Например кнопки на form1 должны отправлять на form2 и form3, скрывая form1. Аналочно для 2-х других.
Как это правильно реализовать!?

9 ответов

21 августа 2007 года
373 / / 30.04.2006
Form2 frm2 = new Form2();
frm2.Show();
this.Hide();
21 августа 2007 года
2 / / 21.08.2007

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

21 августа 2007 года
373 / / 30.04.2006

Можно его просто не хайдить. Тогда кликом мыши ) Увы, сейчас msdn под рукой нет, так что ничего конкретного сказать не могу. Но там ответ будет однозначно )

27 августа 2007 года
2 / / 27.08.2007

похожий вопрос, надо передать данные с контролов 2 формы, содание формы 2 чистая динамика, на контролы формы 1. скажем на примере textBox1 и Textbox2. на каждой форме есть по 1 экземпляру

02 сентября 2007 года
33 / / 02.09.2007

похожий вопрос, надо передать данные с контролов 2 формы, содание формы 2 чистая динамика, на контролы формы 1. скажем на примере textBox1 и Textbox2. на каждой форме есть по 1 экземпляру

Недавно сам искал ответ на этот вопрос.
Например при нажатии кнопки на второй форме пишешь в обработчик:
Form frmMain = Application.OpenForms[«Form1»];
Button btn1 = (Button)frmMain.Controls[«button1»];
btn1.Text = «новый текст»;//передаём новый текст на кнопку Form1

09 июля 2008 года
1 / / 09.07.2008

Тоже столкнулся с такой задачей, решил использованием .Handle;
и стат. класса для хранения хендлов всех используемых окон:

static public class CL
public static IntPtr F1Handle;
public static IntPtr F2Handle;
public static IntPtr F3Handle;
>

для скрытия окна:
F1Handle=F1.Handle;
this.Hide();

для его показа из любой другой формы:

наверное, для большого кол-ва окон проще использовать массив.

ой 🙂 дату не посмотрел :))

09 июля 2008 года
277 / / 11.10.2006

Помоему, все делается намного проще:-)
В Windows Forms, есть такое понятие как owner. Так вот. создавая форму, ей можно указать ее владльца, Form.owner, допустим, простой пример:

Form2 frm = new Form2();
frm.owner = this;
frm.Show();
this.Hide();

Потом, когда надо отобразить родителя формы: frm.owner.Show();

ЗЫ: за точность синтаксиса не ручаюсь, писал на ходу. Но, думаю, суть понятна 🙂

10 июля 2008 года
874 / / 21.12.2007

Вообще-то, такого рода проблемы становятся аткуальными вследствие неверного планирования бизнес-логики приложения. То, что одна форма вызывает другую форму/диалог, а сама тут же откалывается, не есть нермальный ход событий — оно и в жизни некорректно (вспомним Тома Сойера и его забор). Правильнее было бы завести класс, следящий за порядком и правилом отображения тех или иных компонентов пользователького интерфейса. Такая организация даст возможность более гибкого управления интерфейсом, а также нивелирует проблемы освобождения неиспользуемых форм/элементов управления. Конкретная же реализация зависит от поставленной задачи

Управление одной формой из другой

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

1-й способ. Передача ссылки в public переменную.

Перед открытием формы, передаем ссылку на нужный элемент в переменную public вызываемой формы.

namespace WindowsApplication1 < public partial class Form1 : Form < public Form1() < InitializeComponent(); >private void button1_Click(object sender, EventArgs e) < Form2 frm = new Form2(); frm.but1 = this.button1; // передаем ссылку на кнопку в форму Form2 frm.ShowDialog(); >> >

В форме Form2 переменная, в которую передавали ссылку, будет теперь соответствовать кнопке button1 из формы Form1

namespace WindowsApplication1 < public partial class Form2 : Form < public Button but1; // эта переменная будет содержать ссылку на кнопку button1 из формы Form1 public Form2() < InitializeComponent(); >private void button1_Click(object sender, EventArgs e) < but1.Text = "test"; // меняем текст на кнопке button1 формы Form1 >> >

2-й способ. Передача ссылки в дочернюю форму.

Суть примерна та же, то и в 1-м способе. При открытии формы Form2 передаем в нее ссылку на элемент, который планируем потом менять.

namespace WindowsApplication1 < public partial class Form1 : Form < public Form1() < InitializeComponent(); >private void button1_Click(object sender, EventArgs e) < Form2 frm = new Form2(this.button1); // передаем ссылку на кнопку в форму Form2 frm.ShowDialog(); >> >

Теперь в форме Form2 нужно создать переменную, которая будет содержать ссылку на эту кнопку и через нее будем обращаться к кнопке на Form1 (строки 5,7,9 и 15).

namespace WindowsApplication1 < public partial class Form2 : Form < private Button but1; // эта переменная будет содержать ссылку на кнопку button1 из формы Form1 public Form2(Button but) // получаем ссылку на кнопку в переменную but < but1 = but; // теперь but1 будет ссылкой на кнопку button1 InitializeComponent(); >private void button1_Click(object sender, EventArgs e) < but1.Text = "test"; // меняем текст на кнопке button1 формы Form1 >> >

3-й способ. Доступ ко всей родительской форме.

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

Шаг 1. В файле Program.cs создаем публичную переменную f1 (строка 5).

namespace WindowsApplication1 < static class Program < public static Form1 f1; // переменная, которая будет содержать ссылку на форму Form1 [STAThread] static void Main() < Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); >> >

Шаг 2. Открываем Form1.Designer.cs и в нем у элементов, к которым нужно будет обратиться из другой формы, меняем private на public . Например, сделаем доступной для изменений кнопку button1 на форме Form1.

public System.Windows.Forms.Button button1; // заменили private на public

Шаг 3. При создании формы Form1 присваиваем переменной f1 ссылку на эту форму (строка 7)

namespace WindowsApplication1 < public partial class Form1 : Form < public Form1() < Program.f1 = this; // теперь f1 будет ссылкой на форму Form1 InitializeComponent(); >private void button1_Click(object sender, EventArgs e) < Form2 frm = new Form2(); frm.ShowDialog(); >> >

Шаг 4. Теперь из абсолютно любой формы или из любого класса можно обратиться к элементу button1 находящемуся на Form1 так: Program.f1.button1. Например, пусть кнопка в Form2 поменяет текст кнопки на Form1:

namespace WindowsApplication1 < public partial class Form2 : Form < public Form2() < InitializeComponent(); >private void button1_Click(object sender, EventArgs e) < Program.f1.button1.Text = "test"; // Меняем текст на кнопке формы Form1 >> >

Использование кнопки для запуска действия или последовательности действий

Кнопки в формах Access используются для запуска действий или наборов действий . Например, кнопка может открывать другую форму. Чтобы кнопка запускала действие, нужно связать макрос или процедуру обработки событий со свойством Нажатие кнопки. Можно также внедрить макрос прямо в свойство Нажатие кнопки. Это позволит копировать кнопку в другие формы без потери ее функциональности.

В этой статье

  • Добавление кнопки в форму с помощью мастера
  • Создание кнопки перетаскиванием макроса в форму
  • Создание кнопки без использования мастера
  • Настройка кнопки

Добавление кнопки в форму с помощью мастера

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

  1. В области навигации щелкните форму правой кнопкой мыши и выберите в контекстном меню пункт Конструктор.
  2. На вкладке Конструктор в группе Элементы управления выберите параметр Использовать мастера .
  3. На вкладке Конструктор в группе Элементы управления щелкните элемент Кнопка.
  4. Щелкните форму в том месте, где должна находиться кнопка. Запустится мастер создания кнопок.
  5. Следуйте указаниям мастера. На его последней странице нажмите кнопку Готово. Мастер создаст кнопку и внедрит макрос в ее свойство Нажатие кнопки. Макрос будет содержать действия, выполняющие выбранную в мастере задачу.

Просмотр или изменение макроса, внедренного в кнопку

  1. Щелкните в области навигации правой кнопкой мыши форму с нужной кнопкой и выберите в контекстном меню пункт Конструктор или Режим макета .
  2. Щелкните кнопку, чтобы выделить ее, и нажмите F4, чтобы открыть окно ее свойств.
  3. В окне свойств на вкладке События в поле свойства Нажатие кнопки должен отображаться текст [Внедренный макрос]. Щелкните в этом поле и нажмите справа от него кнопку .

Откроется конструктор макросов, в котором будут показаны действия во внедренном макросе.

Создание кнопки перетаскиванием макроса в форму

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

  1. Чтобы открыть форму в режиме конструктора, щелкните ее правой кнопкой мыши в области навигации и выберите в контекстном меню пункт Конструктор .
  2. Найдите в области навигации макрос, который должна запускать новая кнопка, и перетащите его в форму. Access автоматически создаст кнопку и сделает ее подписью название макроса. Кроме того, Access вставит в свойство Нажатие кнопки имя макроса, чтобы он запускался при нажатии кнопки. Кнопка будет создана со стандартным именем, но лучше назначить ее свойству Имя какой-нибудь подходящий по смыслу текст. Чтобы отобразить окно свойств кнопки, когда форма открыта в режиме конструктора, щелкните кнопку и нажмите клавишу F4.

Дополнительные сведения о создании макросов см. в статье Создание макроса пользовательского интерфейса.

Создание кнопки без использования мастера

Кнопку можно создать и без мастера. Для этого нужно расположить кнопку на форме и настроить несколько свойств.

  1. Щелкните форму в области навигации правой кнопкой мыши и выберите в контекстном меню пункт Конструктор .
  2. Убедитесь, что на вкладке Конструктор в группе Элементы управления параметр Использовать мастера не установлен или отмените его выбор.
  3. На вкладке Конструктор в группе Элементы управления щелкните элемент Кнопка.
  4. Щелкните форму в том месте, где должна находиться кнопка. Access добавит кнопку в форму. Поскольку параметр Использовать мастера не установлен, больше ничего сделано не будет. Если при добавлении кнопки в форму запустится мастер создания кнопок, можете нажать в нем кнопку Отмена.
  5. Выделите кнопку и нажмите F4, чтобы отобразить окно ее свойств.
  6. Откройте вкладку Все, чтобы отобразить все свойства кнопки.
  7. Задайте нужные свойства, руководствуясь указаниями в таблице ниже.

По умолчанию Access назначает новой кнопке имя Кнопка и добавляет к нему число, например Кнопка34. Рекомендуется изменить такое имя на что-либо более выразительное (например, Отчет о продажах или Закрыть форму). Это поможет, когда кнопку нужно будет использовать в макросе или процедуре обработки событий.

Введите метку, которая будет отображаться на кнопке. Например, «Отчет о продажах» или «Закрыть форму».

Примечание: Если свойству Рисунок кнопки назначено изображение, подпись не отображается.

Нажатие кнопки

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

  • Чтобы кнопка запускала сохраненный макрос, щелкните стрелку вниз и выберите имя нужного макроса.
  • Чтобы кнопка запускала встроенную функцию или функцию VBA, введите знак равенства (=) и имя функции, например =MsgBox(«Привет, мир») или =MyFunction(аргументы).
  • Чтобы создать выражение, нажмите и выберите пункт Выражения.
  • Чтобы начать создание процедуры обработки событий на Visual Basic для приложений (VBA), нажмите и выберите пункт Программы. Чтобы создать внедренный макрос с действиями, которые будет запускать кнопка, нажмите и выберите пункт Макросы.

Примечание: Базам данных Access, содержащим код VBA, для выполнения кода необходимо предоставить статус надежных.

Чтобы получить справку по свойствам, которые здесь не описаны, поместите курсор в поле свойства и нажмите клавишу F1.

Настройка кнопки

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

  1. Щелкните форму в области навигации правой кнопкой мыши и выберите пункт Конструктор .
  2. Выполните одну из описанных ниже процедур.
  3. Создание горизонтального (табличного) или вертикального (в столбик) макета кнопок Добавив кнопки в табличный макет или макет в столбик, можно создать строку или столбец точно выровненных кнопок. Затем их можно перемещать как группу, что упрощает изменение форм. Кроме того, вы можете применить форматирование сразу ко всей строке или столбцу кнопок либо отделить кнопки с помощью линий сетки.
    1. Щелкните правой кнопкой мыши одну из кнопок, которые нужно добавить в макет, и наведите указатель на пункт Макет в контекстном меню.
    2. Выберите пункт В виде таблицы или В столбик , чтобы создать соответственно строку или столбец кнопок. Access отобразит границы кнопки, чтобы показать ее макет. У каждой кнопки есть метка, которую нельзя удалить, но можно ужать до очень маленького размера, если она не нужна. На рисунке ниже показаны кнопка и связанная с ней метка в табличном макете. Как видите, метка находится в соседнем разделе выше — это позволяет не повторять метки для каждой записи. На рисунке ниже показаны кнопка и связанная с ней метка в макете в столбик. В таком макете метка и кнопка всегда расположены в одном разделе.
    3. Добавьте в макет другие кнопки, перетащив их в область макета. При перетаскивании кнопки по области макета в Access отображается горизонтальная (для табличного макета) или вертикальная (для макета в столбик) полоса вставки, которая показывает, где окажется кнопка, когда вы отпустите кнопку мыши. Когда вы отпустите кнопку мыши, элемент управления будет добавлен в макет.
    4. Перемещение кнопок в раздел выше или ниже в табличном макете. Если вы хотите оставить кнопку в табличном макете, но переместить ее в другой раздел формы (например, из раздела сведений в раздел заголовка формы), выполните указанные ниже действия.
      1. Выделите кнопку.
      2. На вкладке Упорядочить выберите команду Вверх или Вниз. Кнопка переместится в соседний раздел выше или ниже, но останется в табличном макете. Если в том месте, куда вы перемещаете кнопку, уже есть элемент управления, они поменяются местами.

      Примечание: В макете в столбик команды Вверх и Вниз отключены.

      1. Щелкните любую из кнопок в макете. В левом верхнем углу макета появится значок селектора.
      2. Чтобы переместить макет в другое место, перетащите селектор.
      1. Выделите любую из кнопок в макете.
      2. На вкладке Упорядочить нажмите кнопку Сетка и выберите стиль линий сетки.

      Примечание: Выбор для свойства «Прозрачность» для кнопки «Да» — не то же самое, что для свойства «Видимый»«Нет». Обе операции скрывают кнопку, но если для свойства «Прозрачность» установить «Да», кнопка остается включенной. Если для свойства «Видимый» установить «Нет», кнопка будет отключена.

      Команды в группе

  4. Отображение кнопки в виде гиперссылки При желании можно скрыть кнопку, но оставить ее подпись. В результате получится элемент управления, который выглядит как надпись, но работает как кнопка. Можно также подчеркнуть текст подписи и изменить его цвет, чтобы он выглядел как гиперссылка.
    1. Щелкните кнопку, чтобы выделить ее, и нажмите F4, чтобы открыть окно ее свойств.
    2. В окне свойств на вкладке Макет щелкните поле Тип фона.
    3. В раскрывающемся списке выберите вариант Прозрачный. Кнопка будет скрыта, но ее подпись останется видимой.
    4. Чтобы подчеркнуть текст подписи или изменить его цвет, воспользуйтесь инструментами из группы Шрифт на вкладке Формат.
  5. Создание кнопки «Отмена»
    1. Щелкните кнопку и нажмите F4, чтобы открыть окно ее свойств.
    2. В поле свойства Отмена выберите значение Да. Если свойство «Отмена» для кнопки имеет значение «Да» и форма является активной, пользователь может выбрать ее, щелкнув ее, нажав клавишу ESC или клавишу ВВОД, когда кнопка фокус. Если для свойства «Отмена» одной кнопки установлено «Да», для всех остальных кнопок формы оно автоматически получает ответ «Нет». Чтобы кнопка «Отмена» отменяла все действия, выполненные в форме или диалоговом окне, нужно создать соответствующий макрос или процедуру обработки событий и связать их со свойством Нажатие кнопки.

      Примечание: Если в форме разрешены необратимые операции (например, удаление), рекомендуется сделать кнопку «Отмена» используемой по умолчанию. Чтобы сделать это, установите значение Да для свойств По умолчанию и Отмена.

      1. Добавьте рисунок на кнопку по приведенным ранее инструкциям
      2. Выделите кнопку. Если окно ее свойств не отобразится, нажмите клавишу F4.
      3. В окне свойств кнопки на вкладке Макет введите нужную подпись в поле свойства Подпись.
      4. Щелкните стрелку вниз в поле свойства «Расположение подписей рисунков» и выберите нужный уклад. Например, чтобы подпись отображалась под рисунком, выберите «Снизу». Чтобы отобразить подпись справа от рисунка, выберите «Справа». Чтобы расположение было зависеть от системного региональных порядоков, выберите «Общие». При использовании этого параметра подпись будет отображаться справа на языках с текстом слева направо, а слева на языках, которые читают текст справа налево.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *