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

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Доступ к переменным внутри проекта, как организовать? 
:(
    Опции темы
crang
Дата 2.6.2005, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Есть проект из двух форм, в первой определяются переменные для использования во второй . Пробовал объявить в первой форме, после объявления класса формы
Код

public class MainForm : System.Windows.Forms.Form
    {
                 public string someVar;
                ... 
                 }

и без "public" и с инициализацией и без:
Код

   public string someVar;
   //или
   string someVar;
   //или
   string someVar  =  "";


и вот из другой формы никак не могу найти эти someVar'ы smile
пытался обратиться напрямую по имени - говорит нет такого объекта в данном нэймспейсе, пробовал как к объекту главной формы - и там нету такого объекта smile

Код

public class Tunes : System.Windows.Forms.Form
    {
         public void someObject_Event(object sender, System.EventArgs e)
        {
                                     Form tmplnk = new MainForm();
                                     tmplnk.someVar 
             
        }
                 }


подскажите плз - как должно быть?

Это сообщение отредактировал(а) crang - 2.6.2005, 16:38
PM MAIL   Вверх
redrick
Дата 2.6.2005, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



какие ошибки валятся ? сам объект создается ?


--------------------
Имею Мнение Хрен Оспоришь   
PM MAIL ICQ   Вверх
crang
Дата 2.6.2005, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Если в первой форме написать
Код

public class MainForm : System.Windows.Forms.Form
    {
    /// <summary>
    /// Required designer variable.
    /// </summary>
    public Form tunes = new Tunes();
    public string klbhost = "";
    public string klbuser = "";
    public string klbpass = "";
    public string klbpath = "";
......................
     }


а во второй
Код

public class Tunes : System.Windows.Forms.Form
       {
.............
         public void button1_Click(object sender, System.EventArgs e)
    {
            klbhost = txthost.Text;
            klbuser = txtuser.Text;
            klbpass = txtpass.Text;
                        klbpath = txtpath.Text;
            Form tmpfrm = new Tunes();
            tmpfrm.Close();
    }
        }

то пишет :
The name 'klbhost' does not exist in the class or namespace 'clbftp_daemon.Tunes'
PM MAIL   Вверх
simanyay
Дата 2.6.2005, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Антон Ковалёв
****


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

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



Ну дык ты же переменные класса создаешь в классе MainForm, а в методе button1_Click(...) класса Tunes ты пытаешься вызвать их, как если бы они были объявлены внутри класса Tunes. Это всё относилось ко второму примеру, поскольку первый я не очень понял smile


--------------------
«It's better to be a pirate than to join the Navy» — Steve Jobs.
PM MAIL WWW   Вверх
crang
Дата 2.6.2005, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



simanyay
так об этом я и спрашиваю - а где их тогда объявлять чтоб было видно отовсюду?
PM MAIL   Вверх
simanyay
Дата 2.6.2005, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Антон Ковалёв
****


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

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



Код

public class MainForm : System.Windows.Forms.Form {
    // bla-bla
    
    public string klbhost = "";

    // bla-bla
}

public class Tunes :  System.Windows.Forms.Form {
    // bla-bla

    public void button1_Click(object sender, System.EventArgs e) {
        // Если объект класса MainForm не был создан заранее, то создай его
        MainForm myform = new MainForm();
        string host = myform.klbhost; // Должно работать
    }

    // bla-bla
}


А вообще лучше тебе создать свойства для public переменных. ИМХО, все переменные должны быть закрыты, а доступ к ним должен быть только из методов или свойств.

Цитата(crang @ 2.6.2005, 19:27)
simanyay
так об этом я и спрашиваю - а где их тогда объявлять чтоб было видно отовсюду?


А вот глобальных переменных в C#, насколько я знаю, нет. Что и правильно.

Ещё почитай вот это: Access Modifiers


--------------------
«It's better to be a pirate than to join the Navy» — Steve Jobs.
PM MAIL WWW   Вверх
Kurt
Дата 2.6.2005, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


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

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



Цитата(simanyay)
    public void button1_Click(object sender, System.EventArgs e) {
        // Если объект класса MainForm не был создан заранее, то создай его
        MainForm myform = new MainForm();
        string host = myform.klbhost; // Должно работать
    }

Думаю, это не будет работать.
Этим кодом ты во второй форме создаешь ДРУГОЙ объект класса MainForm, к-й будет иметь СВОИ значения соотв. полей.
Как я понимаю, задача сводится к следующему:
есть две формы. Form1 вызывает Form2. Причем в Form2 нужно получить значение некоторого поля из Form1.
Я бы решил эту задачу так.
1) объявил бы private-переменную в классе Form1:
Код
private int _someValue = 777;

2) написал бы Property для доступа у этому полю:
Код

        public int SomeValue
        {
            get{return this._someValue;}
            set{this._someValue = value;}
        }

3) В классе Form2 создал бы конструктор, к-й бы в качестве входного параметра принимал ссылку на Form1:
Код

public class Form2 : Form{
  private Form1 _frm1; //будет хранить ссылку на экземпляр класса Form1, создавшего этот класс

        public Form2(Form1 frm1)
        {
                           .....
            this._frm1 = frm1;
        }
}

4) Все. Теперь я могу обращаться к полям первой формы:
Код

    this.label1.Text = this._frm1.SomeValue.ToString(); //просто пример


З.Ы. Кстати, в Java то же самое.


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
Tomcat
Дата 2.6.2005, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(simanyay @ 2.6.2005, 16:30)
А вот глобальных переменных в C#, насколько я знаю, нет. Что и правильно.

Свои пять копеек...

Для этих целей в ООП обычно используют открытые статические переменные.

Вот хорошая конструкция Singleton-класса (класса, для которого может существовать только один экземпляр объекта). Грубо говоря, глобальная переменная строго определенного типа.
Код

    public sealed class SingletonClass1
    {
        private static SingletonClass1 instance = new SingletonClass1();
        
        public static SingletonClass1 Instance {
            get {
                return instance;
            }
        }
        
        private SingletonClass1()
        {
        }
    }


Это сообщение отредактировал(а) Tomcat - 2.6.2005, 18:26
PM MAIL   Вверх
simanyay
Дата 2.6.2005, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Антон Ковалёв
****


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

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



Цитата(Kurt @ 2.6.2005, 20:24)
есть две формы. Form1 вызывает Form2. Причем в Form2 нужно получить значение некоторого поля из Form1.


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


--------------------
«It's better to be a pirate than to join the Navy» — Steve Jobs.
PM MAIL WWW   Вверх
crang
Дата 3.6.2005, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ух уж это ООП..

Kurt
Спасибо за разъяснение, технологию я понял.

Простите за невнятное описание проблемы - учусь ведь вот smile

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


Java-ненавистник :)
****


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

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



Цитата(crang @ 3.6.2005, 11:09)
Ух уж это ООП..

Вообще, то что ты делаешь это очень плохо. Дочерняя форма не должна зависеть от родительской... Но это уже детали smile


--------------------
Да. Именно так.
PM   Вверх
crang
Дата 3.6.2005, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Дрон
я это уже понял - использую tabControl
PM MAIL   Вверх
Zdvig
  Дата 4.9.2005, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Как к textBox первой формы присвоить значение textBox воторой формы. У первого текстового поля видимость выставлена public. Ни одн из вышеперечисленных способов не помогает...
То же отностится и к текстовым переменным. Во всех случаях они возвращают пустоту, вместо строки...

Это сообщение отредактировал(а) Zdvig - 4.9.2005, 14:32
--------------------
Лампочка - ожерелье голых поп. Вся любовь - оп-хоп-хоп!
PM MAIL   Вверх
Kurt
Дата 4.9.2005, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


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

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



Цитата
То же отностится и к текстовым переменным. Во всех случаях они возвращают пустоту, вместо строки...

А ну, покажи как ты это делаешь. Есессно, убрав не относящиеся к делу строчки. smile


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
Zdvig
Дата 4.9.2005, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Kurt @ 4.9.2005, 14:37)
А ну, покажи как ты это делаешь. Есессно, убрав не относящиеся к делу строчки. smile

Использую компонент GmailNotifierControl с CodeProject.com, но не как отдельную dll, а интегрированный в мой проект.

Из ннего:

Делаю экземпляр класса Form1.

Код

namespace GmailNotifierControl
{
    public class GmailNotifierInfo : System.Windows.Forms.Form
    {    
        #region DesignTimeMembers
        ...
        private WindowsApplication3.Form1 frm1;
        #endregion
...


Далее в программе:

Код


private void lblInfo_Click(object sender, System.EventArgs e)
        {
            frm1 = new WindowsApplication3.Form1();
            MessageBox.Show(frm1.Message1); // не показывает ничего!
        }

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

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


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

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


 




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


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

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