![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Stratus |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 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); } |
|||
|
||||
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 11 Всего: 24 |
что то я совсем не понял твое сообщение, не общий смысл вроде ясен, но что куда и откуда ноги растут я чето не догнал...
Добавлено через 51 секунду может выложи больше кода, и попробуй описать более подробно... Добавлено через 3 минуты и 43 секунды особенно вот это заинтересовало: private void button1_Click(object sender, EventArgs e) { Program.func(); } это типа из формы по нажатию кнопки ты создаешь еще одну форму, а в ней уже пытаешься в текст боксу достучаться? |
|||
|
||||
| Stratus |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 27.5.2009 Репутация: нет Всего: нет |
Ну суть на самом деле простая......
Нужно например из метода Main, получить доступ к полю Text обьекта Textbox, который находиться на форме. Поскольку форма с обьектом рисовалась в Вижуал Студио, то вижуал студио создает там отдельный класс Form1, в ктором инициализирует все обьекты формы. Однако из метода Main невидно это поле Text обьекта TextBox и сам обьект. Поэтому я попытался в классе Form1 создать свойство класса и вытащить из него это поле обьекта. далее в меитоде Майн создал новый экземпляр обьекта и достал свойство. Получилось увидеть но неполучилось вывести сам текст(на консоль), ошибок теперь нет. Есть ли другие варианты напрямую получить значения свойства? И почему невыводиться инфа на консоль? |
|||
|
||||
| PashaPash |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
Stratus, покажи код.
|
|||
|
||||
| Экскалупатор |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 11 Всего: 24 |
ну для этого не нужно было создавать второй раз форму. у меня все работает. вот код:
форма содержит текстбокс, и кнопку, работает вот так:
вроде ничего страшного... |
||||
|
|||||
| Stratus |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 27.5.2009 Репутация: нет Всего: нет |
Вот код
в консоли пусто....
Это сообщение отредактировал(а) Stratus - 8.7.2009, 00:35 |
||||||
|
|||||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
Stratus, так ты новый экземпляр формы создаёшь.
и пытаешься получаешь значение его свойства, а там пусто, в то время как ожидаешь увидеть значение свойства первого экземпляра(вызвавшего функцию). -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 11 Всего: 24 |
ну во-первых ты создаешь новую форму, но ты ее не отображаешь, т.е. она существует только в памяти, вопрос куда пользователю ввести что то? исходя из этого ничего и не может быть отображено, потому как формы нету, нужно сделать
а во-вторых, НЕ НУЖНО СОЗДАВАТЬ ВТОРУЮ ФОРМУ, открой одну форму и потом с ней работай |
|||
|
||||
| Stratus |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 27.5.2009 Репутация: нет Всего: нет |
Благодарю за пояснение
сделал не логично согласен но просто формы вручную создавать неудобно, поэтому рисую в Вижуал котрый подсатвляет код автоматически..... Меня мучает один вопрос.... как теперь из класса Program увидеть свойство класса Form1.textbx или напрямую(так конечно еще лучше) обратиться к обьекту textBox1 и вытащить из него свойство text ведь класс form1 публичный..... проблема втом что Вижуал создает класс формы автоматически а обьектов формы невидно за пределами класса(form1)?! Это сообщение отредактировал(а) Stratus - 8.7.2009, 10:52 |
|||
|
||||
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 11 Всего: 24 |
я ж написал, руками запускаешь форму
а потом работаешь с ее свойством. т.е. сначала нужно создать, что то а потом пытаться с ним работать, а не наоборот, пока ты не создашь экземпляр формы ты не сможешь с ним работать есть еще вариант сделать свойство формы статичным, тогда оно будет доступно всегда, но это не верный подход и часто может вызывать ошибки, так что лучше делай через свойство, вот рабочий пример, попробуй разобраться: Присоединённый файл ( Кол-во скачиваний: 8 )
test2.rar 15,85 Kb |
|||
|
||||
| diadiavova |
|
||||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
Перепиши функцию так
А вызывай её так
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
||||
|
|||||
| Stratus |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 27.5.2009 Репутация: нет Всего: нет |
Согласен так работать будет... Однако я не понимаю зачем руками запускать форму когда там стоит - Application.Run(new Form1()); Меня мучает один вопрос почему нельзя в методе Main увидеть обьект textBox1????? Добавлено через 14 минут и 15 секунд diadiavova - спасибо работает |
|||
|
||||
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 11 Всего: 24 |
потому что он объявлен как приват, объяви его пабликом и все будет видно. |
|||
|
||||
| Stratus |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 27.5.2009 Репутация: нет Всего: нет |
неполучается........ я в классе form1 cделал так
пробовал вызвать в методе Main - невидно |
||||||
|
|||||||
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 11 Всего: 24 |
Stratus, попробуйте просто в дизайнере открыть вкладку свойства тектстбокса и там поставить паблик.
мне вот интересно а как вы его вызываете в маине, если у вас нету экземпляра класса Form1? или все таки есть? покажите код пожалуйста. |
|||
|
||||
| diadiavova |
|
||||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
В мэйне доступ к форме можно получить либо так
либо так
Только зачем всё это -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
||||
|
|||||
| Stratus |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 27.5.2009 Репутация: нет Всего: нет |
Вы же меня упрекали по поводу создания второго экземпляра класса......
поставил паблик в дизайнере но серавно не видит Это сообщение отредактировал(а) Stratus - 9.7.2009, 07:06 |
||||
|
|||||
| Stratus |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 27.5.2009 Репутация: нет Всего: нет |
ну думаю затем что бы в классе вызвать экземпляр другого класса(формы1) не создавая новый и там работать с его объектами.... или есть более короткий путь??? |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
Класс Programm существует для запуска приложения. И хотя в принципе можно и в него всякого понатыкать, но лучше в нём выполнить код инициализации и забыть про него. Другой вопрос, что код инициализации может ссылаться и на главную форму, тогда конечно, доступ к ней нужен. В моём примере должно вроде всё работать.
Возьмём например случай, когда наше приложение может открывать текстовые файлы и если такой файл открывается с его помощью, то он отобразится в текстбоксе (как в блокноте). В этом случае метод Main может выглядеть так
Надеюсь ничего не напутал Теперь, если контекстном меню текстового файла выбрать "Открыть с помощью" и найти нашу программу, то содержимое файла отобразится в textBox1. А делать что-то другое в этом классе как-то не очень принято. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| Экскалупатор |
|
||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 11 Всего: 24 |
да я упрекал и сам себе не перечу.
эта строка не возвращает вам ссылку на форму которую вы запустили, т.е. это НЕ экземпляр класса, экземпляр класса это form в моем примере:
по этому вы и не можете обратиться обратиться в вашему запущенному классу, нужно запустить форму либо "руками", либо как писал diadiavova:
и в первом и во втором случае у вас остается f(в моем случае form), которая является экземпляром класса и с которой в последствии можно работать, но по сути это тот же запуск "руками", который я вам советовал сразу. вот вам пример почему у вас не работает: Представте себе метателя молота. он бросает молот(это наш метод Application.Run(new Form1());), но после этого он хочет им управлять. вопрос как ему это сделать? правильно, нужно до броска привязать к молоту "веревочку"и потом за нее дергать во время полета. роль этой веревочки и выполняет ээкзеспляр класса(в нашем случае "f"). а без него ничего не получиться и молот будет благополучно лететь пока не упадет... но действительно, для чего это делать? обычно в Main ничего такого не пишут, да и смысла особого нету. если вы работаете с winForm тогда у вас все завязывается на обработчики событий, вот и обрабатывайте их, пишите классы обработчики, и "забудьте" про Main, будет меньше путаницы(ИМХО). Это сообщение отредактировал(а) Экскалупатор - 9.7.2009, 12:15 |
||||||||
|
|||||||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
Кстати, ещё информация к размышлению. В бейсике вообще никакой процедуры Main нет и класса в котором она определена - тоже. При желании всё это можно создать, но обычно это делает компилятор и неплохо с этим справляется. К чему я это... там должен быть просто стандартный код, по крайней мере в большинстве случаев. Пример с чтением аргументов командной строки - это случай когда можно что-то добавить, но даже без этого можно обойтись.
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| BestRoot |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 30.10.2008 Репутация: нет Всего: нет |
вот все чудесно вытаскивает |
|||
|
||||
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 11 Всего: 24 |
в том что у него нету вот этой строчки:
Form1 newform = new Form1(); |
|||
|
||||
| Stratus |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 27.5.2009 Репутация: нет Всего: нет |
это другой класс
|
||||
|
|||||
| Экскалупатор |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 11 Всего: 24 |
найди десять отличий.
вариант № 1(не рабочий):
вариант №2(рабочий):
мне кажется, что вы немного путаете: Form1 - это ваш класс(не экземпляр класса, а сам КЛАСС) и вы с ним ничего из Main не сделаете, а form1 - это как раз таки ЭКЗЕМПЛЯР КЛАССА Form1, а вот с ним уже можно работать.(разница в одной букве всего Form1 | form1) я думаю это вас и путает. Это сообщение отредактировал(а) Экскалупатор - 19.7.2009, 18:20 |
||||
|
|||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
В таком виде второй вариант - тоже нерабочий. Переменная form1 объявлена внутри метода и из другого её увидеть нельзя. Stratus, а чем не подошёл вариант с передачей ссылки на форму через параметр функции? Если надо фому найти внутри функции, то это можно сделать при помощи класса Application У него есть статическое свойство OpenForms, которое возвратит коллекцию всех открытых форм приложения. Так же можно воспользоваться статическим методом ActiveForm класса Form. Он возвратит активную в данный момент форму. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| lam0x7C4 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 59 Регистрация: 1.6.2007 Где: Киев Репутация: 1 Всего: 1 |
Привет!
Извините конечно, что так врываюсь, не прочитав всех постов(лень-матушка:%). НО, насколько я понял, то нужно из метода Main изменить(достучаться) текст какого-то текстбокса, что расположен на форме. Так вот, надо делать вот так:
// важная фишка: желательно, чтоб у даного текстбокса был модификатор доступа private или protected. Почему? читайте про Инкапсуляцию. } Ну вотъ. Извините, если что не так понял. На форум захожу редко, поэтому если есть вопросы или возражения, то стучите или в аську 487653031, или в скайп aleksey.aka.lexx, или спамте мыло [email protected] Спасибо за внимание Это сообщение отредактировал(а) lam0x7C4 - 19.7.2009, 20:15 |
|||
|
||||
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 11 Всего: 24 |
diadiavova, да, точно, просто три дн выходных(
объявить Form1 на весь класс Program и тогда будет работать. да и вообще я думаю, что автор просто не видит разницы, и по этому помочь ему сложно(имхо). Но вариант с передачей ссылки мне нравиться больше. Это сообщение отредактировал(а) Экскалупатор - 19.7.2009, 20:21 |
|||
|
||||
| Stratus |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 27.5.2009 Репутация: нет Всего: нет |
Вариант с передачей ссылки подошел - просто хочется в лоб сделать |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |