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

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

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

コントロールが張り付いているコントロールを取得するには


(過去ログ 4 を表示中)

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

■4854 / inTopicNo.1)  コントロールが張り付いているコントロールを取得するには
  
□投稿者/ まじん 伍長(55回)-(2006/07/07(Fri) 19:09:18)

分類:[VB.NET] 


分類:[VB.NET] 

 いつも御世話になります

 現在ユーザーコントロールでトグルボタンを作成しております
うまく説明できるかどうかなのですが ラジオボタンのように パネルやグループボックスの中に複数入れておくと 一つしかtrueにできないボタンにしたいのです
 そこで そのボタンが張り付いているパネルやグループボックスを取得する方法が分かれば できると思うのですが フォーム自体は .Parent で取得できるのですが張り付いているコントロール自体を取得する方法がわかりません
 どうすれば 良いんでしょうか?

 宜しくお願い致します。

0
引用返信 編集キー/
■4858 / inTopicNo.2)  Re[1]: コントロールが張り付いているコントロールを取得するには
□投稿者/ まどか 大尉(170回)-(2006/07/08(Sat) 00:20:09)

分類:[VB.NET] 

> ラジオボタンのように パネルやグループボックスの中に複数入れておくと 一つしかtrueにできないボタンにしたいのです

「一つしかtrueにできない」をどこへ実装するつもりですか?
#これがポイントだったりします。

>  そこで そのボタンが張り付いているパネルやグループボックスを取得する方法が分かれば できると思うのですが フォーム自体は .Parent で取得できるのですが張り付いているコントロール自体を取得する方法がわかりません

パネルやグループの中であればコンテナの子コントロールなのでControlsコレクションを参照することになります。

どんな実装をするのかわかりませんが、Parentはフォームとは限りません。
パネルの中にパネルがあったりと、あくまで自分のコンテナのことです。
フォームを知りたいのであればFindFormメソッドを使うことになります。

0
引用返信 編集キー/
■4859 / inTopicNo.3)  Re[1]: コントロールが張り付いているコントロールを取得するには
□投稿者/ 名無しぃシャープ 少尉(121回)-(2006/07/08(Sat) 00:36:07)

分類:[VB.NET] 

No4854に返信(まじんさんの記事)
> フォーム自体は .Parent で取得できるのですが張り付いているコントロール自体を取得する方法がわかりません

張り付いているコントロールは、Controlsで知る事ができるってことでいいかな。
ParentとかFindFormとか親のことをどうこうするのはやめた方がいいねー。
方向が逆逆。

0
引用返信 編集キー/
■4860 / inTopicNo.4)  Re[1]: コントロールが張り付いているコントロールを取得するには
□投稿者/ YAS 伍長(59回)-(2006/07/08(Sat) 05:22:10)
YAS さんの Web サイト

分類:[VB.NET] 

>  現在ユーザーコントロールでトグルボタンを作成しております
> うまく説明できるかどうかなのですが ラジオボタンのように パネルやグループボックスの中に複数入れておくと 一つしかtrueにできないボタンにしたいのです

RadioButtonコントロールのAppearanceプロパティをButtonにしたのではだめなのですか?

0
引用返信 編集キー/
■4868 / inTopicNo.5)  Re[2]: コントロールが張り付いているコントロールを取得するには
□投稿者/ まじん 伍長(57回)-(2006/07/09(Sun) 09:38:34)

分類:[VB.NET] 

2006/07/09(Sun) 09:45:23 編集(投稿者)

No4860に返信(YASさんの記事)
 まどかさん、名無しぃシャープ さん、YASさん いつもありがとうございます

ごめんなさい 書き方が悪かったです

例えば form1にpanel1とpanel2があり panel1にbutton1が貼り付いている場合に button1が貼り付いているのはpanel1だ、というのを取得したいのです


>RadioButtonコントロールのAppearanceプロパティをButtonにしたのではだめなのですか?
少しデザイン的な事などで自作したかったので(勉強も兼ねて)・・・

0
引用返信 編集キー/
■4869 / inTopicNo.6)  Re[3]: コントロールが張り付いているコントロールを取得するには
□投稿者/ はいこーん 軍曹(79回)-(2006/07/09(Sun) 10:41:54)

分類:[VB.NET] 

No4868に返信(まじんさんの記事)
> 例えば form1にpanel1とpanel2があり panel1にbutton1が貼り付いている場合に button1が貼り付いているのはpanel1だ、というのを取得したいのです

それはご自分で『最初に』言っているParentプロパティで取得できるでしょうが。

> フォーム自体は .Parent で取得できるのですが張り付いているコントロール自体を取得する方法がわかりません

まあ、ここの捉え方がむちゃくちゃですが。。
(リファレンスを見てから決め付けるようにするクセをつけましょう)

すでに指摘されていますが、Parentプロパティは親コンテナを取得します。
Panelに張り付いていれば、そのPanelのインスタンスへの参照が取得できます。

すでに指摘されているので、とっくに気付いているのかと思った。。。

0
引用返信 編集キー/
■4872 / inTopicNo.7)  Re[4]: コントロールが張り付いているコントロールを取得するには
□投稿者/ まじん 伍長(58回)-(2006/07/09(Sun) 10:59:06)

分類:[VB.NET] 

2006/07/09(Sun) 12:19:23 編集(投稿者)
2006/07/09(Sun) 12:03:26 編集(投稿者)

No4869に返信(はいこーんさんの記事)
 はいこーんさん ありがとうございます

まどかさん、名無しぃシャープ さん、YASさん ごめんなさい

> すでに指摘されていますが、Parentプロパティは親コンテナを取得します。
> Panelに張り付いていれば、そのPanelのインスタンスへの参照が取得できます。
>
> すでに指摘されているので、とっくに気付いているのかと思った。。。

 ごめんなさい 私が間違った操作をしていました
 Button1.Parent.Name で取得できました
 間違って パネルに張り付いていないボタンに.parentとしていました

 どうも 有難う御座いました。

下記のように作りました


Public Class aaToggleButton
Public pText As String = "Toggle"
Public pOnOff As Integer = 0
Public Event _on_off()
Public Event _Click()
Public pBcolor As Color = System.Drawing.SystemColors.Control
Public pFcolor As Color = System.Drawing.SystemColors.ControlDarkDark
_______________________________________________________________________
Private Sub _Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Button1.Location = New System.Drawing.Point(0, 0)

End Sub
_______________________________________________________________________
Private Sub _SizeChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.SizeChanged
Dim h As Integer = Me.Height
Dim w As Integer = Me.Width
Button1.Height = h
Button1.Width = w

End Sub
_______________________________________________________________________
Public Property _Text() As String
Get
Button1.Text = pText
_Text = pText
End Get
Set(ByVal value As String)
Button1.Text = value
pText = value
End Set
End Property
_______________________________________________________________________
Property myFont() As Font
Get
myFont = Button1.Font
End Get
Set(ByVal value As Font)
Button1.Font = value
End Set
End Property
________________________________________
Public Property on_off() As Integer
Get
on_off = pOnOff

End Get
Set(ByVal value As Integer)
pOnOff = value
If value = 1 Then
_On()
Else
_Off()
End If
RaiseEvent _on_off()
End Set
End Property
__________________________________________
Sub _On()

Button1.ForeColor = System.Drawing.SystemColors.ControlDark
Button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat
End Sub
_________________________________________
Sub _Off()

Button1.ForeColor = System.Drawing.SystemColors.ControlDarkDark
Button1.FlatStyle = System.Windows.Forms.FlatStyle.Standard
End Sub
_________________________________________
Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim sen As Button = CType(sender, Button)
RaiseEvent _Click()
If on_off = 0 Then
_On()
on_off = 1
Else
_Off()
on_off = 0
End If
Dim BaseC As Object = Me.Parent ←ここで悩んでました
If on_off = 1 Then
otherset(BaseC)
End If
End Sub
________________________________________
Sub Otherset(ByVal base As Object)
Dim typ As String = TypeName(Me)
Dim nm As String = Me.Name
Console.WriteLine(typ)
For Each c As Control In base.controls
If TypeName(c) = typ Then
If c.Name <> nm Then
CType(c, aaToggleButton).on_off = 0
End If
End If
Next
End Sub
_________________________________________
Public Overrides Property BackColor() As Color
Get
BackColor = pBcolor
End Get
Set(ByVal value As Color)
pBcolor = value
Button1.ForeColor = pFcolor
End Set
End Property
__________________________________________
Public Overrides Property ForeColor() As Color
Get
ForeColor = pFcolor
End Get
Set(ByVal value As Color)
pFcolor = value
Button1.ForeColor = pFcolor
End Set
End Property
End Class
__________________________________________

解決済み
引用返信 編集キー/
■4874 / inTopicNo.8)  Re[5]: コントロールが張り付いているコントロールを取得するには
□投稿者/ 名無しぃシャープ 少尉(123回)-(2006/07/09(Sun) 14:14:00)

分類:[VB.NET] 

> Dim BaseC As Object = Me.Parent ←ここで悩んでました
>   :
> Dim typ As String = TypeName(Me)
> Dim nm As String = Me.Name
>   :
> If TypeName(c) = typ Then
> If c.Name <> nm Then

このあたり、型を重視している言語としてはダメダメっす。
じゃんぬさんの記事をお読みになって実装を考え直した方がいいっす。
http://blogs.wankuma.com/jeanne/archive/2006/06/23/31160.aspx

せっかくインスタンスを持っているのですから、TypeOfまたはIsあたりでどうぞ。

0
引用返信 編集キー/
■4877 / inTopicNo.9)  Re[6]: コントロールが張り付いているコントロールを取得するには
□投稿者/ まじん 伍長(59回)-(2006/07/09(Sun) 15:15:28)

分類:[VB.NET] 

No4874に返信(名無しぃシャープさんの記事)
名無しぃシャープさん 御指摘ありがとうございます

http://blogs.wankuma.com/jeanne/archive/2006/06/23/31160.aspx

ここを読ませて頂いて
下記のように書き直してみました これで大丈夫でしょうか?

もし、下記のIf TypeOf c Is aaToggleButton Thenの部分のaaToggleButtonを Me.・・・と書くとすれば どう書けば良いんでしょう

Dim nm As String = Me.Name
For Each c As Control In base.controls
   If TypeOf c Is aaToggleButton Then
   If c.Name <> nm Then
   CType(c, aaToggleButton).on_off = 0
   End If
End If
Next

0
引用返信 編集キー/
■4878 / inTopicNo.10)  Re[7]: コントロールが張り付いているコントロールを取得するには
□投稿者/ 名無しぃシャープ 少尉(124回)-(2006/07/09(Sun) 15:27:23)

分類:[VB.NET] 

No4877に返信(まじんさんの記事)
> ここを読ませて頂いて
> 下記のように書き直してみました これで大丈夫でしょうか?

まだ、ここがダメだね。

> If c.Name <> nm Then

名前なんかで比較しちゃダメなんです。
インスタンスで比較しよう。

If c Is Me Then

> もし、下記のIf TypeOf c Is aaToggleButton Thenの部分のaaToggleButtonを Me.・・・と書くとすれば どう書けば良いんでしょう

上記がその答えになるかな?
型じゃないから、TypeOfは不要って考えでいいと思うのよねん。

0
引用返信 編集キー/
■4879 / inTopicNo.11)  Re[8]: コントロールが張り付いているコントロールを取得するには
□投稿者/ まじん 軍曹(60回)-(2006/07/09(Sun) 17:00:15)

分類:[VB.NET] 

No4878に返信(名無しぃシャープさんの記事)
名無しぃシャープさん 何度もありがとうございます お世話かけます
> If c Is Me Then
> 上記がその答えになるかな?
> 型じゃないから、TypeOfは不要って考えでいいと思うのよねん。

Dim nm As String = Me.Name
For Each c As aaToggleButton In base.controls
If Not c Is Me Then
CType(c, aaToggleButton).on_off = 0
End If
  Next

こんな感じですか?

0
引用返信 編集キー/
■4880 / inTopicNo.12)  Re[9]: コントロールが張り付いているコントロールを取得するには
□投稿者/ 名無しぃシャープ 少尉(125回)-(2006/07/09(Sun) 17:40:37)

分類:[VB.NET] 

No4879に返信(まじんさんの記事)
> Dim nm As String = Me.Name
> For Each c As aaToggleButton In base.controls
> If Not c Is Me Then
> CType(c, aaToggleButton).on_off = 0
> End If
>   Next
> こんな感じですか?

・nm は要らないんじゃないですか。
・Controlsに含まれるものは、aaToggleButtonって保証はあるんですか?
・Control型で取得してTypeOfで型を見るべきなんじゃないですか?
・型さえわかれば、DirectCastすべきなんじゃないですか?

こんなところかな。

0
引用返信 編集キー/
■4883 / inTopicNo.13)  Re[10]: コントロールが張り付いているコントロールを取得するには
□投稿者/ まじん 軍曹(61回)-(2006/07/09(Sun) 18:40:44)

分類:[VB.NET] 

No4880に返信(名無しぃシャープさんの記事)
名無しぃシャープさん 何度もありがとうございます
> ・nm は要らないんじゃないですか。
そうですよね

> ・Controlsに含まれるものは、aaToggleButtonって保証はあるんですか?
やっぱりだめだ 保証は全然ないです

> ・Control型で取得してTypeOfで型を見るべきなんじゃないですか?
> ・型さえわかれば、DirectCastすべきなんじゃないですか?

ごめんなさい やっぱり 4877の
>もし、下記のIf TypeOf c Is aaToggleButton Thenの部分のaaToggleButtonを Me.・・・と書くとすれば どう書けば良いんでしょう
Me.typeではだめだし
Typeof Meもだめだし
ここが分かりません


0
引用返信 編集キー/
■4884 / inTopicNo.14)  Re[11]: コントロールが張り付いているコントロールを取得するには
□投稿者/ まじん 軍曹(62回)-(2006/07/09(Sun) 19:02:55)

分類:[VB.NET] 

2006/07/15(Sat) 09:46:29 編集(投稿者)

No4883に返信(まじんさんの記事)

できたような気がするんですが・・・

 Dim ty1 As Type = Me.GetType
 Dim ty2 As Type
 For Each c As Control In base.controls
   ty2 = c.GetType
   If ty1 Is ty2 Then
     If Not c Is Me Then
      CType(c, aaToggleButton).on_off = 0
     End If
   End If
 Next

・・・だめですか?

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


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

このトピックに書きこむ

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

管理者用

- Child Tree -