Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2009, 07:41   #1
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
Вопрос Закрыть Form2

Вот код формы 1:
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        Form2  form2; // обьявление обьекта второй формы
        public Form1()
        {
            InitializeComponent();
            form2 = new Form2(); // создание обьекта при открытии главной формы    
        }

        private void button1_Click(object sender, EventArgs e)
        {
            form2.Show();   
        }
    }
}
Вот код формы 2:
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form2 : Form
    {
        int Tc;
        
        
        public Form2()
        {
            InitializeComponent();
        }
        
        private void timer1_Tick(object sender, EventArgs e)
        {
            Tc = Tc++;
            if (Tc == 10) 
            {
               //ВОТ СЮДА НАДО ВСТАВИТЬ ЗАКРЫТИЕ ФОРМЫ 2 
            }

        }

        private void numericUpDown1_ValueChanged(object sender, EventArgs e)
        {
            if (this.numericUpDown1.Value == 6)
            {
                this.numericUpDown1.Value = 0;
            }
            if (this.numericUpDown1.Value == -1)
            {
                this.numericUpDown1.Value = 5;
            }
        }
    }
}
Как закрыть форму2? Я чё только не пробовал не могу найти, только начинаю учить Си Шарп, на Delphi уже программы пишу, а тут не могу и всё.
И почему this.numericUpDown1.Value = 5; - работает, а
WindowsFormsApplication1.Form2.nume ricUpDown1.Value = 5; - не работает? Вообще недоумеваю.
Casper-SC вне форума Ответить с цитированием
Старый 15.12.2009, 08:43   #2
akasex
Форумчанин Подтвердите свой е-майл
 
Аватар для akasex
 
Регистрация: 31.03.2008
Сообщений: 179
По умолчанию

get a book already....
akasex вне форума Ответить с цитированием
Старый 15.12.2009, 10:44   #3
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

Чтобы закрыть form2.Close();
А чтобы обратиться к numericUpDown1 на form2, у тебя должен быть public модификатор у контрола numericUpDown1. Тут 2 варианта:
1. В дизайнере меняешь модификатор на public и обращаешься form2.numericUpDown1.Value
2. На form2 делаешь public метод который вернет значение твоего контрола. Пример:
в form2
Код:
public int GetNumericValue()
{
return this.numericUpDown1.Value;
}
в form1:
Код:
int value = form2.GetNumericValue();
2-ой вариант лучше.
Hollander вне форума Ответить с цитированием
Старый 15.12.2009, 18:06   #4
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию

Form2.Close(); - Вот именно не работает. Там даже в всплывающем окошке нету такого метода.
Код:
 public void timer1_Tick(object sender, EventArgs e)
        {
            Tc = Tc + 1;
            if (Tc == 4) 
            {
                this.Close(); //Только так работает
            }

        }
Может просто тут так и принято вызывать форму, даже не знаю.
Casper-SC вне форума Ответить с цитированием
Старый 15.12.2009, 18:10   #5
SunKnight
Участник клуба Подтвердите свой е-майл
 
Аватар для SunKnight
 
Регистрация: 14.12.2007
Сообщений: 1,434
По умолчанию

Почему то мне кажется что метод Close в классе Form2 является private.
Проповедую design patterns, верую в MVC, доверяю eXtrime programming.
SunKnight вне форума Ответить с цитированием
Старый 16.12.2009, 07:00   #6
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию

А помоему тут просто принцип другой, тоесть наверное нету смысла обращаться WindowsFormsApplication1.Form2.nume ricUpDown1.Value = 5;, видимо вариант один this, это как в Delphi - Self, я думаю.
Casper-SC вне форума Ответить с цитированием
Старый 16.12.2009, 10:13   #7
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

Нужно писать не WindowsFormsApplication1.Form2.Clos e()
а form2.Close(); т.е. обращатся к !объекту формы
Hollander вне форума Ответить с цитированием
Старый 16.12.2009, 11:54   #8
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию

Цитата:
Сообщение от Hollander Посмотреть сообщение
Нужно писать не WindowsFormsApplication1.Form2.Clos e()
а form2.Close(); т.е. обращатся к !объекту формы
Если кто действительно хочет помочь, то пожалуйста читайте самое начало темы, я же исходник выложил полный. Нельзя таким образом закрыть форму, метод Close() , вот его описание:
Код:
//
        // Сводка:
        //     Закрывает форму.
        //
        // Исключения:
        //   System.InvalidOperationException:
        //     Форма была закрыта при создании дескриптора.
        //
        //   System.ObjectDisposedException:
        //     Нельзя вызывать этот метод из события System.Windows.Forms.Form.Activated,
        //     если свойство System.Windows.Forms.Form.WindowState задано как System.Windows.Forms.FormWindowState.Maximized.
        public void Close();
как видите public

Кстати в одной книжке посмотрел пример написания простейшей программы, типа пересчёт валют, так там при нажатии по кнопки "Завершить" (обычный button) написано: this.Close();

Последний раз редактировалось Casper-SC; 16.12.2009 в 12:03.
Casper-SC вне форума Ответить с цитированием
Старый 17.12.2009, 10:32   #9
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

Блин, я тупанул я думал ты хочешь закрыть из 1-ой формы 2-ую. Теперь понял.
Код:
 private void timer1_Tick(object sender, EventArgs e)
        {
            Tc = Tc++;
            if (Tc == 10) 
            {
              this.CLose();
            }

        }
Hollander вне форума Ответить с цитированием
Старый 25.12.2009, 20:36   #10
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию

Текущий объект имеет зарезервированное имя this. Применяя это имя, любой неквалифицированный вызов можно превратить в квалифицированный вызов. Иногда без этого имени просто не обойтись.
Casper-SC вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
переменные form2 на form1 motaro Общие вопросы Delphi 16 28.09.2009 07:49
Form1 & Form2 Alex Cones Общие вопросы Delphi 4 31.07.2009 21:50
Delphi. Form1 и Form2. Xeon332 Общие вопросы Delphi 8 01.11.2008 15:52
form1 и form2 SLIMMUS Общие вопросы Delphi 3 29.10.2008 01:15
then Form2.Show; beegl Общие вопросы Delphi 24 24.07.2008 09:53