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

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

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

Re[3]: 変数に代入したコントロールを扱いたい...


(過去ログ 61 を表示中)

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

■35110 / inTopicNo.1)  変数に代入したコントロールを扱いたい...
  
□投稿者/ hs (14回)-(2009/04/20(Mon) 17:00:49)

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

いつもお世話になっております。

現在VS2008 VBで開発しております。
フォームにいくつかのRectangleShapeを配置しておりMouseEnter,MouseLeave時に処理を行いたいのですが、困っております。
全てのRectangleShape一括で処理を行えるように関数にしています。
色々と検索した結果以下のコードにするとできるはずなのですが... エラーです;

Provate Sub FillGradientStyle(ByVal ControlName As String, i As Boolean)
If i = True Then
Me.Controls(ControlName).FillGradientStyle = PowerPacks.FillGradientStyle.Vertical
Else
Me.Controls(ControlName).FillGradientStyle = PowerPacks.FillGradientStyle.None
End If
End Sub

どこが悪いのでしょうか?
よろしくお願いします。





引用返信 編集キー/
■35111 / inTopicNo.2)  Re[1]: 変数に代入したコントロールを扱いたい...
□投稿者/ はつね (998回)-(2009/04/20(Mon) 17:03:51)
はつね さんの Web サイト
No35110 (hs さん) に返信
> 色々と検索した結果以下のコードにするとできるはずなのですが... エラーです;

どのようなエラーなのでしょうか?
エラー内容を知っているのは全世界で質問者さんだけなのですから、手を抜かずに書かないと。。。

引用返信 編集キー/
■35115 / inTopicNo.3)  Re[2]: 変数に代入したコントロールを扱いたい...
□投稿者/ hs (15回)-(2009/04/20(Mon) 17:58:49)
No35111 (はつね さん) に返信

> どのようなエラーなのでしょうか?
> エラー内容を知っているのは全世界で質問者さんだけなのですから、手を抜かずに書かないと。。。

大変失礼いたしました。
エラー内容ですが、「 FillGradientStyle は System.Windows.Forms.Controls のメンバではありません。」とコンパイルができない状態です。

つまり自作関数 Provate Sub FillGradientStyle(ByVal ControlName As String, i As Boolean) 内では、
コントロールを変数に代入してコードを書くとプロパティ名がサポートされない状態です...

RectangleShapeは、Windowアプリに規定で設けられているコントロールだと思うので、ヘッダー部分に、特に何かをImportsする必要はないと思うのですが...
よろしくお願いします。
引用返信 編集キー/
■35119 / inTopicNo.4)  Re[1]: 変数に代入したコントロールを扱いたい...
□投稿者/ aetos (131回)-(2009/04/20(Mon) 18:22:31)
aetos さんの Web サイト
No35110 (hs さん) に返信
> Provate Sub FillGradientStyle(ByVal ControlName As String, i As Boolean)
> If i = True Then
> Me.Controls(ControlName).FillGradientStyle = PowerPacks.FillGradientStyle.Vertical
> Else
> Me.Controls(ControlName).FillGradientStyle = PowerPacks.FillGradientStyle.None
> End If
> End Sub

Provate はコピペミスかな?

Me.Controls(ControlName) の戻り値は Control であって RectangleShape ではありません。
FillGradientStyle は Control には無い RectangleShape 特有のプロパティだからです。

# 正しくは SimpleShape に特有のプロパティ

ControlName が常に RectangleShape の名前しか表さないなら、Me.Controls(ControlName) を SimpleShape にキャストしてやればいいでしょう。
引用返信 編集キー/
■35120 / inTopicNo.5)  Re[3]: 変数に代入したコントロールを扱いたい...
□投稿者/ はつね (1000回)-(2009/04/20(Mon) 18:22:44)
はつね さんの Web サイト
No35115 (hs さん) に返信
> エラー内容ですが、「 FillGradientStyle は System.Windows.Forms.Controls のメンバではありません。」と

System.Windows.Forms.Controlsというのはコントロールの共通部分みたいなものです。
例えばTextBoxにはFillGradientStyleはありません。
FillGradientStyleがメンバとしてあるようなコントロールだけ、代入行を実行できるようにすれば良いと思います。

If TypeOf Me.Controls(ControlName) Is RectangleShape Then
 :
 :
 :
End If


> RectangleShapeは、Windowアプリに規定で設けられているコントロール

どこまでで規定で設けられているかって事もあるんですが、少なくともVisual Basic PowerPacksなので、System.Windows.Formsには含まれていないような。



引用返信 編集キー/
■35123 / inTopicNo.6)  Re[2]: 変数に代入したコントロールを扱いたい...
□投稿者/ Hongliang (368回)-(2009/04/20(Mon) 18:29:03)
http://msdn.microsoft.com/ja-jp/library/microsoft.visualbasic.powerpacks.rectangleshape.aspx?ppud=4
そもそも祖先に System.Windows.Forms.Control を持ってないらしいですね。となると Controls に格納されるのはありえないことに。

名前じゃなくて RectangleShape そのものを引数にすればいいんじゃないですか?
引用返信 編集キー/
■35127 / inTopicNo.7)  Re[3]: 変数に代入したコントロールを扱いたい...
□投稿者/ hs (16回)-(2009/04/20(Mon) 18:54:27)
No35119 はつね さん に返信
お忙しいところすばやい対応ありがとうございました。
やはり Imports Microsoft.VisualBasic.PowerPacks が必要でした。

No35119 aetos さん に返信
>ControlName が常に RectangleShape の名前しか表さないなら、Me.Controls(ControlName) を SimpleShape にキャストしてやれば>いいでしょう。
せっかくなのですが私自身の知識では上記の文言がまったく理解できるレベルではありませんでした。

>Provate はコピペミスかな? 
直接入力したものでミスでした。

No35123 Hongliang さん に返信
> そもそも祖先に System.Windows.Forms.Control を持ってないらしいですね。となると Controls に格納されるのはありえないことに。
> 名前じゃなくて RectangleShape そのものを引数にすればいいんじゃないですか?

とりあえず Hongliang さん と aetos さんのを参考に以下のコードで解決いたしました。

ヘッダーに
Imports Microsoft.VisualBasic.PowerPacks を記述

呼び出し元
Call RectBackChenged(Me.RectangleShape1, True)

関数はこうなりました
Private Sub RectBackChenged(ByVal ControlName As RectangleShape, ByVal i As Integer)

  If i = True Then
    ControlName.FillGradientStyle = PowerPacks.FillGradientStyle.Vertical
  Else
    ControlName.FillGradientStyle = PowerPacks.FillGradientStyle.None
  End If

End Sub

皆さんのすばやい回答のおかげであっさり解決しました。

また何かありましたらよろしくお願いいたします。


解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -