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

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

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

No.95115 の関連記事表示

<< 0 >>
■95115  Re[1]: 仕様?誤使用?
□投稿者/ 魔界の仮面弁士 -(2020/06/24(Wed) 11:32:56)
    2020/06/24(Wed) 11:34:02 編集(投稿者)

    No95114 (chobi さん) に返信
    >  if (ctr.Name == "AccountElement")
    >  {
    Controls 内に、同じ Name を持つコントロールが複数あるのでしょうか。
    デザイナー画面で貼った場合、同名コントロールは同時に存在できないハズです。
    (デザイナーを用いず、コードで生成していた場合は、同名コントロールや無名コントロールも配置可能です)

    もし、 "AccountElement" なコントロールがひとつだけなら、
    発見した時点で break; して、ループを抜けてしまえば良いと思います。



    > Controls.Remove(ctr);

    ctr.Dispose(); が漏れているように見えます。

    Panel に貼ったコントロールは、親フォームが閉じられたときに、
    一緒に Dispose されるのですが、Remove や RemoveAt した場合は、
    Controls の管理下から外れてしまうので、明示的に Dispose(); する必要があります。


    > 以下のようにforeachで列挙しながらチェック、削除していますが、
    > foreach (Control ctr in Controls)


    // 修正案1: 後ろから前に探索するようにする
    for ( int i = Controls.Count - 1 ; i >= 0 ; i-- )
    {
     Control ctrl = Controls[i];


    // 修正案2: Controls そのものではなく、そこから取り出した「削除前のコントロール一覧」を列挙する
    foreach (var ctrl in Controls.Cast<Control>().ToArray() )
記事No.95114 のレス /過去ログ165より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -