kilka form i zamknięcie excela

0

Czy można w C# tworzyć aplikacje "wieloFormowa". Czyli: mam okienko (Form1), klikam przycisk i wyskakuje mi inne okienko (Form2)? Jeśli tak, to jak to zrobić. Bo wiem, że idzie do projektu dodawać Formy, ale co potem.
I jeszcze jedna sprawa. Jak zamknąć po skończonej aplikacji obiekt Excel?
Bo sprawa wygląda tak, że kończę aplikację, w której otworzyłem formularz, ale w menedżerze ciągle pokazuje się uruchomiony excel.exe.
Jak stworzę samą aplikację i wyjdę za pomocą System.Runtime.InteropServices.Marshal.ReleaseComObject(objApp)
to jest ok, ale jak wcześniej otworzę jakiś arkusz to już excel.exe się nie zamyka. Znalazłem gdzieś info, żeby zamknąć wcześniej ów arkusz za pomocą arkusz.Close() ale nie wiem jakie parametry wstawić.
Jak daje objBook.Close(false, "", false) to błąd. Jak daje objBook.Close(false, null, false), to też. Jak się nie zgadza liczba argumentów (mają być 3) to też błąd. Tu jest nawet opis tej funkcji, ale ja nie rozumiem o czym o ni do mnie rozmawiają http://msdn2.microsoft.com/en-us/library/microsoft.office.tools.excel.workbook.close(VS.80).aspx. Skoro bowiem parametr jest optional, to jak go nie podam powinno być ok, ale kompilator zaraz jęczy, że mu się ilość nie zgadza. A wepchnę mu jakiś pusty ciąg, to zaraz pretensje i "Old format or invalid type library. (Exception from HRESULT: 0x80028018 (TYPE_E_INVDATAREAD))". Pomocy bo normalnie [glowa] .
Pozdrawiam.

0

I jeszcze jedno pytanie: jeżeli przenoszę na dysk sieciowy pliczor exe (wynikowy kompilacji) z bibliotekami i próbuje uruchomić, dlaczego aplikacja się wywala natychmiast na starcie? Tak się trochę nie orientuje, bo w sumie to mój pierwszy program w środowisku .NET.
Pozdrawiam.

0
janusz_rympała napisał(a)

jeżeli przenoszę na dysk sieciowy pliczor exe (wynikowy kompilacji) z bibliotekami i próbuje uruchomić, dlaczego aplikacja się wywala natychmiast na starcie?
Pozdrawiam.

Uruchom przystawkę mscorcfg.msc i ustaw security policy, aby zezwalały na uruchamianie assembly z intranetu.

0

Nie znam takiej przystawki, ani nawet podobnej do niej z nazwy (przynajmniej w winxp).
Pozdrawiam.

0

Problem rozwiązał się... sam(?)

objBook.Close(false, null, false); 
System.Runtime.InteropServices.Marshal.ReleaseComObject(objBook);

Pierwsza linia zamyka arkusz o nazwie objBook, druga likwiduje referencję do środowiska uruchomieniowego (chyba dobrze to przetłumaczyłem), czyli Excela. Po tym jak już nic nie odwołuje się do Excela, można go spokojnie zamknąć.

Doprawdy nie mam pojęcia dlaczego to wcześniej nie działało.
Pozdrawiam.

0

Na dole strony którą sam podałeś masz przykład:

The following code example uses the Close method to close the current workbook without saving any changes.

private void WorkbookClose()
{
    this.Close(false, false, missing);
}
0

Ale jak zaznaczyłem w poście, przykład ten nie działał. Ten konkretnie, ponieważ "missing" to niepoprawny argument. Tak wskazywał przynajmniej debugger.

0
janusz_rympała napisał(a)

System.Runtime.InteropServices.Marshal.ReleaseComObject(objBook);

> 
> likwiduje referencję do środowiska uruchomieniowego (chyba dobrze to przetłumaczyłem)


prawie :)

środowisko uruchomieniowe wykonuje kod zarządzany, czyli np. skompilowany kod C#. Linijka, którą podałeś, explicite zwalnia obiekt COM, z którym komunikują się C#-owe wrappery czyli klasy RCW (na marginesie: każdy obiekt COM powinien być zwalniany, bowiem posiada on własny licznik odwołań i usuwa się z pamięci tylko wtedy, kiedy licznik (zwiększany podczas tworzenia obiektu) osiągnie wartość zero).

1 użytkowników online, w tym zalogowanych: 0, gości: 1