Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / не создается новый объект - а передается ссылка на уже созданный объект. / 10 сообщений из 10, страница 1 из 1
17.02.2015, 08:12
    #38881273
ughunter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не создается новый объект - а передается ссылка на уже созданный объект.
пробовал клонировать - но класс-родитель не сериализуем.

отсюда вопрос:

Код: c#
1.
public partial class mainForm : Form { конструктор формы. хендлеры. делегаты и прочие веселости}



далее

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
public struct PluginActionItem
    {
        public Locations Location;
        public LocationDescriptions LocationDescription;
        public Items Item;
        public sMainForm Form;
    }

public class sMainForm
    {
        public Form form;
        public PluginType pluginType;
    }

BarButtonItem barButtonItem = new BarButtonItem()
            {
                Caption = @"Обратная связь",
                Glyph = (Image)Properties.Resources.Icon32x32,
                LargeGlyph = (Image)Properties.Resources.Icon32x32,
                Name = "BarButtonItem_" + number,
                Tag = new sMainForm()
                {
                    [color=red]Form = mainForm,[/color]
                    pluginType = pluginType
                }
            };



Нажимаем кнопку - выполняется обработчик - открывается форма

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
[color=orange]Dim form As Form = mf.Form[/color]
            If mf.pluginType <> PluginType.From Then
                Form.MdiParent = Me
                Form.Tag = Guid.NewGuid.ToString
                Try
                    Form.Show()
Catch ex As Exception
                    XtraMessageBox.Show(ex.Message)
                End Try
End if



закрываем форму. нажимаем снова и попадаем на эксепшен. доступ к уничтоженному объекту ...
Как (выделено оранжевым) передать не ссылку на объект - а создать новый ? Никак понять не могу.

Уточнение: при первом нажатии - все ок - при повторном - эксепшен

В случае если форма вызывается как модальное окно - ее закрытие можно контролировать. В остальных случаях всем рулит оконный менеджер и он принудительно вызывает dispose объекта. А поскольку ссылка на него - вот эксепшен и вылазит. Вернемся с чего начали - как же создать новый? Единственно что приходит на ум - вывести конструктор класса формы в паблик... Но тогда встает другой вопрос - если форм много то как указать какой именно использовать конструктор в хендлере нажатия на кнопку?

может в конструкции (выделено красным) есть возможность передать не ссылку на объект (когда он только создаться успел??) а указатель на класс?
мозг уже наизнанку выверну. чую - истина где-то рядом...

помогите кто чем может ))
...
Рейтинг: 0 / 0
17.02.2015, 12:11
    #38881561
Супер_Пав
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не создается новый объект - а передается ссылка на уже созданный объект.
В VB.Net регистр не учитывается? Просто создаете Dim f orm As Form = mf.Form, а обращаетесь к F orm.MdiParent = Me
Но это так, мелочи. mf.Form уничтожается, я так понимаю, проблема в этом. Не вижу весь код, смотрите, что с mf.Form происходит, есть ли возможность не убивать объект.
Form form = new Form() не устраивает? Например, можно передавать все необходимые сво-ва из mf.Form:
Код: c#
1.
2.
3.
4.
Form for = new Form()
{
    //Тут перечень свойств
}
...
Рейтинг: 0 / 0
18.02.2015, 09:26
    #38882458
ughunter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не создается новый объект - а передается ссылка на уже созданный объект.
Супер_Пав, передавать все необходимы свойства нереально. Через нею я пробовал = все равно после присваивания Form = mf.Form - Form перестает быть отдельным объектом а представляет ссылку на mf.Form. Почему при закрытии Form происходит уничтожение mf.Form - загадка...
...
Рейтинг: 0 / 0
18.02.2015, 09:29
    #38882460
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не создается новый объект - а передается ссылка на уже созданный объект.
ughunter,

зачем её закрывать? нельзя просто скрыть?
...
Рейтинг: 0 / 0
18.02.2015, 09:40
    #38882472
ughunter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не создается новый объект - а передается ссылка на уже созданный объект.
Roman Mejtes, можно скрыть - если она отображена как модальное окно. Тогда просто при новом открытии все элементы программно кинуть в дефолт (это решаемо), но если она открыта менеджером модальных форм - он убивает всех своих потомков при закрытии. И это никак не переопределить.
...
Рейтинг: 0 / 0
18.02.2015, 09:41
    #38882474
ughunter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не создается новый объект - а передается ссылка на уже созданный объект.
блин не то написал... менеджером MDI конечно
...
Рейтинг: 0 / 0
18.02.2015, 10:40
    #38882562
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не создается новый объект - а передается ссылка на уже созданный объект.
ughunter,

создайте модель представления, а форма будет только презентером этой модели. Вы легко сможете контролировать то, как и когда существует ваша модель. А окно будет лишь отображать её на экране. Тогда вы перестанете зависеть от окна. Когда надо открыть окно, вы просто будете создавать окно и передавать ему модель представления. После того как модель закрыли презентор будет удален менеджером, а модель представления останется, когда надо открыть снова, вы просто создаете окно еще раз и снова передаете туда модель. Профит.
...
Рейтинг: 0 / 0
18.02.2015, 11:29
    #38882647
ughunter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не создается новый объект - а передается ссылка на уже созданный объект.
Roman Mejtes, и как это будет выглядеть на практике? Можно примерчик?
...
Рейтинг: 0 / 0
18.02.2015, 14:50
    #38882932
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не создается новый объект - а передается ссылка на уже созданный объект.
ughunter,

я не силён в WF, как связывание в нём работает я не знаю.
почитай про шаблоны программирования
...
Рейтинг: 0 / 0
18.02.2015, 17:14
    #38883165
Супер_Пав
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не создается новый объект - а передается ссылка на уже созданный объект.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
public partial class Form1 : Form
{
    private Form2 Form;

    public Form1()
    {
        InitializeComponent();

        Form = new Form2();
        Form.FormClosing += Form_FormClosing;
    }

    private void Form_FormClosing(object sender, FormClosingEventArgs e)
    {
        e.Cancel = true;
        ((Form)sender).Hide();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 form2 = this.Form;
        form2.Show();
    }
}
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / не создается новый объект - а передается ссылка на уже созданный объект. / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]