Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Вызов существующей формы


Автор: PashaSem 1.5.2006, 00:20
Помогите разобраться новичку. Спасибо за понимание.
В проекте две формы.
В  Solution Explorer добавили новую форму Form2.cs, как ее вызвать из Form1.cs по клику кнопки?

И чтоб во  второй форме  listBox1 отображал данные которые выводились в listbox первой формы?
Как и через что передавать данные?

Спасибо

 

Автор: Softaz 1.5.2006, 00:59
Цитата(PashaSem @  1.5.2006,  00:20 Найти цитируемый пост)
В  Solution Explorer добавили новую форму Form2.cs, как ее вызвать из Form1.cs по клику кнопки?


Например, вызываем Form2 из Form1:
Если Вы ничего не меняли, то имя класса должно быть Form2
Код

Form2 frm2 = new Form2();
frm2.Show();


Цитата(PashaSem @  1.5.2006,  00:20 Найти цитируемый пост)
И чтоб во  второй форме  listBox1 отображал данные которые выводились в listbox первой формы?

Способов полно, имхо лучший - создать структуру или класс (лучше в новом отдельном файле) и заполнять ее из listBox1. Далее писать в listBox2. 

Автор: Gesha 4.5.2006, 14:58
Цитата(PashaSem @  1.5.2006,  00:20 Найти цитируемый пост)
И чтоб во  второй форме  listBox1 отображал данные которые выводились в listbox первой формы?Как и через что передавать данные?


Можно так:
Конструктору второй формы передаешь ObjectCollection листбокса (который на первой форме). 
Получится следующее:
обработчик нажатия кнопки на форме1
Код

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2(listBox1.Items);
            f2.ShowDialog();
        }


конструктор формы2
Код

        public Form2(ListBox.ObjectCollection col)
        {
            InitializeComponent();

            listBox2.Items.AddRange(col);
        }
 

Автор: STEEL98 30.5.2006, 12:45
А если мне необходимо передать из editbox-а Form2 , в label Form1 текс?  

Автор: ivashkanet 30.5.2006, 13:19
То на форме Form2 у тебя должна быть ссылка на  label в Form1, либо на всю форму Form1
Код

1) savedRefOnLabel.text ="jfhjsdhfjksdh"
2) savedRefOnForm1.Label.text ="dsdsddd"


Добавлено @ 13:21 
P.S. Ссылка на форму, это просто переменная типа Form1 (либо Form), которой была присвоена Form1
Аналогично про label  smile  

Автор: STEEL98 30.5.2006, 15:49
   Form1 fm = new Form1();
вот переменная на форму.. как сделать на label? 

Автор: ivashkanet 30.5.2006, 16:08
Цитата(STEEL98 @  30.5.2006,  15:49 Найти цитируемый пост)
Form1 fm = new Form1();

Не так, ты не понял.
В форме f2 должно быть свойство:
Код


form1 f1;

При создании экземпляра формы 2 ты делаешь такую штуку:
Код

f2 = new Form2();
f2.f1=this; // сохраняем ссылку на основную форму
f2.Show()

А теперь можно обратиться из формы 2 к форме 1:
Код

this.f1.Text="sfdf"

 

Автор: ckopn 22.6.2006, 09:03
Есть форма 1 

        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Form f1 = new Form1();
            Application.Run(f1);

и форма 2

 private void button5_Click(object sender, EventArgs e)
        {
            
            Form2 f2 = new Form2();
            f2.ShowDialog();
            
        }

как при появлении формы 2
преносить текст из текстбоксов ф1 в лайбелы ф2?

 private void Form2_Load(object sender, EventArgs e)
        {
f2.label1.Text=  f1.TextBox1.Text;
        }

что за дела? некатит!!! нужно добавить Инклуд??? Но это же не билдер =(
 

Автор: ivashkanet 22.6.2006, 09:29
Цитата(ckopn @  22.6.2006,  09:03 Найти цитируемый пост)
f1

На второй форме должна быть рабочая  smile ссылка на объект первой формы.
Глянь http://forum.vingrad.ru/index.php?showtopic=94074&view=findpost&p=747894 пост
P.S.  smile Используйте теги code для подсветки кода smile   

Автор: ckopn 22.6.2006, 09:36
Непомогло  smile 
какой код нужно добавить?
я непонимаю
в билдере все так прсото. добавить нужно инклуде и имя заголовочного файла формы , чьи элементы нужно использовать. А тут как? 

Автор: ivashkanet 22.6.2006, 09:46
Цитата(ivashkanet @  22.6.2006,  09:29 Найти цитируемый пост)
Глянь этот пост

Перичитай мой пост 

Автор: ckopn 22.6.2006, 10:18
хотел обойти эту фишку через статические перененные.
но не получилось =(
Код

    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        static string f;
        static string i;
        static string o;
        static string org;
        static string dol;
        [STAThread]
        
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Form f1 = new Form1();
            Application.Run(f1);
        }
    }



потом в обработчике

Код

        private void button5_Click(object sender, EventArgs e)
        {
            this.textBox1.Text = f; 
            Form2 f2 = new Form2();
            
            f2.ShowDialog();
        }


читал пост , непонимаю тебя ivashkanet
подскажи что нужно сделать?

выскакивает вот такая ошибка Error    2    The name 'f2' does not exist in the current context    D:\Visual Studio 2005\Projects\bedjiki\bedjiki\Form2.cs    24    13    bedjiki

но ведь неймспейс  у форм один и тотже ? почему они нехотят контактировать?
 

Автор: ivashkanet 22.6.2006, 10:49
Цитата(ckopn @  22.6.2006,  10:18 Найти цитируемый пост)
но ведь неймспейс  у форм один и тотже ? почему они нехотят контактировать?

Самая главная проблемма в том, что в C# нет глобальных переменных smile На уровне namespace-а могут быть только классы. Ничего больше smile 

Цитата(ckopn @  22.6.2006,  10:18 Найти цитируемый пост)
The name 'f2' does not exist in the current context

Правильная ошибка. Ведь у тебя на второй форме нет поля с именем f2. Это поле первой формы.  Во второй форме нужно обращаться к ней (к самой себе, т.е.) через this, или без него вовсе.
Хоть что-то разъяснил?

 

Автор: Kefir 22.6.2006, 11:25
эммм... я думаю, что намного проще (и понятнее автору темы) будет сделать так:
1. перенести зхначение f1.label1.Text в f2.label1.Text:
Код

onClick( ... )
{
  Form2 f2 = new Form2();
  f2.label1.Text = f1.label1.Text;
  f2.Show();
}


2. перенести зхначение f2.label1.Text в f1.label1.Text:
Код

onClick( ... )
{
  Form2 f2 = new Form2();
  f2.Show();
  f1.label1.Text = f2.label1.Text;
}

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

Автор: ckopn 22.6.2006, 11:53
Цитата(Kefir @ 22.6.2006,  11:25)
Код

onClick( ... )
{
  Form2 f2 = new Form2();
  f2.label1.Text = f1.label1.Text;
  f2.Show();
}


я так и делал 

Автор: ckopn 22.6.2006, 12:44
Вот что нужно было написать:
Код

            Form2 f2 = new Form2();
            f2.label1.Text = this.textBox1.Text;
            f2.label2.Text = this.textBox2.Text;
            f2.label3.Text = this.textBox3.Text;
            f2.label4.Text = this.textBox4.Text;
            f2.label5.Text = this.textBox5.Text;
            f2.ShowDialog();
 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)