namespace MyNamespace
{
public partial class Form1 : Form
{
private Class1 _member;
public Form1()
{
InitializeComponent();
}
public void Method()
{
// some actions
}
}
public class Class1
{
public void SomeMethod
{
Method(); // КАК ВЫЗВАТЬ ЭТОТ МЕТОД???
}
}
}
мне нужен любой способ вызвать этот метод, пофиг на дизайн...
в с++ можно было в конструкторе передать указатель на парента и дергать у него все public, а здесь никак...((
Подскажите плиз!
Все имена функций и классов изменены, любое совпадение является случайным.
Здравствуйте, nik0lay, Вы писали:
N>есть такая картина маслом:
N>
N>namespace MyNamespace
N>{
N> public partial class Form1 : Form
N> {
N> private Class1 _member;
N> public Form1()
N> {
N> InitializeComponent();
_member = new Class1(this);
N> }
N> public void Method()
N> {
N> // some actions
N> }
N> }
N> public class Class1
N> {
Form1 m_parent;
public Class1(Form1 parent)
{
m_parent = parent
}
N> public void SomeMethod()
N> {
N> m_parent.Method(); // КАК ВЫЗВАТЬ ЭТОТ МЕТОД???
N> }
N> }
N>}
N>
N>мне нужен любой способ вызвать этот метод, пофиг на дизайн... N>в с++ можно было в конструкторе передать указатель на парента и дергать у него все public, а здесь никак...(( N>Подскажите плиз!
Еще как...
Re[2]: КАК вызвать метод главной формы из мембера ?
Все имена функций и классов изменены, любое совпадение является случайным.
Re: КАК вызвать метод главной формы из мембера ?
От:
Аноним
Дата:
09.01.09 10:27
Оценка:
Здравствуйте, nik0lay, Вы писали:
N>есть такая картина маслом:
N>
N>namespace MyNamespace
N>{
N> public partial class Form1 : Form
N> {
N> private Class1 _member;
N> public Form1()
N> {
N> InitializeComponent();
N> }
N> public void Method()
N> {
N> // some actions
N> }
N> }
N> public class Class1
N> {
N> public void SomeMethod
N> {
N> Method(); // КАК ВЫЗВАТЬ ЭТОТ МЕТОД???
N> }
N> }
N>}
N>
N>мне нужен любой способ вызвать этот метод, пофиг на дизайн... N>в с++ можно было в конструкторе передать указатель на парента и дергать у него все public, а здесь никак...(( N>Подскажите плиз!
Mojna paprobovats tak
public void SomeMethod
{
string FulltypeName = Assembly.GetExecutingAssembly().GetName().Name.ToString() + ".Form1";
Type tp = Type.GetType(FulltypeName);
object ob = Activator.CreateInstance(tp,NULL);
Type[] param = new Type[0];
Здравствуйте, nik0lay, Вы писали:
N>чё?
в с++ можно было в конструкторе передать указатель на парента и дергать у него все public, а здесь никак...(
всмысле "Еще как можно!", ну и код подправил для наглядности
Re[4]: КАК вызвать метод главной формы из мембера ?
Здравствуйте, vitz, Вы писали:
V>Здравствуйте, nik0lay, Вы писали:
N>>чё? V>в с++ можно было в конструкторе передать указатель на парента и дергать у него все public, а здесь никак...( V>всмысле "Еще как можно!", ну и код подправил для наглядности
хаха ))) спасибо!
действительно можно ...
мозги уже наружу после бессонной ночи
Все имена функций и классов изменены, любое совпадение является случайным.
Re[2]: КАК вызвать метод главной формы из мембера ?
Здравствуйте, nik0lay, Вы писали:
N>хаха ))) спасибо! N>действительно можно ... N>мозги уже наружу после бессонной ночи
Угу, у самого: Новый год и все такое
Re[3]: КАК вызвать метод главной формы из мембера ?
Да, ребята, плохо вы учебники шерстите. Ладно, расскажу теорию от и до... Существует два типа классов — это статические и обычные, ссылочные. Данный класс Form1 не статический, плюс еще содержит нестатический класс Class1. Для статичееских классов создавать экземпляр, чтоб добраться до полей и методов не нужно. А вот для обычных — это обязательно. Чтобы вызвать нужный тебе метод, тебе необходимо иметь ссылку на этот класс.
Если не понятно — объясняю подробнее:
Class1
{
int pole = 0;
Method1()
{
//тело метода
}
}
static void Main()
{
Class1 cl1 = new Class1(); \\ Создаем экземпляр класса Class1. Ссылку на класс сохраняем в cl1
cl1.Method1() \\ Вызов метода
}
Теперь по нашей ситуации.
Если открыть в VS файл Program.cs там вы можете увидеть как создается новый экземпляр класса Form1, но ссылка на него не сохраняется.
Application.Run(new Form1()); \\ в скобках оператором new создан экземпляр класса Form1 и этот экземпляр передается как параметр методу Run класса Aplication.
Это можно исправить!
static class Program
{
Form1 frm;
static void Main()
{
frm = new Form1();
Application.Run(frm);
}
}
Если немного пораскинуть мозгами, то станет ясно, что ссылка на экземпляр сохранена в классе Program и добраться до этой ссылки не составит труда просто набрав Program.frm! Это мой любимый способ, поскольку совершенно не жрет ресурсы во время выполнения. + можно получить ссылку из любого класса.
Расскажу про другой спосов. В этой теме он был. Это использовать методы отражения. Очеть интересный способ поскольку позволяет выполнить даже private методы в любой сборке. сначала получить сборку — GetExecutingAssembly(), затем все методы или поля, что требуются. А потом через эти же методы отражения вызвать нужный метод. Нудно и расстачительно в плане ресурсов(если метод вызывается много раз).
Re[2]: КАК вызвать метод главной формы из мембера ?
Здравствуйте, BAHEK, Вы писали:
BAH>Да, ребята, плохо вы учебники шерстите. Ладно, расскажу теорию от и до...
Спасибо за одолжение.
BAH>Существует два типа классов — это статические и обычные, ссылочные. Данный класс Form1 не статический, плюс еще содержит нестатический класс Class1. Для статичееских классов создавать экземпляр, чтоб добраться до полей и методов не нужно. А вот для обычных — это обязательно. Чтобы вызвать нужный тебе метод, тебе необходимо иметь ссылку на этот класс.
Очень хорошо. Теперь Вам осталось разобраться, зачем они вообще нужны, эти статические и "обычные" классы, и можно смело идти сдавать зачет по ООП и информатике.
BAH>Если немного пораскинуть мозгами, то станет ясно, что ссылка на экземпляр сохранена в классе Program и добраться до этой ссылки не составит труда просто набрав Program.frm! Это мой любимый способ, поскольку совершенно не жрет ресурсы во время выполнения. + можно получить ссылку из любого класса.
Отличная идея! Надо сделать _всё_ доступным _отовсюду_, забить на иерахии и вложенности классов, и процесс программирования не будет таким утомительным и сложным.
BAH>Очеть интересный способ поскольку позволяет выполнить даже private методы в любой сборке.
Правильно! Тормоза и private-мемберы придумали трусы. Предлагаю вообще отменить и то и другое
BAH>Нудно и расстачительно в плане ресурсов(если метод вызывается много раз).
Похоже экономия ресурсов — единственное что Вас заботит.
Общий итог — учите матчасть, автор.
минус 500 от кармы
Все имена функций и классов изменены, любое совпадение является случайным.