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


Автор: Legolas 21.7.2009, 23:40
Добрый вечер. Возник вопрос - можно ли как-то "передать контрол" при создании новой формы. 

пример: есть форма с заполненной датагридвью (или нарисованным графиком (ZEDGraph), при создании\вызове новой формы необходимо, чтобы данный контрол (ZEDGraph или датагридвью) прорисовался на новой форме с заполненными полями\нарисованным графиком.

пытался так, но эффект не достиг.
Код

private void zgc_var_max_DoubleClick(object sender, EventArgs e)
        {
            Form var_max_form = new Form();
            var_max_form.ShowDialog();

            var_max_form.Controls.Add(zgc_var_max);
        }


Автор: Экскалупатор 21.7.2009, 23:47
Legolas, а зачем целый контрол передавать? не лучше ли "что бы мухи были отдельно от котлет"(данные отдельно, отображение отдельно), лучше передать содержимое, а в новой форме его просто показать в контроле этой формы.

Добавлено через 1 минуту и 45 секунд
кстати, просто ради интереса, а что вы делаете с этим контролом в новой форме? можете код показать?

Автор: Legolas 22.7.2009, 00:09
кода пока нет. просто у меня есть график маленького размера - я хочу по щелчку открывать его на новой форме. думаю вы предложили самое оптимальное решение - передавать данные. так и сделаю, зачем мутить что-то =))) 

спасибо.

PS: я вообще было бы интересно узнать можно ли передать заполненный контрол)))
и для чего вообще нужна Form.Controls.Add(...) - кроме как для создания нового.
тему пока не закрываю.

Добавлено через 11 минут и 57 секунд
всё, решил задачу. =))) 

Автор: Экскалупатор 22.7.2009, 00:30
Legolas, самому стало интересно. только что попробовал, кнопка передается без проблем, передается так же все что связано с этой кнопкой: обработчики, настройки, полностью все. получается прикольно.
обработчик кнопки в первой форме:
Код

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 form2 = new Form2(this.button1);
            form2.Show();
        }


добавление кнопки во второй форме:
Код

        public Form2(Control control)
        {
            this.Controls.Add(control);
            InitializeComponent();
        }


сделал через конструктор. 

Автор: Legolas 22.7.2009, 00:30
теперь проблема заключается в том, что при добавлении контрола на новую форму он исчезает со старой - как это можно решить.

добавляю так:
Код

private void zgc_var_max_DoubleClick(object sender, EventArgs e)
        {
            zgc_show form = new zgc_show();
            form.Controls.Add(zgc_var_max);
            form.ShowDialog();
            
        }

Автор: Экскалупатор 22.7.2009, 01:57
если сделать так то все работает и контрол не исчезает:
Код

        private void button1_Click(object sender, EventArgs e)
        {
            System.Windows.Forms.Button button = new Button();
            button.Location = new System.Drawing.Point(111, 206);
            button.Name = "button";
            button.Size = new System.Drawing.Size(75, 23);
            button.TabIndex = 0;
            button.Text = "button";
            button.UseVisualStyleBackColor = true;
            button.Click += new System.EventHandler(this.button1_Click);
            Form2 form2 = new Form2(button);
            form2.Show();            
        }

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

Автор: Экскалупатор 22.7.2009, 02:25
или это вопросы потокобезопасности... получается что каждаю форма это как отдельный поток, но почему пропадает?...

Автор: Legolas 22.7.2009, 11:34
да, странно... а нужно именно старый контрол передать как бы сделать копию старого. а получается как команда "вырезать" =))) можно конечно при закрытии формы попробовать его обратно передавать... но это изврат...

что-то мне кажется, что существует какой-то способ.. =) где же наши эксперты? =)

Автор: antslava 27.7.2009, 01:32
Тебе надо отнаследовать свой контрол от ICloneable.

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