mojaSymfonia FORUM https://forum.mix-soft.pl/ |
|
Kontrolka OCX nie inicjuje się w formularzu. https://forum.mix-soft.pl/viewtopic.php?f=15&t=7432 |
Strona 1 z 1 |
Autor: | Mustrum [ 2016-09-12, 13:33 ] |
Tytuł: | Kontrolka OCX nie inicjuje się w formularzu. |
Utworzyłem sobie najzwyklejszą kontrolkę w C# używając Winforms z dwoma przyciskami i textboxem. Gdy próbuję ją wrzucić do formularza: Cytuj: Form "ControlTest", 400, 230 Control "NazwaWRejestrze", test, 10, 10, 370, 150 Button "Zamknij",280, 170, 100, 25, 2 Button "OK",10, 170, 100, 25, OnOK() //test.test1() int rv = ExecForm Otrzymuję pusty formularz (nawet bez przycisków). Gdy próbuję wywołać (tu zakomentowaną) metodę, otrzymuję błąd "Obiekt OLE nie został zainicjowany". Jest to o tyle dziwne, że gdy gdy dostaję się do niej przez: Cytuj: dispatch test = "NazwaWRejestrze" test.test1() Wszystko przebiega pomyślnie. Czy ktoś napotkał podobny problem, lub ma pomysł czym może to być spowodowane? |
Autor: | Mustrum [ 2016-09-12, 13:50 ] |
Tytuł: | Re: Kontrolka OCX nie inicjuje się w formularzu. |
W zasadzie cała funkcjonalność kontrolki mieści się w: Kod: [ProgId("NazwaWRejestrze")] [ClassInterface(ClassInterfaceType.AutoDual)] public partial class UserControl1: UserControl { public UserControl1() { InitializeComponent(); } private void UserControl1_Load(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { textBox1.Text = ""; } private void button2_Click(object sender, EventArgs e) { textBox1.Text += "hurr "; } public void test1() { textBox1.Text = "asdasd"; } [ComRegisterFunction()] public static void RegisterClass(string key) { StringBuilder sb = new StringBuilder(key); sb.Replace(@"HKEY_CLASSES_ROOT\", ""); RegistryKey k = Registry.ClassesRoot.OpenSubKey(sb.ToString(), true); RegistryKey ctrl = k.CreateSubKey("Control"); ctrl.Close(); RegistryKey inprocServer32 = k.OpenSubKey("InprocServer32", true); inprocServer32.SetValue("CodeBase", Assembly.GetExecutingAssembly().CodeBase); inprocServer32.Close(); k.Close(); } [ComUnregisterFunction()] public static void UnregisterClass(string key) { StringBuilder sb = new StringBuilder(key); sb.Replace(@"HKEY_CLASSES_ROOT\", ""); RegistryKey k = Registry.ClassesRoot.OpenSubKey(sb.ToString(), true); k.DeleteSubKey("Control", false); RegistryKey inprocServer32 = k.OpenSubKey("InprocServer32", true); k.DeleteSubKey("CodeBase", false); k.Close(); } } |
Autor: | Mustrum [ 2016-09-13, 09:39 ] |
Tytuł: | Re: Kontrolka OCX nie inicjuje się w formularzu. |
Już nieaktualne, rozwiązałem to w inny sposób. Zamiast tworzyć komponent utworzyłem nowy proces otwierający osobne okno. |
Strona 1 z 1 | Strefa czasowa UTC+1godz. [letni] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |