Модераторы: 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   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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