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

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

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

No.66962 の関連記事表示

<< 0 >>
■66962  ツリービューの自作
□投稿者/ 寿里庵 -(2013/06/12(Wed) 17:36:50)

    分類:[VB.NET/VB2005 以降] 

    いつもお世話になっています。
    チェックボックスとイメージが表示されてるツリービューの部品を自作していますが、矢印の場所で下記のようなエラーが出ています。

    <ToolboxBitmap(GetType(System.Windows.Forms.TreeView))> _
    Public Class FolderTreeView
    Inherits TreeView

    ''' <summary>Sharedコンストラクタ</summary>
    ''' <remarks></remarks>
    Shared Sub New()

    Dim Icons As New ImageList
    Icons.Images.Add("Close", Image.FromFile("C:\CloseFolder.jpg"))
    Icons.Images.Add("Open", Image.FromFile("C:\OpenFolder.jpg"))

    Me.ImageList = Icons ← ここで「'Me' は、インスタンス メソッド内でのみ有効です。」
    Me.CheckBoxes = True ← ここで「'Me' は、インスタンス メソッド内でのみ有効です。」
    End Sub

    End Class


    解決策をご存知の方よろしくお願いします

親記事 /過去ログ113より / 関連記事表示
削除チェック/

■66963  Re[1]: ツリービューの自作
□投稿者/ 魔界の仮面弁士 -(2013/06/12(Wed) 18:07:09)
    No66962 (寿里庵 さん) に返信
    > 矢印の場所で下記のようなエラーが出ています。
    「Sub New」と「Shared Sub New」の違いは分かりますか?
    後者は共有コンストラクタであり、特定のインスタンスに紐付いたものではありません。
    そのため、自インスタンスを指し示すための Me を使うこともできないということです。

    > 解決策をご存知の方よろしくお願いします
    Shared を外しましょう。
記事No.66962 のレス /過去ログ113より / 関連記事表示
削除チェック/

■66968  Re[2]: ツリービューの自作
□投稿者/ 寿里庵 -(2013/06/13(Thu) 11:20:50)
    > ■No66962 (寿里庵 さん) に返信
    >>解決策をご存知の方よろしくお願いします
    > Shared を外しましょう。

    説明不足で申し訳ございません
    Shared を外すと、Designer.vbで下記のようなエラーが出ます
    エラー 34 'Public Sub New()' には同じ署名で複数の定義が存在します。

    だから、Shared を外したり、PrivateやPublicに変更することができませんでした。


    よろしくお願いします
記事No.66962 のレス /過去ログ113より / 関連記事表示
削除チェック/

■66970  Re[3]: ツリービューの自作
□投稿者/ shu -(2013/06/13(Thu) 12:19:56)
    2013/06/13(Thu) 12:20:34 編集(投稿者)

    No66968 (寿里庵 さん) に返信


    > Dim Icons As New ImageList
    > Icons.Images.Add("Close", Image.FromFile("C:\CloseFolder.jpg"))
    > Icons.Images.Add("Open", Image.FromFile("C:\OpenFolder.jpg"))
    >
    > Me.ImageList = Icons ← ここで「'Me' は、インスタンス メソッド内でのみ有効です。」
    > Me.CheckBoxes = True ← ここで「'Me' は、インスタンス メソッド内でのみ有効です。」
    この部分を切り取って

    Shared Sub New, End Sub を削除してから

    Public Sub New()と入力してエンターを押下すると

    Public Sub New()

    ' この呼び出しはデザイナーで必要です。
    InitializeComponent()

    ' InitializeComponent() 呼び出しの後で初期化を追加します。

    End Sub

    このようにコードが挿入されると思うので
    ' InitializeComponent() 呼び出しの後で初期化を追加します。
    の下に切り取った内容を貼りつけます。

記事No.66962 のレス /過去ログ113より / 関連記事表示
削除チェック/

■66972  Re[3]: ツリービューの自作
□投稿者/ 魔界の仮面弁士 -(2013/06/13(Thu) 13:34:11)
    No66968 (寿里庵 さん) に返信
    > Shared を外すと、Designer.vbで下記のようなエラーが出ます
    > エラー 34 'Public Sub New()' には同じ署名で複数の定義が存在します。

    ここでいう署名とは signature のことですが、このエラーは要するに、
      『Sub New() が複数回定義されているけど、どれを使えば良いのか?』
    という意味のメッセージです。

    もっとも単純な再現方法は、
     Public Class Class1
      Public Sub New()
      End Sub
      Public Sub New()
      End Sub
     End Class
    ですね。


    今回の場合、部分クラス(partial class)の働きによって、

     '【FolderTreeView.vb】
     Public Class FolderTreeView
      Inherits TreeView
      Public Sub New()
       ':
      End Sub
     End Class

     '【FolderTreeView.designer.vb】
     Public Class FolderTreeView
      Inherits TreeView
      Public Sub New()
       ':
      End Sub
     End Class

    のように、別々のファイルで Sub New() が定義された状態になっているはずです。

    この場合、FolderTreeView.designer.vb 側にある Sub New()〜End Sub の部分を
    FolderTreeView.vb 側に移動させてみてください。切り取り & 貼り付けで。
    Sub New が一つだけの状態になったら、改めて、その中に
    やりたい処理を記述していきましょう。


    > Icons.Images.Add("Close", Image.FromFile("C:\CloseFolder.jpg"))
    > Icons.Images.Add("Open", Image.FromFile("C:\OpenFolder.jpg"))
    サンプルだからとは思いますが、パス固定で Image.FromFile を
    使うのは避けましょう。代わりに、リソース内に画像を用意して
    それを割り当ててみてください。

    もしも外部ファイルを使うにしても、Try〜Catchを併用して
    ファイルアクセスエラーに備えるべきです。


    > だから、Shared を外したり、PrivateやPublicに変更することができませんでした。

    Shared や Private/Public を行き当たりばったりで付け外ししちゃあ駄目ですよ。(^_^;)


    念のため、再度お聞きします。
    「『Sub New』と『Shared Sub New』の違いは分かりますか?」
記事No.66962 のレス /過去ログ113より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -