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

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

C# と VB.NET の入門サイト

Re[3]: ツリービューの自作


(過去ログ 113 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■66962 / inTopicNo.1)  ツリービューの自作
  
□投稿者/ 寿里庵 (6回)-(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


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


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

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

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

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


よろしくお願いします
引用返信 編集キー/
■66970 / inTopicNo.4)  Re[3]: ツリービューの自作
□投稿者/ shu (338回)-(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() 呼び出しの後で初期化を追加します。
の下に切り取った内容を貼りつけます。


引用返信 編集キー/
■66972 / inTopicNo.5)  Re[3]: ツリービューの自作
□投稿者/ 魔界の仮面弁士 (247回)-(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』の違いは分かりますか?」
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -