Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> контрол из одной формы в другую 2 
V
    Опции темы
Cold_Almaty
Дата 26.2.2008, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 22.1.2008

Репутация: нет
Всего: нет



Доброго времени суток.
Почитал вот этот топик
  контрол из одной формы другой

Понравилось мне вот такое решение предложенное Exception :
Код

public string TextBoxText
{
    get { return _myTextBox.Text; }
    set { myTextBox.Text = value; }
}

Сделал. И ничего. Т.е. текст из Form2.txtBox2.Text не добавляется в Form1.txtBox1.Text.
Проверил с помощью MessageBox - значение передаётся.
Код

        public string TextBoxText
        {
            get
            {
                return txtBox1.Text;
          }
            set
            {
                txtBox1.Text = value;
            MessageBox.Show(value);
            }
        }



В первом топике было вот такое мнение "потому как ты содёшь новый объект form1, а не обращаешься к уже созданному. "
Видимо и сейчас эта проблема имеет место.
Подскажите пожалуйста, как победить?
PM MAIL   Вверх
marcusmae
Дата 26.2.2008, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


stravaganza
**


Профиль
Группа: Участник
Сообщений: 874
Регистрация: 26.3.2006

Репутация: 22
Всего: 39



Стоп-стоп-стоп, Cold_Almaty, не так быстро с выводами. Если нужно запутаться, то свойства Вам помогут smile 

Код


class Form1 : Form
{
    protected TextBox _myTextBox;

    public string Form1_TextBox_Text
    {
        get { return this._myTextBox.Text; }
        set { this._myTextBox.Text = value; }
    }
}

class Form2 : Form1
{
    Form1 _form1;

    public string Form2_TextBox_Text
    {
        get { return this._form1.Form1_TextBox_Text; }
        set { this._form1.Form1_TextBox_Text = value; }
    }

    public Form2(Form1 form1) : base() { this._form1 = form1; }
}

...

Form1 form1 = new Form1();
Form2 form2 = new Form2(form1);


Теперь, чтобы передать текст из текстбокса form1 в текстбокс form2 :

Код

form2.Form2_TextBox_Text = form2.Form1_TextBox_Text;


обратно :

Код

form2.Form1_TextBox_Text = form2.Form2_TextBox_Text;


Что не так?

Это сообщение отредактировал(а) marcusmae - 26.2.2008, 14:09


--------------------
ἀπὸ μηχανῆς θεός
PM MAIL ICQ GTalk   Вверх
Cold_Almaty
Дата 26.2.2008, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 22.1.2008

Репутация: нет
Всего: нет



marcusmae. Больше запутался. 
Если не трудно, поясни пожалуйста на моём примере.
Первая форма (на ней имеется текстбокс  txtBox1):
Код

......................
namespace AddControl
{
    public partial class Form1 : Form
    {
        public string TextBoxText1
        {
            get
            { return txtBox1.Text;}

            
            set
            {
               txtBox1.Text = value;
            }
        }
       
        public Form1()
        {
            InitializeComponent();
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
           Form2 frm2 = newForm2 ();
            frm2.Show ();
}
}


Вторая форма(на ней имеется текстбокс  txtBox2):
Код

namespace AddControl
{
    public partial class Form2 : Form
    {
        public Form2 ()        
        {
            InitializeComponent();
        }
        
