![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
Pita |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 14.6.2007 Репутация: нет Всего: нет |
Помогите пожалуйста нубу(желательно примерами) как я могу из класса передать данные в форму
К примеру вот код using System; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { cl.fun(); } } } часть кода из Form1.Designer.cs private System.Windows.Forms.Panel panel1; private System.Windows.Forms.ListBox listBox1; private System.Windows.Forms.Button button3; private System.Windows.Forms.Button button2; private System.Windows.Forms.Button button1; public System.Windows.Forms.RichTextBox richTextBox1; public System.Windows.Forms.TreeView treeView1; сам класс namespace WindowsFormsApplication1 { class cl { public static void fun() { //Вот тут надо вызвать treeView1.Nodes.Add(newNode); } } } |
|||
|
||||
source777 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 3 Всего: 56 |
Сгенерируй событие и отлови его из класса формы.
-------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
-Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 4 Всего: 59 |
Неправильный подход в корне, приводит к проблемам в коде...
-------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
v00d00 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 142 Регистрация: 28.12.2005 Репутация: нет Всего: нет |
Доступны будут соответственно только паблик свойства и методы формы. P.S. По моему вы пытаетесь использовать функциональный подход в объектно ориентированном языке. Это сообщение отредактировал(а) v00d00 - 17.3.2009, 21:18 |
|||
|
||||
Pita |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 14.6.2007 Репутация: нет Всего: нет |
-Mikle-, а можно ли узнать в чем подход неправильный??
|
|||
|
||||
-Mikle- |
|
||||||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 4 Всего: 59 |
Правил нет, но есть рекомендации. При создании архитектуры, необходимо стремиться к уменьшению зависимостей классов друг от друга. Особенно это касается нижестоящих в структуре классов. Исключение могут составлять так называемые nested (ближние) классы (типы). В твоем (я так понимаю тестовом) примере, класс cl находится на одном уровне с формой, а в структуре - ниже нее, так как форма создает этот класс. В таком случае, нормально то, что класс формы знает о существовании cl, но cl не должен быть привязан к форме прямой связью, иначе пропадает смысл его создания как отдельного класса. Ведь его нальзя будет использовать с другими формами. Если все же необходимо вынести код работающий с твоей конкретной формой (или неким классом) в отдельный класс, но этот код должен быть связан с кодом вышестоящего класса (такие задачи встречаются), то в таких случаях класс объявляют внутри вышестоящего класса с конструктором, принимающем ссылку на вышестоящий класс. Зачастую его использование ограничено извне и его делают private.
При этом, все поля класса SomeClass (даже private) будут доступны внутри класса SomeClassHelper по ссылке _owner. Однако, если класс будет работать с более общим базовым типом (Control, IList, .... ), то тогда есть резон сделать его самостоятельным, то есть вынести его наружу, так как его использование не зависит от конкретного его создателя. То есть он сможет работать и с формой, и с кнопкой, и с панелью. Существует несклоько подходов по связыванию классов между собой. Конкретный подход выбирается исходя из конкретной задачи. События хороши тогда, когда необходимо оповестить внешний класс, о тех или иных событиях ![]() Интерфейсы это вообще универсальный механизм, позволяющий описать конкретные методы, события и свойства, без необходимости их конкретной реализации. Один класс, может наследовать любое кол-во интерфейсов. Абстрактные классы тоже позволяют описать конкретный интерфейс без его реализации, но в отличие от интерфейсов, абстрактные классы могут содержать некую реализацию. Множественное наследование абстрактных классов (да и вообще классов) в .NET не допускается. Поэтому я и сказал, что подход в корне не верный, так как это
напрямую пытается использовать treeView1 конкретной твоей Form1 (ключевое слово static в объевлении метода, я списываю на опечатку). Даже если ты передашь ссылку на форму, то все равно будет неверный подход, так как Form1 будет зависеть от cl и cl будет зависеть от Form1. То есть они не смогут существовать раздельно, а значит нет необходимости разделять их код по разным классам. Может возникнуть задача, когда некоторые ф-ии должны быть доступны везде. Тогда объявляют статический класс и статические методы. Например:
-------------------- Если тебе плюют в спину, значит ты впереди... |
||||||
|
|||||||
Pita |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 14.6.2007 Репутация: нет Всего: нет |
Благодарю за помощь, буду разбираться...
|
|||
|
||||
-Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 4 Всего: 59 |
Всегда пожалуйста, для этого мы все и здесь. -------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | .NET для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |