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

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

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

カスタムコントロールのプロパティについて


(過去ログ 3 を表示中)

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

■2791 / inTopicNo.1)  カスタムコントロールのプロパティについて
  
□投稿者/ みぃ 二等兵(1回)-(2006/03/10(Fri) 16:17:02)

分類:[VB.NET] 


分類:[VB.NET] 

2006/03/10(Fri) 16:17:53 編集(投稿者)

初めまして、VB.NETを勉強中のみぃと申します。
TextBoxを継承したカスタムコントロールを作ってみようと思い
まずは、フォーカスがあるときとないときの背景色を設定できる
コントロールを作成しました。
そこで1つわからないことがあり書き込みさせて頂きました。

作成したコントロールは次のようなものです。
Public Class TextBoxEx2
Inherits System.Windows.Forms.TextBox

Public Sub New()
MyBase.New()
End Sub

#Region "TextBoxEx_Enterイベント"
Private Sub TextBoxEx_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Enter
''背景色を設定する
With Me
.BackColor = Color.Yellow
End With
End Sub
#End Region

#Region "TextBoxEx_Leaveイベント"
Private Sub TextBoxEx_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Leave
''背景色を元に戻す
With Me
.BackColor = Color.WhiteSmoke
End With
End Sub
#End Region
End Class

これ自体は問題なく動いているのですが、このコントロールのReadOnlyプロパティを
Trueにしてもテキストボックス自体がフォーカスを取得してしまい背景色が
変わってしまいます。
カスタムコントロールをReadOnlyにしたい場合はどのようにすれば良いのか
ご教授頂けないでしょうか。よろしくお願い致します。

VS.NET2003(VB使用)

0
引用返信 編集キー/
■2793 / inTopicNo.2)  Re[1]: カスタムコントロールのプロパティについて
□投稿者/ ryuukou 二等兵(1回)-(2006/03/10(Fri) 17:33:30)

分類:[VB.NET] 

失礼します。

フォーカスを取得してしまうとのことですので

TabStopをFalseにすればいいのかなと思います。
見当違いでしたら、申し訳ありません。


0
引用返信 編集キー/
■2794 / inTopicNo.3)  Re[1]: カスタムコントロールのプロパティについて
□投稿者/ 名無しぃシャープ 軍曹(60回)-(2006/03/10(Fri) 18:30:05)

分類:[VB.NET] 

No2791に返信(みぃさんの記事)
> これ自体は問題なく動いているのですが、このコントロールのReadOnlyプロパティを
> Trueにしてもテキストボックス自体がフォーカスを取得してしまい背景色が
> 変わってしまいます。
> カスタムコントロールをReadOnlyにしたい場合はどのようにすれば良いのか
> ご教授頂けないでしょうか。よろしくお願い致します。

ReadOnlyがTrueならば、背景色を変えないという条件を入れるだけ。
EnterイベントとLeaveイベントに入れればよい。

No2793に返信(ryuukouさんの記事)
> 失礼します。
> フォーカスを取得してしまうとのことですので
>
> TabStopをFalseにすればいいのかなと思います。
> 見当違いでしたら、申し訳ありません。

たぶん見当違いですね。
マウスでフォーカスは取得できます。

0
引用返信 編集キー/
■2807 / inTopicNo.4)  Re[2]: カスタムコントロールのプロパティについて
□投稿者/ みぃ 二等兵(2回)-(2006/03/13(Mon) 10:37:53)

分類:[VB.NET] 

お返事遅くなりました。申し訳ないです。
ryuukouさん、名無しぃシャープさんコメントありがとうございます。

No2794に返信(名無しぃシャープさんの記事)
> ReadOnlyがTrueならば、背景色を変えないという条件を入れるだけ。
> EnterイベントとLeaveイベントに入れればよい。

私もこの条件をいれるだけかと思ってやってみたのですが
背景色は変更されませんが、フォーカスは取得してしまうようなんです。

> ■No2793に返信(ryuukouさんの記事)
>>失礼します。
>>フォーカスを取得してしまうとのことですので
>>
>>TabStopをFalseにすればいいのかなと思います。
>>見当違いでしたら、申し訳ありません。
>
> たぶん見当違いですね。
> マウスでフォーカスは取得できます。

はい。名無しぃシャープさんのおっしゃる通りマウスでのフォーカス取得も
したくないのでTabStopではなくReadOnlyをTrueに設定したいのです。


説明が不十分だったので、もう一度何がしたいのか書きますと
下記のようなカスタムコントロールを作成しました。
Public Class TextBoxEx
Inherits System.Windows.Forms.TextBox

#Region "New"
Public Sub New()
MyBase.New()
End Sub
#End Region

#Region "TextBoxEx_Enterイベント"
Private Sub TextBoxEx_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Enter
'文字を選択状態にする
CType(sender, TextBoxEx).SelectAll()
'背景色を設定する
With Me
.BackColor = Color.Yellow
End With
End Sub
#End Region

#Region "TextBoxEx_Leaveイベント"
Private Sub TextBoxEx_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Leave
'背景色を戻す
With Me
.BackColor = Color.WhiteSmoke
End With
End Sub
#End Region

End Class

続いてWindowsアプリを新規に作成し、このコントロールを3つ配置しました。
各コントロールのReadOnlyプロパティはFalse/True/Falseという順です。
これで実行すると、Tabキーでフォーカス移動をさせたとき2つ目のコントロールには
飛んで欲しくないのですが、現状飛んでしまいます。
ReadOnlyプロパティが有効でないような・・・
どうしたら標準のTextBoxコントロールと同じような動きになるのか悩んでいます。
よろしくお願いします。

0
引用返信 編集キー/
■2808 / inTopicNo.5)  Re[3]: カスタムコントロールのプロパティについて
□投稿者/ 名無しぃシャープ 軍曹(62回)-(2006/03/13(Mon) 10:54:27)

分類:[VB.NET] 

No2807に返信(みぃさんの記事)
> これで実行すると、Tabキーでフォーカス移動をさせたとき2つ目のコントロールには
> 飛んで欲しくないのですが、現状飛んでしまいます。
> ReadOnlyプロパティが有効でないような・・・
> どうしたら標準のTextBoxコントロールと同じような動きになるのか悩んでいます。
> よろしくお願いします。

ReadOnlyはそういうものなのであってますよ。
みぃさんがEnabledのような動きであると誤解してらっしゃるようです。

0
引用返信 編集キー/
■2809 / inTopicNo.6)  Re[4]: カスタムコントロールのプロパティについて
□投稿者/ みぃ 二等兵(3回)-(2006/03/13(Mon) 12:14:57)

分類:[VB.NET] 

No2808に返信(名無しぃシャープさんの記事)
> ReadOnlyはそういうものなのであってますよ。
> みぃさんがEnabledのような動きであると誤解してらっしゃるようです。

無しぃシャープさん、こんにちは〜
そうでしたか・・・
実際標準のTextBoxでやってみたら、おっしゃる通りでした。
どこでこんな思い込みをしたのやら・・・(〃▽〃)
大騒ぎして申し訳ないです。m(_ _)m

タイトルとは違った話になってしまうんですが、今気付いたことがあって
質問させてください。
この作成したコントロールをWindowsアプリに貼り付けたとき、フォームデザイナー
でコントロールのサイズ変更をしようと思ったら、横(Width)サイズは変更できる
のですが、縦(Height)サイズの方が変更できないようなんです。
カスタムコントロールってそういうものなんですか??
それから、コントロールの作成する際、今回の場合は
Inherits System.Windows.Forms.TextBox
としてますが、これを
Inherits System.Windows.Forms.UserControl
として、TextBoxコントロールを貼り付けて作成する場合とでは
Windowsアプリ側に、このコントロールを配置したとき表示される
プロパティウィンドウの項目数が違うのですが・・・
Inherits System.Windows.Forms.UserControl
で作成したコントロールの場合、ReadOnlyプロパティが表示されてなかったので
ちょっと気になりまして。
初歩的な質問で本当に申し訳ないです(^^;

0
引用返信 編集キー/
■2813 / inTopicNo.7)  Re[5]: カスタムコントロールのプロパティについて
□投稿者/ 名無しぃシャープ 軍曹(64回)-(2006/03/13(Mon) 13:40:02)

分類:[VB.NET] 

No2809に返信(みぃさんの記事)
> 実際標準のTextBoxでやってみたら、おっしゃる通りでした。
> どこでこんな思い込みをしたのやら・・・(〃▽〃)
> 大騒ぎして申し訳ないです。m(_ _)m

いやー勘違いは誰にでもあるし全然迷惑じゃないですよ。

> でコントロールのサイズ変更をしようと思ったら、横(Width)サイズは変更できる
> のですが、縦(Height)サイズの方が変更できないようなんです。
> カスタムコントロールってそういうものなんですか??

多分、これもみぃさんが誤解してらっしゃる類です。
通常のTextBoxもそうなってますよね?
で、Heightはいつ変更できるかと言いますと、MultiLineプロパティがTrueの時だけです。
要するに複数行入力の場合でしか変更ができないというわけです。

> それから、コントロールの作成する際、今回の場合は
> Inherits System.Windows.Forms.TextBox
> としてますが、これを
> Inherits System.Windows.Forms.UserControl
> として、TextBoxコントロールを貼り付けて作成する場合とでは
> Windowsアプリ側に、このコントロールを配置したとき表示される
> プロパティウィンドウの項目数が違うのですが・・・

そりゃまあ、継承元が違えば継承されるプロパティも違いますから。

> Inherits System.Windows.Forms.UserControl
> で作成したコントロールの場合、ReadOnlyプロパティが表示されてなかったので
> ちょっと気になりまして。
> 初歩的な質問で本当に申し訳ないです(^^;

これは、リビルドした状態であれば表示されるはずだと思います。

0
引用返信 編集キー/
■2814 / inTopicNo.8)  Re[6]: カスタムコントロールのプロパティについて
□投稿者/ まどか 曹長(89回)-(2006/03/13(Mon) 13:53:19)

分類:[VB.NET] 

> で、Heightはいつ変更できるかと言いますと、MultiLineプロパティがTrueの時だけです。

AutoSizeプロパティが既定でTrueのためです。
Falseにすればびよーんとできますよ。
デザインかNewコンストラクタでFalseにしてあげればよいと思います。

0
引用返信 編集キー/
■2815 / inTopicNo.9)  Re[7]: カスタムコントロールのプロパティについて
□投稿者/ 名無しぃシャープ 軍曹(65回)-(2006/03/13(Mon) 15:18:06)

分類:[VB.NET] 

No2814に返信(まどかさんの記事)
> AutoSizeプロパティが既定でTrueのためです。

そりゃ2005でしょ。。。2003って書いてあるぞえ。

0
引用返信 編集キー/
■2816 / inTopicNo.10)  Re[8]: カスタムコントロールのプロパティについて
□投稿者/ 魔界の仮面弁士 軍曹(70回)-(2006/03/13(Mon) 15:32:01)

分類:[VB.NET] 

2006/03/13(Mon) 15:33:40 編集(投稿者)

#修正 : 規定値 → 既定値

>>AutoSizeプロパティが既定でTrueのためです。
> そりゃ2005でしょ。。。2003って書いてあるぞえ。

AutoSize の既定値は、2002 でも 2003 でも「True」だと思いますが…。

http://www.microsoft.com/japan/msdn/library/ja/cpref/html/frlrfsystemwindowsformstextboxbaseclassautosizetopic.asp
http://msdn2.microsoft.com/ja-JP/library/system.windows.forms.textboxbase.autosize.aspx

0
引用返信 編集キー/
■2817 / inTopicNo.11)  Re[9]: カスタムコントロールのプロパティについて
□投稿者/ みぃ 二等兵(4回)-(2006/03/13(Mon) 16:03:51)

分類:[VB.NET] 

名無しぃシャープさん、まどかさん、魔界の仮面弁士さん、アドバイスありがとうございます。

> 縦(Height)サイズの方が変更できない

まどかさんのおっしゃる通り、AutoSizeがTrueになっていました。
Falseにして無事解決しました。
今まで、サイズ変更する際にAutoSizeを気にしたことがなかったのですが
既定値がTrueって言う事は、変更できないんですよねぇ・・・
初心者なもので、いろいろプロパティをいじっているうちにFalseにしていたのかもしれません(^^;

> Inherits System.Windows.Forms.UserControl
> で作成したコントロールの場合、ReadOnlyプロパティが表示されてなかったので
> ちょっと気になりまして。
>> これは、リビルドした状態であれば表示されるはずだと思います。

リビルドすると表示されるんですか!!知りませんでした。。。
いつもコントロールの参照を再設定して、ツールボックスの設定も再設定してと
ごちゃごちゃやっています・・・
リビルドするだけで反映される場合と、されない場合の区別がまだできていません。

みなさま、いろいろなアドバイスありがとうございました。
大変勉強になりました。
今後ともよろしくお願い致します。

解決済み
引用返信 編集キー/
■2818 / inTopicNo.12)  Re[9]: カスタムコントロールのプロパティについて
□投稿者/ 名無しぃシャープ 軍曹(66回)-(2006/03/13(Mon) 16:04:04)

分類:[VB.NET] 

No2816に返信(魔界の仮面弁士さんの記事)
> 2006/03/13(Mon) 15:33:40 編集(投稿者)
>
> #修正 : 規定値 → 既定値
>
> >>AutoSizeプロパティが既定でTrueのためです。
>>そりゃ2005でしょ。。。2003って書いてあるぞえ。
>
> AutoSize の既定値は、2002 でも 2003 でも「True」だと思いますが…。
>
> http://www.microsoft.com/japan/msdn/library/ja/cpref/html/frlrfsystemwindowsformstextboxbaseclassautosizetopic.asp
> http://msdn2.microsoft.com/ja-JP/library/system.windows.forms.textboxbase.autosize.aspx

ありゃそうなん?
Labelの何かと勘違いしてたっぽいですわ。すんません。

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


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

このトピックに書きこむ

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

管理者用

- Child Tree -