C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.66643 の関連記事表示

<< 0 >>
■66643  Re[4]: C#でExcelシート上のチェックボックスの変更
□投稿者/ のぶ -(2013/05/13(Mon) 13:10:37)
    No66639 (魔界の仮面弁士 さん) に返信
    > ■No66638 (のぶ さん) に返信
    >>ReleaseObj(ref sheet);
    > これって、おそらくは COM 解放の Marshal.ReleaseComObject ですよね。
    > 宣言は void ReleaseObj<T>(ref T) でしょうか。
    お察しの通りCOM解放用のメソッドです。
    ただ、ジェネリックスは使用せずオーバーロードで・・・という恥ずかしい書き方をしていました。。。
    ジェネリックスについて完全に忘れていたので、以下の様に書き換えました。

    private void ReleaseObj<T>(ref T shape)
    {
    if (shape == null) return;
    while (Marshal.ReleaseComObject(shape) != 0) ;
    shape = default(T);
    }

    > たとえば Shape は、Parent プロパティで Worksheet を返してきます。
    > 今の解放順を逆にして、子階層から処分した方が良いと思ます;念のため。
    そうですね。他の時でしたら「使った逆順で解放する」と心がけていましたが、
    Excelの操作で頭がいっぱいでそこまで気が回っていませんでした。
    ご指摘ありがとうございます。


    > ループ中のそれぞれの Shape/GroupShapes や
    > DrawingObject も、 COM オブジェクトじゃないですかね。
    ループ中の場合も解放した方がいいのでしょうか?
    一応一番最後に
    ReleaseObj(ref g);
    という形でGroupShapesに関しては開放しています。

    for (int i = 1; i <= shapes.Count; i++)
    {
    group = shapes.Item(i);
    if (group.Name == groupName)
    break;
    ReleaseObj(ref group); // ←こうすべき??
    }
記事No.66599 のレス /過去ログ112より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -