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

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

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

No.87039 の関連記事表示

<< 0 >>
■87039  Re[15]: コントロールが全て削除されてしまう
□投稿者/ 魔界の仮面弁士 -(2018/04/08(Sun) 14:53:23)
    2018/04/08(Sun) 14:54:51 編集(投稿者)

    No87025 (FRMC さん) に返信
    > iLabel = New Label
    > With iLabel

    この iLabel はどこで宣言していますか?

    ローカル変数であるのなら良いですが、
    フィールド変数として
      Private iLabel As Label
    などとするのは NG ですよ。


    No87032 (Azulean さん) に返信
    >> 先ほどは iPic が PictureBox と仮定しましたが、
    >> だとしたら PointN というメンバーは無いはず…。
    > なぜ、このスレッドでは明かしていないのか謎ですが、 No86825 では元のサンプルのサイトをリンクしています。

    なるほど。そこまでは見ていませんでした。 No86812 から始まるスレッドですね。
    http://bbs.wankuma.com/index.cgi?mode=al2&namber=86812#5


    > 元としたサンプルの悪い使い方の影響を受けているのかもしれませんね。
    Web ページに書かれた文章はそうなっていますが、
    公開されている試作品では下記のように実装されていました。
    一応、一意な名前を割り当てようとしているようですね。

     'Name = "exL" & i 'Withの中だとName、tag、textが空白になる
     'Tag = i
     'Text = i
    End With
    Me.iLabel.Name = i
    Me.iLabel.Tag = i
    iLabel.Text = i

    Name だけでなく Text もセットされているので、あちらの実装では
    各頂点ラベルに [0]、[1]、[2] …の文字も表示させているようです。



    No87034 (FRMC さん) に返信
    > だとしたら修正します。

    頂点ラベルの位置も補正した方が良いと思います。

    先ほどの
     https://pbs.twimg.com/media/DaF-QOYVwAAY1CR.jpg
    を見てみると、ラベルの左上が頂点になっていますが、
    マーカーの中心が頂点にくるようにする方が綺麗に見えます。

     .Width = 11
     .Height = 11
     .Location = ps(i) - New Point(5, 5)

    もちろんドラッグ処理についても、同様の補正が必要になりますが。


    で、本題となる「ラベルの削除」ですが、これについては既に
    残ってしまう原因を No87031 で説明しており、
    正しく消せる実例を No86986 で述べております。

    すなわち、iPic に置き換えると
      'これだと Label のハンドルがリークする
      'iPic.Controls.Clear()
      '
      'なので No86986 の対策コードに差し替える
      For Each lbl In iPic.Controls.OfType(Of Label).ToArray()
        iPic.Controls.Remove(lbl)
        lbl.Dispose()
      Next
    ということですね。

    もしも先の説明で分からなかった点があるようであれば、
    理解できなかった部分を示していただければ、追加説明を加えることもできますよ。


    > Expictureboxで線の描画をしています。
    > pictureboxはあくまでも背景です。
    うーん。あのサンプルをそのまま真似ているのだとすると、
    ドラッグ処理のところで、直線の再描画のために
      Dim canvas As New Bitmap(Me.ExPictureBox1.Width, Me.ExPictureBox1.Height)
      Dim g As Graphics = Graphics.FromImage(canvas)
      '
      '中略(描画処理)
      '
      Me.ExPictureBox1.Image = canvas
    というコードが使われているのが気がかりです。
    差し替える前の古い Image と、作成した Graphics が解放漏れとなっているので…。
    (既に修正済みかもしれませんが)
記事No.86964 のレス /過去ログ149より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -