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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> доступ к свойству???? 
:(
    Опции темы
Stratus
  Дата 7.7.2009, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Коллеги 
как получить доступ к свойству text обьекта texbox,
если при создании Вижуал создает отдельный клас form1.
а из точки входа его невидно...
я написал приблизительно следующее:

        public string textbx
        {
            get { return textBox1.Text; }
            set { textBox1.Text = value; }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Program.func();
        }
........
        public static void func()
        {
            Form1 fr = new Form1();
            Console.WriteLine(fr.textbx);
            
        }

PM MAIL   Вверх
Экскалупатор
Дата 7.7.2009, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

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



что то я совсем не понял твое сообщение, не общий смысл вроде ясен, но что куда и откуда ноги растут я чето не догнал...

Добавлено через 51 секунду
может выложи больше кода, и попробуй описать более подробно...

Добавлено через 3 минуты и 43 секунды
особенно вот это заинтересовало:

private void button1_Click(object sender, EventArgs e)
        {
            Program.func();
        }

это типа из формы по нажатию кнопки ты создаешь еще одну форму, а в ней уже пытаешься в текст боксу достучаться?
PM MAIL ICQ   Вверх
Stratus
Дата 7.7.2009, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ну суть на самом деле простая......

Нужно например из метода Main, получить доступ к полю Text обьекта Textbox, который находиться на форме.

Поскольку форма с обьектом рисовалась в Вижуал Студио, то вижуал студио создает там отдельный класс Form1,
в ктором инициализирует все обьекты формы.
Однако из метода Main невидно это поле Text обьекта TextBox и сам обьект.

Поэтому я попытался в классе Form1 создать свойство класса и вытащить из него это поле обьекта.
далее в меитоде Майн создал новый экземпляр обьекта и достал свойство.
Получилось увидеть но неполучилось вывести сам текст(на консоль), ошибок теперь нет.

Есть ли другие варианты напрямую получить значения свойства?
И почему невыводиться инфа на консоль?

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


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

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



Stratus, покажи код. 


--------------------
PM MAIL WWW   Вверх
Экскалупатор
Дата 7.7.2009, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

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



ну для этого не нужно было создавать второй раз форму. у меня все работает. вот код:

Код

using System;
using System.Collections.Generic;
using System.Text;

namespace test2
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("ВВедите что нибудь в в поле ввода:");
            Form1 form = new Form1();
            form.ShowDialog();
            Console.WriteLine("Вы ввели: " + form.text_box);
        }
    }
}


форма содержит текстбокс, и кнопку, работает вот так:

Код

public string text_box
        {
            get
            {
                return textBox1.Text;
            }
            set
            {
                
            }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            Close();
        }


вроде ничего страшного...
PM MAIL ICQ   Вверх
Stratus
Дата 8.7.2009, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вот код 
в консоли пусто....

Код

namespace WindowsFormsApplication1
{
    partial class Form1
    {
        private System.ComponentModel.IContainer components = null;

        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows Form Designer generated code

        private void InitializeComponent()
        {
            this.textBox1 = new System.Windows.Forms.TextBox();
            this.button1 = new System.Windows.Forms.Button();
            this.SuspendLayout();
            // 
            // textBox1
            // 
            this.textBox1.Location = new System.Drawing.Point(54, 42);
            this.textBox1.Name = "textBox1";
            this.textBox1.Size = new System.Drawing.Size(100, 20);
            this.textBox1.TabIndex = 0;
            // 
            // button1
            // 
            this.button1.Location = new System.Drawing.Point(281, 42);
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(75, 23);
            this.button1.TabIndex = 1;
            this.button1.Text = "button1";
            this.button1.UseVisualStyleBackColor = true;
            this.button1.Click += new System.EventHandler(this.button1_Click);
            // 
            // Form1
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(471, 285);
            this.Controls.Add(this.button1);
            this.Controls.Add(this.textBox1);
            this.Name = "Form1";
            this.Text = "Form1";
            this.ResumeLayout(false);
            this.PerformLayout();

        }

        #endregion

        private System.Windows.Forms.TextBox textBox1;
        private System.Windows.Forms.Button button1;
    }
}





Код

using System;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public string textbx
        {
            get { return textBox1.Text; }
            set { textBox1.Text = value; }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Program.func();
        }
    }
}



Код

using System;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    static class Program
    {
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
        public static void func()
        {
            Form1 fr = new Form1();
            Console.WriteLine(fr.textbx);
            //здесь бы хотелось на прямую обратиться к свойству Form1.textBox1.text
        }
    }
}


Это сообщение отредактировал(а) Stratus - 8.7.2009, 00:35
PM MAIL   Вверх
diadiavova
Дата 8.7.2009, 01:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Stratus, так ты новый экземпляр формы создаёшь.
Цитата(Stratus @  8.7.2009,  00:27 Найти цитируемый пост)
           Form1 fr = new Form1();

и пытаешься получаешь значение его свойства, а там пусто, в то время как ожидаешь увидеть значение свойства первого экземпляра(вызвавшего функцию).


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Экскалупатор
Дата 8.7.2009, 01:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

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



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

Form1 fr = new Form1();
fr.Show();
            Console.WriteLine(fr.textbx);


а во-вторых, НЕ НУЖНО СОЗДАВАТЬ ВТОРУЮ ФОРМУ, открой одну форму и потом с ней работай
PM MAIL ICQ   Вверх
Stratus
Дата 8.7.2009, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Благодарю за пояснение 

сделал не логично согласен 

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

Меня мучает один вопрос....  как теперь из класса Program увидеть свойство класса Form1.textbx
или напрямую(так конечно еще лучше) обратиться к обьекту textBox1 и вытащить из него свойство text
ведь класс form1 публичный.....

проблема втом что Вижуал создает класс формы автоматически а обьектов формы невидно за пределами класса(form1)?!

Это сообщение отредактировал(а) Stratus - 8.7.2009, 10:52
PM MAIL   Вверх
Экскалупатор
Дата 8.7.2009, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

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



 smile 
я ж написал, руками запускаешь форму
Код

using System;
using System.Collections.Generic;
using System.Text;
namespace test2
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("ВВедите что нибудь в в поле ввода:");
            Form1 form = new Form1();
            form.ShowDialog();
            Console.WriteLine("Вы ввели: " + form.text_box);
        }
    }
}

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


Присоединённый файл ( Кол-во скачиваний: 8 )
Присоединённый файл  test2.rar 15,85 Kb
PM MAIL ICQ   Вверх
diadiavova
Дата 8.7.2009, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Перепиши функцию так
Код

        public static void func(Form1 fr)
        {
            Console.WriteLine(fr.textbx);
            //здесь бы хотелось на прямую обратиться к свойству Form1.textBox1.text
        }


А вызывай её так
Код

    Program.func(this);



--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Stratus
Дата 8.7.2009, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Экскалупатор @ 8.7.2009,  11:32)
smile 
я ж написал, руками запускаешь форму

Согласен так работать будет... smile 
Однако я не понимаю зачем руками запускать форму когда там стоит - Application.Run(new Form1()); 

Меня мучает один вопрос почему нельзя в методе Main увидеть обьект textBox1????? smile

Добавлено через 14 минут и 15 секунд
diadiavova - спасибо  работает  smile 
PM MAIL   Вверх
Экскалупатор
Дата 8.7.2009, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

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



Цитата

Меня мучает один вопрос почему нельзя в методе Main увидеть обьект textBox1?????


потому что он объявлен как приват, объяви его пабликом и все будет видно.
PM MAIL ICQ   Вверх
Stratus
Дата 9.7.2009, 00:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Экскалупатор @ 8.7.2009,  23:58)
Цитата

Меня мучает один вопрос почему нельзя в методе Main увидеть обьект textBox1?????


потому что он объявлен как приват, объяви его пабликом и все будет видно.


неполучается........ я в классе form1
cделал так
Код

public System.Windows.Forms.TextBox textBox1;

пробовал вызвать в методе Main - невидно
PM MAIL   Вверх
Экскалупатор
Дата 9.7.2009, 00:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

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



Stratus, попробуйте просто в дизайнере открыть вкладку свойства тектстбокса и там поставить паблик.

мне вот интересно а как вы его вызываете в маине, если у вас нету экземпляра класса Form1? или все таки есть? покажите код пожалуйста.
PM MAIL ICQ   Вверх
diadiavova
Дата 9.7.2009, 02:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



В мэйне доступ к форме можно получить либо так
Код

Form1 f = new Form1();
//здесь код доступа к свойству, полю и тд
// MessageBox.Show(f.textBox1.Text); //это пример
Application.Run(f);

либо так
Код

Application.Run(new Form1());
Form1 f = Application.OpenForms[0];
//код писать здесь
//MessageBox.Show(f.textBox1.Text); //это пример

Только зачем всё это  smile 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Stratus
Дата 9.7.2009, 06:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Экскалупатор @ 9.7.2009,  00:33)
Stratus, попробуйте просто в дизайнере открыть вкладку свойства тектстбокса и там поставить паблик.

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

Вы же меня упрекали по поводу создания второго экземпляра класса...... 
Код

using System;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    static class Program
    {
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());//я так полагаю вот эта вот строка как раз и есть экземпляр класса и визуализация формы
            
        }
        public static void func()
        {
            //Form1 fr = new Form1();
            Console.WriteLine(obj.textbx);
        }
    }
}

поставил паблик в дизайнере но серавно не видит

Это сообщение отредактировал(а) Stratus - 9.7.2009, 07:06
PM MAIL   Вверх
Stratus
Дата 9.7.2009, 07:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(diadiavova @ 9.7.2009,  02:09)
Только зачем всё это  smile

ну думаю затем что бы в классе вызвать экземпляр другого класса(формы1) не создавая новый и там работать с его объектами....

или есть более короткий путь???
PM MAIL   Вверх
diadiavova
Дата 9.7.2009, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Класс Programm существует для запуска приложения. И хотя в принципе можно и в него всякого понатыкать, но лучше в нём выполнить код инициализации и забыть про него. Другой вопрос, что код инициализации может ссылаться и на главную форму, тогда конечно, доступ к ней нужен. В моём примере должно вроде всё работать.
Возьмём например случай, когда наше приложение может открывать текстовые файлы и если такой файл открывается с его помощью, то он отобразится в текстбоксе (как в блокноте). В этом случае метод Main может выглядеть так
Код

        static void Main(string[] args)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Form1 frm = new Form1();
            if(args.Length > 1) 
            {
                 frm.textBox1.Text = System.IO.File.ReadAllText(args[1]); 
             }
            Application.Run(frm);
        }

Надеюсь ничего не напутал smile 
Теперь, если контекстном меню текстового файла выбрать "Открыть с помощью" и найти нашу программу, то содержимое файла отобразится в textBox1. 
А делать что-то другое в этом классе как-то не очень принято. smile 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Экскалупатор
Дата 9.7.2009, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

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



Цитата

Вы же меня упрекали по поводу создания второго экземпляра класса...... 

да я упрекал и сам себе не перечу.
Код

 Application.Run(new Form1());//я так полагаю вот эта вот строка как раз и есть экземпляр класса и визуализация формы

эта строка не возвращает вам ссылку на форму которую вы запустили,
т.е. это НЕ экземпляр класса, экземпляр класса это form в моем примере:
Код

Form1 form = new Form1();


по этому вы и не можете обратиться обратиться в вашему запущенному классу, нужно запустить форму либо "руками", либо как писал diadiavova:
 
Цитата

Form1 f = new Form1();
//здесь код доступа к свойству, полю и тд
// MessageBox.Show(f.textBox1.Text); //это пример
Application.Run(f);

либо так
    
Application.Run(new Form1());
Form1 f = Application.OpenForms[0];
//код писать здесь
//MessageBox.Show(f.textBox1.Text); //это пример


и в первом и во втором случае у вас остается f(в моем случае form), которая является экземпляром класса и с которой в последствии можно работать, но по сути это тот же запуск "руками", который я вам советовал сразу. 

вот вам пример почему у вас не работает: 
Представте себе метателя молота. он бросает молот(это наш метод Application.Run(new Form1());), но после этого он хочет им управлять. вопрос как ему это сделать? правильно, нужно до броска привязать к молоту "веревочку"и потом за нее дергать во время полета. роль этой веревочки и выполняет ээкзеспляр класса(в нашем случае "f"). а без него ничего не получиться и молот будет благополучно лететь пока не упадет...

но действительно, для чего это делать? обычно в Main ничего такого не пишут, да и смысла особого нету. если вы работаете с winForm тогда у вас все завязывается на обработчики событий, вот и обрабатывайте их, пишите классы обработчики, и "забудьте" про Main, будет меньше путаницы(ИМХО).

Это сообщение отредактировал(а) Экскалупатор - 9.7.2009, 12:15
PM MAIL ICQ   Вверх
diadiavova
Дата 9.7.2009, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



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


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
BestRoot
Дата 10.7.2009, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

static class Program
    {
        /// <summary>
        /// Главная точка входа для приложения.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Form1 newform = new Form1();
            newform.Show();
            MessageBox.Show(newform.textBox1.Text);

        }
    }

 вот все чудесно вытаскивает smile не понемаю в чем у вас проблема 
PM MAIL WWW ICQ   Вверх
Экскалупатор
Дата 10.7.2009, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

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



в том что у него нету вот этой строчки:
Form1 newform = new Form1();
PM MAIL ICQ   Вверх
Stratus
Дата 18.7.2009, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

    static class Program
    {
        public static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }

        public static void func()
        {
            /* Вот тут я не хочу создавать второй экземпляр формы  
             * мне нужно увидеть первый экземпляр. Если я его создаю
             * в методе Main и запускаю его Run то здесь его невидно всеравно.
             * вы же все говорите что ненадо создавать второй экзмепляр.
             * Мне нужно здесь обратьтся к полю обьекта формы Form1.
             * Как мне здесь увидеть Form1.textbx.text ?????? и ничего больше....
        }
    }


это другой класс
Код

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public string textbx
        {
            get { return textBox1.Text; }
            set { textBox1.Text = value; }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Program.func();
            
        }
    }



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


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

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



найди десять отличий.
вариант № 1(не рабочий):
Код

 static class Program
    {
        public static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }

        public static void func()
        {
            /* Вот тут я не хочу создавать второй экземпляр формы  
             * мне нужно увидеть первый экземпляр. Если я его создаю
             * в методе Main и запускаю его Run то здесь его невидно всеравно.
             * вы же все говорите что ненадо создавать второй экзмепляр.
             * Мне нужно здесь обратьтся к полю обьекта формы Form1.
             * Как мне здесь увидеть Form1.textbx.text ?????? и ничего больше....
        }
    }

вариант №2(рабочий):
Код

static void Main()
        {
            Form1 form1 = new Form1();
            Application.Run(form1);
        }
        public static void func()
        {
            MessageBox.Show(form1.textbx.Text);
        }


мне кажется, что вы немного путаете: Form1 - это ваш класс(не экземпляр класса, а сам КЛАСС) и вы с ним ничего из Main не сделаете, а form1 - это как раз таки ЭКЗЕМПЛЯР КЛАССА Form1, а вот с ним уже можно работать.(разница в одной букве всего Form1 | form1) я думаю это вас и путает.

Это сообщение отредактировал(а) Экскалупатор - 19.7.2009, 18:20
PM MAIL ICQ   Вверх
diadiavova
Дата 19.7.2009, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Цитата(Экскалупатор @  19.7.2009,  19:10 Найти цитируемый пост)
вариант №2(рабочий):

В таком виде второй вариант - тоже нерабочий. Переменная form1 объявлена внутри метода и из другого её увидеть нельзя.
Stratus, а чем не подошёл вариант с передачей ссылки на форму через параметр функции?

Если надо фому найти внутри функции, то это можно сделать при помощи класса Application
У него есть статическое свойство OpenForms, которое возвратит коллекцию всех открытых форм приложения. Так же можно воспользоваться статическим методом ActiveForm класса Form. Он возвратит активную в данный момент форму.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
lam0x7C4
Дата 19.7.2009, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Привет!
Извините конечно, что так врываюсь, не прочитав всех постов(лень-матушка:%). НО, насколько я понял, то нужно из метода Main изменить(достучаться) текст какого-то текстбокса, что расположен на форме. Так вот, надо делать вот так:
 
Код


// метод main
    [STAThread]
        ptivate static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
           myForm frm = new myForm1();
frm.TextBoxText = "hello!";
            Application.Run(frm);        

}
 // главная форма
private class myForm : Form
{
// ахтунг: на форме должен быть текстбокс с именем textBox1(если в дизайнере бросить контрол TextBox, то такое имя будет задано по умолчанию)
public string TextBoxText
{
get{return textBox1.Text;}
set{textBox1.Text = value;}
}

// важная фишка: желательно, чтоб у даного текстбокса был модификатор доступа private или protected. Почему? читайте про Инкапсуляцию.
}


Ну вотъ. Извините, если что не так понял. На форум захожу редко, поэтому если есть вопросы или возражения, то стучите или в аську 487653031, или в скайп aleksey.aka.lexx, или спамте мыло [email protected] 
Спасибо за внимание smile 


Это сообщение отредактировал(а) lam0x7C4 - 19.7.2009, 20:15
PM MAIL ICQ   Вверх
Экскалупатор
Дата 19.7.2009, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

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



diadiavova, да, точно, просто три дн выходных( smile  smile ) дают о себе знать. каюсь и буду внимательнее. 
объявить Form1 на весь класс Program и тогда будет работать. да и вообще я думаю, что автор просто не видит разницы, и по этому помочь ему сложно(имхо).

Но вариант с передачей ссылки мне нравиться больше.

Это сообщение отредактировал(а) Экскалупатор - 19.7.2009, 20:21
PM MAIL ICQ   Вверх
Stratus
Дата 23.7.2009, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(diadiavova @ 19.7.2009,  18:57)
Цитата(Экскалупатор @  19.7.2009,  19:10 Найти цитируемый пост)
вариант №2(рабочий):

В таком виде второй вариант - тоже нерабочий. Переменная form1 объявлена внутри метода и из другого её увидеть нельзя.
Stratus, а чем не подошёл вариант с передачей ссылки на форму через параметр функции?

Если надо фому найти внутри функции, то это можно сделать при помощи класса Application
У него есть статическое свойство OpenForms, которое возвратит коллекцию всех открытых форм приложения. Так же можно воспользоваться статическим методом ActiveForm класса Form. Он возвратит активную в данный момент форму.

Вариант с передачей ссылки подошел - просто хочется в лоб сделать smile
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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