        private void btn1_Click(object sender, EventArgs e)
        {
            Form1 frm1 = new Form1();
            frm1.TextBoxText1 = txtBox2.Text;

            this.Close();
        }




Это сообщение отредактировал(а) Cold_Almaty - 27.2.2008, 06:33
PM MAIL   Вверх
marcusmae
Дата 26.2.2008, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


stravaganza
**


Профиль
Группа: Участник
Сообщений: 874
Регистрация: 26.3.2006

Репутация: 22
Всего: 39



Cold_Almaty, во-первых, это не будет компилироваться, так как неизвестно, что такое frmInpt. Во-вторых, при клике по кнопке каждой формы, Вы создаёте новые формы, когда как видимо надо один раз создать, а потом обращаться к уже созданным. Правильно?


--------------------
ἀπὸ μηχανῆς θεός
PM MAIL ICQ GTalk   Вверх
Cold_Almaty
Дата 27.2.2008, 06:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 22.1.2008

Репутация: нет
Всего: нет



Прошу прощения за "frmInpt". Просто не заменил на "Form2". Уже отредактировал то сообщение.  
Подогнал свой код под Ваш шаблон. Вот что получилось:
Форма1
Код

......................................
namespace AddControl
{
    public partial class Form1 : Form
    {
        public string TextBoxText1
        {
            get
            {
                return  this .txtBox1.Text;
            }
            set
            {
               this .txtBox1.Text = value;
       }
       
        public Form1()
        {
            InitializeComponent();
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
           
        Form2 frm = new Form2 ();
            frm.Show ();
...............................................................
 
 
Форма2:
Код

namespace AddControl
{
    public partial class Form2 : Form1
    {
        Form1 form1;
        public string TextBoxText2
        {
            get { return this .form1.TextBoxText1 ;}
            set { this.form1.TextBoxText1=value ; } 
        }


        public Form2 (Form1 frm1): base()
        {
            this.form1 = frm1;
            InitializeComponent();
        }
        
        private void btn1_Click(object sender, EventArgs e)
        {
            Form1 frm1 = new Form1();
            Form2  frm2 = new Form2 (frm1);

            frm2.TextBoxText2 = frm2.TextBoxText1;
            frm2.TextBoxText1 = frm2.TextBoxText2;

            this.Close();
        }


При вызове второй формы  по клику мыши из первой формы
Код

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



генерируется ошибка "No overload for method 'Form2' takes '0' arguments"

ошибка генерируется из-за вот этого:
Код

public Form2 (Form1 frm1): base()


Это сообщение отредактировал(а) Cold_Almaty - 27.2.2008, 07:12
PM MAIL   Вверх
KelTron
Дата 27.2.2008, 08:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: 9
Всего: 38



Это потому, что у тебя в классе Form2 нет конструктора по умолчанию, ты должен создавать форму 2 либо как здесь делаешь:
Код

...
Form1 frm1 = new Form1();
Form2  frm2 = new Form2 (frm1);
...

то есть 
Код

Form2  frm2 = new Form2 (this);

либо добавить в определение класса Form2 конструктор по умолчанию

Это сообщение отредактировал(а) KelTron - 27.2.2008, 08:53


--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
Cold_Almaty
Дата 27.2.2008, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 22.1.2008

Репутация: нет
Всего: нет



Что-то не получается. Сделал так:
Форма2:
Код

namespace AddControl
{
    public partial class Form2 : Form1
    {
        Form1 form1;
        public string TextBoxText2
        {
            get { return this .form1.TextBoxText1 ;}
            set { this.form1.TextBoxText1=value ; } 
        }
        public frmInpt()
        {
            InitializeComponent();
        }

        public Form2 (Form1 frm1): base()
        {
            this.form1 = frm1;
            InitializeComponent();
        }
        
        private void btn1_Click(object sender, EventArgs e)
        {
            Form1 frm1 = new Form1();
            Form2  frm2 = new Form2 (frm1);

            frm2.TextBoxText2 = frm2.TextBoxText1;
            frm2.TextBoxText1 = frm2.TextBoxText2;

            this.Close();
        }


и получается что-то странное. При вызове Формы2 из Формы1 появляется Форма1 имеющая размеры Формы2 с накладывающимися друг на друга объектами. Это как я понял из-за этого
Форма2
Код

...........
public partial class Form2 : Form1
...........

Изменяю Form1 на Form, перестаёт работать вот этот кусок
Код

            frm2.TextBoxText2 = frm2.TextBoxText1;
            frm2.TextBoxText1 = frm2.TextBoxText2;


Если вместо этих двух строчек пишу так
Код

frm1 .TextBoxText1 = txtBox2.Text;

всё открывается, но ничего не происходит. И, видимо из-за того, что Форма1 перегружается
Код

Form1 frm1 = new Form1();
 
 Как быть?
PM MAIL   Вверх
KelTron
Дата 28.2.2008, 05:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: 9
Всего: 38



1) В классе Form1:
Код

        private void btnAdd_Click(object sender, EventArgs e)
        {
               Form2 frm = new Form2 (this); // Конструктору формы2 надо передать ссылку на родительскую форму, в данном случае this
               frm.Show ();
       }

2) В классе Form2:
Код

        private void btn1_Click(object sender, EventArgs e)
        {
            Form1 frm1 = new Form1(); // Этого не должно быть
            Form2  frm2 = new Form2 (frm1); // Этого не должно быть

            frm2.TextBoxText2 = frm2.TextBoxText1;
            frm2.TextBoxText1 = frm2.TextBoxText2;

            this.Close();
        }

Когда у тебя открыта форма2 зачем тебе снова создавать 2 формы: форму1 и форму2, они же уже созданы, тебе нужно при нажатии кнопки только передать значения, так что 2 строчки(3 и 4) просто убрать.
Следующие 2 строки(6 и 7) заменить на:
Код

            form1.TextBoxText1 = this.TextBoxText2;

3)  В классе Form2:
Это че за метод:
Код

       public frmInpt()
        {
            InitializeComponent();
        }

Полагаю ты хотел сделать конструктор по умолчанию, но он не так определяется, а так:
Код

       public Form2()
        {
            InitializeComponent();
        }

Имя конструктора совпадает с именем класса.
В данном случае конструктор по умолчанию не нужен, удали этот метод.

Это сообщение отредактировал(а) KelTron - 28.2.2008, 07:42


--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
Cold_Almaty
Дата 28.2.2008, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 22.1.2008

Репутация: нет
Всего: нет



Огромное спасибо. Заработало.
Я ещё сделал через DialogResult. Тоже ничего способ. Очень простой. Но способ предложенный KelTronом мне больше подходит. Ещё раз спасибо всем откликнувшемся.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1003 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.