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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как обратиться к объекту другой формы, очень часто задаваемый вопрос 
V
    Опции темы
CheFF
Дата 12.5.2008, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо. Тут мне придется очень долго разбираться... Чувствую, что пока не перепишу - не вникну в саму суть, слишком много всего неопределенного.
PM MAIL   Вверх
ProgrammingLife
Дата 12.5.2008, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 19.1.2008
Где: ЧИРЧИКАГО (UZ)

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



Надо стремиться! все получится  smile = smile 
PM MAIL ICQ   Вверх
CheFF
Дата 12.5.2008, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(ProgrammingLife @ 12.5.2008,  20:48)
Надо стремиться! все получится  smile = smile

Чувствуется мне нужно еще тучу кода прелопатить и своего понаписать, что бы быть  smile 

А практиковаться то особо и неначем. Все эти абстрактные задачи, вроде "переставить две переменные, без использования третьей" или "написать телефонную книгу с..." и тому подоное, очень угнетает :/
PM MAIL   Вверх
-Mikle-
Дата 12.5.2008, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

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



 smile 

Цитата(CheFF @  13.5.2008,  02:10 Найти цитируемый пост)
А практиковаться то особо и неначем. Все эти абстрактные задачи, вроде "переставить две переменные, без использования третьей" или "написать телефонную книгу с..." и тому подоное, очень угнетает 


нет идей? продолжим:
1) написать подобие Vista Media Center
2) WinAmp с поддержкой сторонних скинов, плагинов, в том числе и визуальных
3) или хотя бы Tetris, у которого при помощи плагинов можно выбрать внешний вид, анимацию, правила перехода к новому уровню игры и вознаграждение за проход уровня, которое сможет быть почти любым

последнее сам когда-то делал, давно уже... и не доделал до конца... терпения не хватило...
 smile 


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
DnV
Дата 9.6.2008, 06:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



По поводу темы обсуждения... Вообще говоря, для "дельфиста" ответ на самый первый пост темы (про аналог "uses ...") будет звучать как "partial class ..."  smile
Он просто смотрит на program.cs и думает, как из этого "модуля" увидеть другой smile Нужно время, чтобы понять, что мы говорим не о модулях, а о классах ;)

Это сообщение отредактировал(а) DnV - 9.6.2008, 10:09
PM MAIL   Вверх
xStorm
Дата 17.6.2008, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Учусь писать на C# в VS08.
Просмотрел прошлые посты, помогли мне больше разобраться.
У меня следующая проблема:
Программа считывает данные с реестра, в зависимости от данных, программа на этапе старта должна немного изменить "чертежи" форм, а доступ к ним я получить никак не могу.
Как мне например с MainForm изменить данные "чертежа" других форм.
через класс я так понял можно обращаться, но нужно задать тип static у класа той формы,  данные на которой я хочу изменить. Но что-то оно не работает у меня. Сразу начинает ругаться на кучу других вещей внутри класса, типо везде static ставить надо, везде ставишь не работает тоже.

Помогите, как получить доступ к элементам "чертежей" всех моих других форм.

Может вопрос такой и рассматривался, но видимо его изложение мне не было понятно, спасибо
PM MAIL ICQ   Вверх
ProgrammingLife
Дата 21.6.2008, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 19.1.2008
Где: ЧИРЧИКАГО (UZ)

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



Здарово ! xStorm ты работаешь над чертежами под компас что ли пишешь ??? Я НЕ СТАЛКИВАЛСЯ С ПРОБЛЕМОЙ С ЭТОЙ НО СОВЕТАЮ ТЕБЕ НАПИСАТЬ КОДИК ДА КТО НИ БУДЬ ОКЛИНКИТСЯ!
PM MAIL ICQ   Вверх
xStorm
Дата 27.6.2008, 01:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

            Registration frmReg = new Registration();
            frmReg.StartPosition = FormStartPosition.CenterScreen;
            frmReg.ShowDialog();

Вот пример создания формы по четрежу.
Какой-то другой ког писать не вижу смысла, так как мне нужно знать не только в конкретном случае, но и во всех остальных я тоже должен понимать все это дело.
Вопрос остался преждний
Как мне с, допустим, начальной формы программы, обращаться и редактировать "чертежи" всех других форм?
PM MAIL ICQ   Вверх
ivashkanet
Дата 27.6.2008, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


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

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



Цитата(xStorm @  17.6.2008,  23:18 Найти цитируемый пост)
Как мне например с MainForm изменить данные "чертежа" других форм.

Так, чертеж это код и только он. Изменять его можно только во время написания кода. Т.е. до компиляции.

MainForm это имя чертежа. С помощью этого имени можно создать новый объект по этому чертежу. 
Кроме того, есть набор данных и методов относящихся к чертежу, а значит ко всем экземплярам созданным по этому чертежу. Этот набор общих данных и методов помечается словом static.

Поэтому сразу нужно приучить себя не обращаться к чертежу (классу) когда нам нужен конкретный экземпляр. Если нам нужно обратиться к конкретной форме ты должен иметь ссылку на нее и обращаться через нее (как эту ссылку передавать говорилось не раз в этой теме).
Единственное исключение -- это паттерн Одиночка
Суть такая: есть только один экземпляр созданный по чертежу, так как он один, то его можно вывести в "данные чертежа".
Получиться что-то типа:
Код

    public partial class Form1 : Form
    {
        private static Form1 _singleSnstance;
        /// <exception cref="InvalidOperationException">Обращение к объекту когда он еще не создан</exception>
        public static Form1 SingleInstance
        {
            get
            {
                if (_singleSnstance == null)
                    throw new InvalidOperationException("Сначало нужно создать экземпляр формы Form1");

                return _singleSnstance;
            }
        }

        /// <exception cref="InvalidOperationException">Попытка создания второго экземпляра формы</exception>
        public Form1()
        {
            InitializeComponent();

            if (_singleSnstance != null) // проверяем создавался ли экземпляр этой формы ранее
                throw new InvalidOperationException("Может быть создан только один экземпляр класса Form1");

            _singleSnstance = this; // регистрируем себя в данных чертежа
        }
    }




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


Эксперт
***


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

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



xStorm, "чертеж формы", который ты создаешь в дизайнере, превращается в последовательность строк в функции InitializeComponent. Отредактировать "на лету" код без хорошего знания языка не получится. Подойди к проблеме с другой стороны. Из главной формы уже после создания дочерней "по чертежу" описывай как именно та должна быть отображена. Вот твой же пример:
Код
            // создали новый экземляр формы "Registration". При создании выполнился код InitializeComponent - применился "чертеж из дизайнера"
            Registration frmReg = new Registration();
            // указали особенности поведения этого конкретного экземпляра - появиться в центре экрана
            frmReg.StartPosition = FormStartPosition.CenterScreen;
            // показали его пользователю
            frmReg.ShowDialog();
Т.е. явно раздели общее поведение и поведение, характерное для конкретного экземпляра.
З.Ы. Предлагаю запретить слово "чертеж" как неоднозначное и вводящее в заблуждение.
ivashkanet, за такой синглтон надо расстреливать :(


--------------------
PM MAIL WWW   Вверх
Exai1e
Дата 5.7.2008, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Все по томуже вопросу, прочитал, прочитал но чтото не оч понял.
К примеру есть проект (1 форма + 1 доп. класс)
как можно в дополнительном классе написать напримерно вот так ?:
Код

Form1.richTextBox1.Text = "asdasd" + (a + b).ToString());


вот коды ост юнитов:
Код

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

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


Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}


воть... спасибо. Знаю что вопрос заезженный, но всеже.


--------------------
"Решение зависит от выбранного геморроя" © Snowy
"у нас как в армии - либо работает, либо так и задумано"
PM MAIL ICQ   Вверх
wotker
Дата 5.7.2008, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Код

 ...Form1.richTextBox1...

А так и нельзя писать
--------------------
ICQ ::            347306684e-mail ::         wotker[at]rambler[dot]ru 
PM MAIL ICQ   Вверх
Exai1e
Дата 5.7.2008, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



wotker, я понимаю что тут так нельзя, но как сделать так чтобы можно было в дополнительном модуле обращаться к элементам формы ?
например в Delphi можно написать так:
Код

Form2.Edit1.Text := '';
//или
Название_модуля.Form2.Edit1.Text := '';



--------------------
"Решение зависит от выбранного геморроя" © Snowy
"у нас как в армии - либо работает, либо так и задумано"
PM MAIL ICQ   Вверх
wotker
Дата 5.7.2008, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



есть класс
Код

class Form1
{
  ...
}


есть экземпляр - form1_.
обращаться к полю richTextBox1 можно только при помощи экземпляра (т.к. не помечено как static). 
Также richTextBox1 должно быть помечено атрибутом public

если эти 2 условия выполняются - пишешь:
Код

form1_.richTextBox1.text = "11";




--------------------
ICQ ::            347306684e-mail ::         wotker[at]rambler[dot]ru 
PM MAIL ICQ   Вверх
Exai1e
Дата 5.7.2008, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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


--------------------
"Решение зависит от выбранного геморроя" © Snowy
"у нас как в армии - либо работает, либо так и задумано"
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

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


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

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


 




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


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

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