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/