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

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> вопрос по конструктору 
:(
    Опции темы
Yurik
Дата 13.11.2005, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Имеется форма, в классе формы я создал матрицу:

Код

public class Form1 : Form 

{
public double[,] RG=new double[30,30];

// здесь объекты формы: всякие текстбоксы и т.д.
}


Имеется класс, в нем есть конструктор

Код

public class ST
{
    public ST()
   {
   Form1 form1=new Form1();
   form1.RG[1,1]=777;
   }
}


Компилится нормально, работает нормально, токо вот значения в матрицу из конструктора никак не передаются....
Почему?








PM MAIL   Вверх
alir
Дата 13.11.2005, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Попробуй так:

Код

public class Form1 : Form 
{
    public double[,] RG; 
    Form1()
    {  
          RG =new double[30,30];
    }
}


Код

public class ST
{
    public ST()
   {
   Form1 form1=new Form1();
   form1.RG[1,1]=777;
   }
}


PM MAIL ICQ   Вверх
Yurik
Дата 13.11.2005, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Без толку.
У меня закрадывается сомнение, что в конструкторе класса можно выполнять действия ТОЛЬКО с членами этого класса
PM MAIL   Вверх
alir
Дата 13.11.2005, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата
У меня закрадывается сомнение, что в конструкторе класса можно выполнять действия ТОЛЬКО с членами этого класса

Нет. Вот рабочий простенький пример:

Код

using System;

namespace ConsoleApplication1
{
    public class B
    {
        public double[,] RG; 
        public B()
        {  
            RG =new double[30,30];
        }
    }

    class Class1
    {
        [STAThread]
        static void Main(string[] args)
        {
            B fr = new B();
            fr.RG[1,1]=777;
            Console.Write(fr.RG[1,1]);
        }
    }
}

PM MAIL ICQ   Вверх
Yurik
Дата 13.11.2005, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ты не въехал в смысл:

1) Матрица RG является объектом класса Form1, а не ST.
2) Присвоение fr.RG[1,1]=777 надо проводить не в Main, а в конструкторе... (то бишь при создании объекта класса ST)



PM MAIL   Вверх
-ser-
Дата 14.11.2005, 03:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



если я правильно понял, вы хотите в конструкторе класса ST заполнить объект класса Form1.

тогда вам не надо создавать новый инстанс класса Form1 в конструкторе ST, а просто передать существующий в параметре конструктора ST.
Код

    public class Form1 : Form
    {
        public double[,] RG=new double[30,30];

        public Form1()
        {
            InitializeComponent();

            ST st = new ST( this );

            MessageBox.Show( RG[ 1, 1 ].ToString() );
        }

    }


    public class ST
    {
        public ST( Form1 form1 )
        {
            form1.RG[ 1, 1 ] = 777;
        }
    }


З.Ы. на всякий случай еще напомню что элементы в массиве начинаются с 0: RG[ 0, 0 ]


--------------------
"Тонкая, однако, работа." 
PM MAIL ICQ   Вверх
mr.DUDA
Дата 14.11.2005, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Цитата(Yurik @ 13.11.2005, 17:51)
Компилится нормально, работает нормально, токо вот значения в матрицу из конструктора никак не передаются....
Почему?


Цитата(Yurik @ 13.11.2005, 17:51)
public double[,] RG=new double[30,30];


Пардон за возможно глупый вопрос, но может быть вы ожидаете, что RG будет присвоен массив из двух элементов типа double со значениями 30 и 30 ? smile


--------------------
user posted image
PM MAIL WWW   Вверх
Yurik
Дата 14.11.2005, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(ser @ 14.11.2005, 03:20)
если я правильно понял, вы хотите в конструкторе класса ST заполнить объект класса Form1.

тогда вам не надо создавать новый инстанс класса Form1 в конструкторе ST, а просто передать существующий в параметре конструктора ST.


Спасибо!!! Вы ответили на мой вопрос, все работает!




Цитата(ser @ 14.11.2005, 03:20)
З.Ы. на всякий случай еще напомню что элементы в массиве начинаются с 0: RG[ 0, 0 ]


Да, я знаю это досадное недоразумение всех сишных языков.
Пробовал даже привыкнуть к этому - бесполезно....
Поэтому я просто не использую (не заполняю) в матрицах нулевую строку и нулевой столбец smile


Цитата(mr @ 14.11.2005, 10:17)
Пардон за возможно глупый вопрос, но может быть вы ожидаете, что RG будет присвоен массив из двух элементов типа double со значениями 30 и 30 ? 


smile
Я, конечно, ламер, но не настолько smile


Добавлено @ 14:36
Чтоб не заводить отдельную тему, спрошу тут:
Visual studio создает такую строчку:

[STAThread]

Я ее закоментил, ниче не изменилось. Для чего она?

PM MAIL   Вверх
Yurik
Дата 14.11.2005, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



И еще один простенький вопросец:

В билдере в классе текстбокс (и не только в нем) есть метод setfocus()
Он перекидывает фокус на этот текстбокс.

А есть ли аналог в C# ?
PM MAIL   Вверх
mr.DUDA
Дата 14.11.2005, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Цитата(Yurik @ 14.11.2005, 14:29)
Чтоб не заводить отдельную тему, спрошу тут:
Visual studio создает такую строчку:

[STAThread]

Я ее закоментил, ниче не изменилось. Для чего она?

Вот ответ:
http://forum.vingrad.ru/index.php?showtopic=64244

З.Ы. выберите внизу страницы со списком тем вместо "За последние 30 дней" строку "За всё время" - возможно, ответы на какие-то вопросы находятся на одной из 25 страниц smile

Цитата(Yurik @ 14.11.2005, 14:59)
И еще один простенький вопросец:

В билдере в классе текстбокс (и не только в нем) есть метод setfocus()
Он перекидывает фокус на этот текстбокс.

А есть ли аналог в C# ?

Есть: TextBox.Focus() называется.
Добавлено @ 16:08
P.S. Модератор: Пожалуйста, один топик - один вопрос.


--------------------
user posted image
PM MAIL WWW   Вверх
Yurik
Дата 14.11.2005, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Большое пасиба smile
PM MAIL   Вверх
Yurik
Дата 15.11.2005, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата
если я правильно понял, вы хотите в конструкторе класса ST заполнить объект класса Form1.

тогда вам не надо создавать новый инстанс класса Form1 в конструкторе ST, а просто передать существующий в параметре конструктора ST.


Я тут подумал хорошенько: гораздо проще сделать матрицу RG статик:

Код

public class Form1 : Form
    {
                public static double[,] RG=new double[30,30];
                }




И из конструктора класса ST обращаться к ней по имени класса Form1 (а не объекта form1)
Код

public ST()
{
Form1.RG[1,1]=777;
}



Такие вот пироги...
Никто сразу не сообразил, и я тоже smile


PM MAIL   Вверх
-ser-
Дата 16.11.2005, 01:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата
Никто сразу не сообразил
Yurik вопрос был следующий
Цитата
токо вот значения в матрицу из конструктора никак не передаются....
Почему?

и еще
Цитата
У меня закрадывается сомнение, что в конструкторе класса можно выполнять действия ТОЛЬКО с членами этого класса
не только, если уж очень хочется.

а за идею со статиком спасибо, а то я что-то всегда заполнял члены одного класса в конструкторе другого. так что иногда и стоит подумать хорошенько. надо будет этим открытием поделиться с mr.DUDA, а то я знаю он всегда через делегаты это делает.

и вообще, пора эту тему выносить наверх в выделенную.


--------------------
"Тонкая, однако, работа." 
PM MAIL ICQ   Вверх
mr.DUDA
Дата 16.11.2005, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Цитата(ser @ 16.11.2005, 01:42)
надо будет этим открытием поделиться с mr.DUDA, а то я знаю он всегда через делегаты это делает.

ну уж нет smile

Цитата(ser @ 16.11.2005, 01:42)
и вообще, пора эту тему выносить наверх в выделенную.

наверное, торможу с утра... это зачем её прикреплять ?


--------------------
user posted image
PM MAIL WWW   Вверх
Yurik
Дата 16.11.2005, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Да лано, хорошь стебаться )
PM MAIL   Вверх
Закрытая темаСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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