3 / 0 / 0
Регистрация: 10.01.2014
Сообщений: 17
1

Переход одной формы в другую

13.01.2014, 12:20. Показов 18741. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Прикрепляю картинку к своему вопросу, чтобы наглядно было лучше понятно.
Переход одной формы в другую

Теперь вопрос. Возможно он покажется элементарным и такое даже спрашивать всем стыдно (поскольку я не смог найти ответа, а искал несколько дней), но вы не смейтесь, а расскажите как правильно сделать.

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

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

И вот наконец вопрос. Как сделать вот такие штуки?
Я знаю, что можно сделать форму1 , форму2, форму3 и т.д. и открывать их и закрывать, но что-то мне подсказывает, что в программах которые я использую повседневно все сделано совсем не так. будто бы в одной и той же форме происходят действия.
была мысль сделать все через вкладки (TabControl). Убрать названия вкладок, и тайным способом переключать их... да, так работало на дэлфи, но тут почему-то не вышло. Была попытка наделать панелей в конструкторе (Panel) и включать и выключать их, но думается, что это что-то не то, да и не удобно до жути.
Так вот, думается, что есть еще способ, когда внутри формы открывается какой-то элемент, либо другая форма (внутри нашей первой, а не сверху нашей формы в виде нового окна), которая содержит уже необходимые нам ингредиенты(;
я прошу знающего человека сказать, как делают это умные люди.

p.s. я знаю, что что-то можно в wpf сделать, но это совсем другая история, и этому нужно по новой учиться, а до него ведь тоже как-то делалось...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.01.2014, 12:20
Ответы с готовыми решениями:

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

Переход от одной формы к другой и ошибка при закрытии одной из них
Здравствуйте! Есть 2 формы. Из одной перехожу во вторую по нажатию кнопки, со второй возвращаюсь в...

Монополия: сделать переход фишками с одной ячейки в другую
Как сделать переход фишками с одной ячейки в другую?

Переход от одной формы к другой
Как сделать переход от одной формы к другой C#? Переход как бы есть! он очень медленный ,можно...

15
708 / 708 / 226
Регистрация: 04.03.2013
Сообщений: 1,384
13.01.2014, 12:42 2
Форма в форме - multiple-document interface (MDI).
Вот первые две ссылки по запросу "mdi forms tutorial c#":
http://msdn.microsoft.com/en-u... .110).aspx
http://www.youtube.com/watch?v=-4EYhC9xDHo
2
3 / 0 / 0
Регистрация: 10.01.2014
Сообщений: 17
13.01.2014, 12:56  [ТС] 3
Здорово. Я о таком и не слышал. Посмотрел видео, стало что-то понятней. Но мой случай, все же, не совсем этот случай. Форма в форме = это круто, но если ты присмотришься к картинкам, то я описывал нечто другое. Не знаешь ли еще способы? Либо с помощью MDI все же получится так сделать?
0
708 / 708 / 226
Регистрация: 04.03.2013
Сообщений: 1,384
13.01.2014, 13:05 4
Можно сделать с помощью MDI, можно при открытии вторичной формы скрывать основную, а потом снова показывать.

Добавлено через 2 минуты
Простейший вариант через диалоговый показ второй формы:
C#
1
2
3
4
5
6
7
8
//обработчик кнопки на первой форме
private void button1_Click(object sender, EventArgs e)
{
    Form2 f = new Form2();
    this.Hide();
    f.ShowDialog();
    this.Show();
}
0
3 / 0 / 0
Регистрация: 10.01.2014
Сообщений: 17
13.01.2014, 15:08  [ТС] 5
потому способ с двумя формами я и не хочу, что , видно это появление и исчезновение (даже если сделать появление в одинаковых местах).
любой установщик запускаем, и там это "далее, далее" не открывает и не закрывает форму.
потому вопрос остается открытым. а я пока помучаю это МДИ

Добавлено через 1 час 7 минут
Вот к чему я пришел:
Создаю форму. И создаю несколько "Пользовательский элемент управления". И запускаю программно их на этой форме.

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

Добавлено через 48 минут
С "Пользовательским элементом управления" тоже видимо косяк. Не получается передать с него на основную форму, что его нужно закрыть. (;
0
608 / 583 / 157
Регистрация: 29.06.2010
Сообщений: 1,620
13.01.2014, 17:05 6
можешь попробовать что-то наподобие этого, тоже UserControls:

форма
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
    public partial class UnitsForm : Form
    {
        private const int MaxUnits = 0x02;
        
        private int currentUnitIndex = 0x00;
        private int CurrentUnitIndex
        {
            get { return currentUnitIndex; }
            set
            {
                if (value < MaxUnits)
                    currentUnitIndex = value;
                else
                    currentUnitIndex = 0x00;
            }
        }
 
        public ChildrenUnit currentUnit = null;
        public UnitsForm()
        {
            InitializeComponent();
            AddUnit();
        }
 
        public void ChangeUnit(object sender, EventArgs e)
        { AddUnit(); }
 
        public void AddUnit()
        {
            if (currentUnit != null)
                DeleteUnit();
 
            switch (this.CurrentUnitIndex)
            {
                case 0x00: { this.currentUnit = new UnitOne(); break; }
                case 0x01: { this.currentUnit = new UnitTwo(); break; }
                default: { CurrentUnitIndex = 0x00; AddUnit(); return; }
            }
 
            this.currentUnit.Changing += ChangeUnit;
            this.Controls.Add(this.currentUnit);
            this.CurrentUnitIndex++;
        }
 
        public void DeleteUnit()
        {
            this.currentUnit.Changing -= ChangeUnit;
            this.currentUnit.Dispose();
 
            this.Controls.Remove(currentUnit);
        }
    }
}

контролы
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
    public abstract class ChildrenUnit: UserControl
    {
        public const int UnitWidth = 300;
        public const int UnitHeight = 300;
        public const int UnitLeft = 15;
        public const int UnitTop = 15;
 
        public event EventHandler Changing;
 
        public ChildrenUnit()
        {
            this.Size = new System.Drawing.Size(UnitWidth, UnitHeight);
            this.Location = new System.Drawing.Point(UnitLeft, UnitTop);
 
            Button btnChange = new Button();
            btnChange.Dock = DockStyle.Bottom;
            btnChange.Text = "Следующий юнит";
            btnChange.Click += new EventHandler((sndr, e) => Changing(sndr, e));
 
            this.Controls.Add(btnChange);
        }
    }
 
    public class UnitOne : ChildrenUnit
    {
        public UnitOne()
            : base()
        {
            this.Controls.Add(new Button() { Location = new System.Drawing.Point(100, 100) });
        }
    }
 
    public class UnitTwo : ChildrenUnit
    {
        public UnitTwo()
            : base()
        {
            this.Controls.Add(new ListBox(){Location=new System.Drawing.Point(100,100)});
        }
    }
}


Добавлено через 13 минут
хм... так организовать контролы будет правильнее:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
    public abstract class ChildrenUnit: UserControl
    {
        public const int UnitWidth = 300;
        public const int UnitHeight = 300;
        public const int UnitLeft = 15;
        public const int UnitTop = 15;
 
        protected abstract string ButtonCaption { get; }
        public event EventHandler Changing;
 
        public ChildrenUnit()
        {
            this.Size = new System.Drawing.Size(UnitWidth, UnitHeight);
            this.Location = new System.Drawing.Point(UnitLeft, UnitTop);
 
            Button btnChange = new Button();
            btnChange.Dock = DockStyle.Bottom;
            btnChange.Text = ButtonCaption;
            btnChange.Click += new EventHandler((sndr, e) => Changing(sndr, e));
 
            this.Controls.Add(btnChange);
        }
    }
 
    public class UnitOne : ChildrenUnit
    {
        protected override string ButtonCaption { get { return "Перейти к контролу 2"; } }
 
        public UnitOne()
            : base()
        {
            this.Controls.Add(new Button() { Location = new System.Drawing.Point(100, 100) });
        }
    }
 
    public class UnitTwo : ChildrenUnit
    {
        protected override string ButtonCaption { get { return "Вернуться к контролу 1"; } }
 
        public UnitTwo()
            : base()
        {
            this.Controls.Add(new ListBox(){Location=new System.Drawing.Point(100,100)});
        }
    }
}


