Всем привет!
Столкнулся вот с такой проблемой:
В dll находится обычная форма с несколькими визуальными контролами
public partial class Form1 : Form
{
public Form1()
{
this.Show();
}
...
}
В основной программе тоже находится форма (главная) и мне нужно загрузить Form1 в другом домэне:
MyDomain = AppDomain.CreateDomain("NewDomain")
MyDomain.CreateInstanceFrom("...\WindowsApplication1.dll", "WindowsApplication1.Form1");
Форма появляется, но она почему то глюкаво работает: если курсор находится в гриде, то при нажатии стрелки(любой) курсор ввода перемещается на другой контрол; клавиша табуляции перемещает курсор ввода в обратном направлении. Может и еще глюки есть, но меня и эти совсем не устраивают. Когда загружаю Form1 в текущем домэне, то там все нармально работает
Подскажите пожалуйста, может я че не так делаю, или какие нибудь настройки нужно изменить... !!!
Здравствуйте, boa67, Вы писали:
B>Подскажите пожалуйста, может я че не так делаю, или какие нибудь настройки нужно изменить... !!!
Насколько я понимаю, чтобы все крутилось в соседнем AppDomain'е нужно в нем создать очередь сообщений...
я не 100 процентно в этом уверен, но на 99 — да.
то есть, в соседнем домене надо создавать что-то типа Program. или же его статический метод звать.
наилучший вариант — нарисовать что-то типа такого класса:
public class FormStarter: MarshalByRefObject
{
public void StartForm(string Assembly, string Type)
{
Form frm = (Form)Activator.CreateInstance(Assembly, Type);
// Далее - одно из двух:
Application.Run(frm);
// или
frm.ShowDialog();
}
}
по поводу создания инстанса в хелп не смотрел, студию тоже не запускал — мог ошибиться. но в целом все должно быть верно и принцип понятен.
соответственно создавать в главном приложении надо как раз FormStarter и его методы уже дургать...
Да, еще хорошо бы у FormStarter'а перекрыть InitializeLifetimeServices (или как-оно-там)...
... << RSDN@Home 1.2.0 alpha rev. 789>>
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
Здравствуйте, Hacker_Delphi, Вы писали:
H_D>Насколько я понимаю, чтобы все крутилось в соседнем AppDomain'е нужно в нем создать очередь сообщений...
H_D>я не 100 процентно в этом уверен, но на 99 — да.
H_D>...
Спасибо! Вы оказались правы на 100%