Добавлено через 7 минут
Цитата Сообщение от amebow Посмотреть сообщение
Не получается передать с него на основную форму, что его нужно закрыть. (;
и сразу представляется такой матёрый контрол-рецедивист, которого опять "закрыли" за грабёж со взломом). этож не форма, кто-ж его закроет?)

контрол можно задиспозить, либо удалить из коллекции контролов формы. передать необходимость этого события, уж простите за тавтологию, можно с помощью события (у меня событие представлено как EventHandler Changing, которое вызывается при событии нажатия на кнопку, добавленную конструкторе абстрактного контрола)
1
3 / 0 / 0
Регистрация: 10.01.2014
Сообщений: 17
13.01.2014, 17:24  [ТС] 7
спасибо. еще не смотрел, но заранее уверен, что теперь сдвинусь с мертвой точки.
ну контрол отлично закрывается из формы его вызвавшей, а вот сам из себя - не получилось(((;
но сейчас посмотрим, что мне там было предложено
0
608 / 583 / 157
Регистрация: 29.06.2010
Сообщений: 1,620
13.01.2014, 18:02 8
C#
1
this.Dispose();//в контексте класса-контрола, и всё удаляется)
0
3 / 0 / 0
Регистрация: 10.01.2014
Сообщений: 17
14.01.2014, 14:31  [ТС] 9
Spectral-Owl, не получается это. по разному пробовал вставлять приведенный текст, но всегда выдает ошибки. и просто так вставить - то же самое. это так замысловато, оказалось. видимо, сидеть мне в одной форме, и не париться.
0
608 / 583 / 157
Регистрация: 29.06.2010
Сообщений: 1,620
14.01.2014, 15:31 10
э... единственное что может вызывать осложнения это пространства имён... ща архив склепаю.
0
Эксперт .NET
1989 / 1448 / 339
Регистрация: 15.06.2012
Сообщений: 5,438
Записей в блоге: 3
14.01.2014, 15:32 11
Я бы использовала контролы, причему логику тоже вклинивал в контролы. Что-то такого плана:

Создаем абстрактный базовій контрол с событием закрытия.
Реализуем нужные интерфейсы. При клике на меню замещаем (или просто скрываем) меню и отображаем указанный контрол. При вызове закрития удаляем контрол и возращаем меню.
Всю логику работы размещаем на контроле.

Если не ясно, то поздно вечером могу скинуть пример.
0
608 / 583 / 157
Регистрация: 29.06.2010
Сообщений: 1,620
14.01.2014, 15:34 12
обещанный архив
Вложения
Тип файла: rar WinTest.rar (50.0 Кб, 151 просмотров)
2
Эксперт .NET
1989 / 1448 / 339
Регистрация: 15.06.2012
Сообщений: 5,438
Записей в блоге: 3
14.01.2014, 16:56 13
Цитата Сообщение от Spectral-Owl Посмотреть сообщение
обещанный архив
приблизительно такое я и предлагал.
0
3 / 0 / 0
Регистрация: 10.01.2014
Сообщений: 17
15.01.2014, 09:44  [ТС] 14
Spectral-Owl, спасибо большое. именно такой результат я и имел ввиду. теперь разберу все по полочкам.
0
0 / 0 / 1
Регистрация: 26.12.2013
Сообщений: 5
15.01.2014, 11:46 15
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
using System;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            tabControl1.DrawMode = TabDrawMode.OwnerDrawFixed;
            tabControl1.Appearance = TabAppearance.Buttons;
            tabControl1.ItemSize = new System.Drawing.Size(0, 1);
            tabControl1.SizeMode = TabSizeMode.Fixed;
            tabControl1.TabStop = false;
        }
        // Кнопка на первой закладке
        private void button1_Click(object sender, EventArgs e)
        {
            tabControl1.SelectedIndex = 1;
        }
        // Кнопка на второй закладке
        private void button2_Click(object sender, EventArgs e)
        {
            tabControl1.SelectedIndex = 0;
        }
    }
}
0
Эксперт .NET
1989 / 1448 / 339
Регистрация: 15.06.2012
Сообщений: 5,438
Записей в блоге: 3
15.01.2014, 17:49 16
Цитата Сообщение от BrainS Посмотреть сообщение
tabControl
Табы вещь интересная, но требуют постоянного присутствия всех элементов. На мой взгляд, это не сильно красиво и практическое тоже самое, что накидать n-ое количество панелей и отображать их по очереди.
0
15.01.2014, 17:49
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.01.2014, 17:49
Помогаю со студенческими работами здесь

Переход от одной формы к другой
Здравствуйте. Проблема стандартна - перейти из одной формы form1 во вторую form2 При этом, не...

Переход от одной формы к другой
У меня есть текстбокс и кнопка, так вот мне надо допустим ввел цифру 6 и прога сразу показала мне...

Плавный переход от одной формы к другой
Можно ли как то сделать плавный переход от одной формы к другой? А то быстрый переход прямо режет...

Информация с одной формы на другую
Столкнулся с такой проблемой, что нужно со второстепенной формы вывести число на главную(Число это...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

Новые блоги и статьи
Как написать микросервис на Go/Golang
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
Как написать микросервис с нуля на C#
InfoMaster 14.01.2025
В современном мире разработки программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот архитектурный подход предполагает. . .
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
Как создать игру "Танчики" на Unity3d и C#
InfoMaster 14.01.2025
Разработка игр – это увлекательный процесс, сочетающий в себе творчество и технические навыки. В этой статье мы рассмотрим создание классической игры "Танчики" с использованием Unity3D и языка. . .
Организую платный онлайн микро-курс по доработке Android-клиента Telegram
_Ivana 14.01.2025
Официальная версия и распространенные форки не полностью устраивают? Сделай свою кастомную версию клиента! 4 занятия по 2 часа (2 недели пн, ср 19:00-21:00 по Москве). Первое вводное занятие. . .
Как создать приложение для фитнеса для iOS/iPhone на Kotlin
InfoMaster 14.01.2025
Создание собственного фитнес-приложения — это не только захватывающий, но и полезный процесс, ведь оно может стать вашим верным помощником на пути к здоровому и активному образу жизни. В современных. . .
Как создать приложение магазина для iOS/iPhone на Swift
InfoMaster 14.01.2025
Введение в разработку iOS-приложений Разработка приложений для iPhone и других устройств на базе iOS открывает огромные возможности для создания инновационных мобильных решений. В данной статье мы. . .
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution https:/ / www. cyberforum. ru/ blogs/ 223907/ blog8781. html прилагаю файл архива проекта в Gowin Eda. Восьмибитный счётчик из сумматора+ генератор сигнала. . .
UserScript для подсветки кнопок языков программировани­­­­я в зависимости от текущего раздела
volvo 13.01.2025
В результате работы этого скрипта подсвечиваются нужные кнопки не только в форме быстрого ответа, но и при редактировании сообщения: / / ==UserScript== / / @name CF_DefaultLangSelect / / . . .
Введение в модели и алгоритмы машинного обучения
InfoMaster 12.01.2025
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей искусственного интеллекта, которая фокусируется на разработке алгоритмов и методов, позволяющих компьютерам. . .
Как на Python создать нейросеть для решения задач
InfoMaster 12.01.2025
В контексте стремительного развития современных технологий особое внимание уделяется таким инструментам, как нейросети. Эти структуры, вдохновленные биологическими нейронными сетями, используются для. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru