
現在、VB.NETのWINDOWSアプリケーションで開発しており、DBはSqlserver2005を使用しています。
フォームLoad時に、指定したテキストボックスやボタンをロックする(readonly)共通関数を作成しようと考えています。
そこで、どのように記述すればいいか教えて下さい。
(1)フォームロード時 共通関数LookControlを実行する際、引数にコントロール名を渡したいのですが、
どのようにすればいいでしょうか?
Private Sub フォーム_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'テキストボックスの場合
Call LookControl(???, True) ←コントロール名の渡し方
'コンボボックスの場合
Call LookControl(???, True)
'ボタンの場合
Call LookControl(???, True)
End Sub
(2)共通関数LookControl
どのコントロールが引数で渡されてもロックができる関数を作りたい。
Module mod共通関数_表示
Public Sub LookControl(ByVal pControl As Control, ByVal pReadFlg As Boolean)
Dim Textbox As TextBoxBase
'Dim Combbox As ComboBox
'Dim Bottan As Button
Try
For Each cldControl As Control In pControl.Controls
If pControl.HasChildren = True Then
LookControl(cldControl, pReadFlg)
End If
'
Select Case True
Case TypeOf cldControl Is TextBoxBase
TextBox = DirectCast(cldControl, TextBoxBase)
TextBox.ReadOnly = pReadFlg
Case TypeOf cldControl Is ComboBox
???
Case TypeOf cldControl Is Button
???
End Select
Next
Catch oExcept As Exception
'例外が発生した時の処理
MessageBox.Show(oExcept.ToString, "例外発生")
End Try
End Sub
End Module
No.4ベストアンサー
- 回答日時:
'よく考えたらIf文いらない気がする。
For Each cldControl As Control In pControl.Controls
LookControl(cldControl, pReadFlg)
Next
'後は俺がさっき言ったとおり
cldControl.Enabled = False
'ReadOnlyプロパティでなければならない理由があれば別だけど。
'TextBoxだろうが,ButtonだろうがControlを継承しているから
'全てがEnabledを持つはずで,分岐が不要なんでは?というのが#1の後半のお話
No.3
- 回答日時:
For Each cldControl As Control In pControl.Controls ←ここで処理が抜けてしまう
If pControl.HasChildren = True Then
LookControl(cldControl, pReadFlg)
End If
Next ' 試してないけどNextをここに持ってくるとどう?
Select Case True
Case TypeOf cldControl Is TextBoxBase
'*** TextBox ***
Textbox = DirectCast(cldControl, TextBoxBase)
Textbox.ReadOnly = pReadFlg
Case TypeOf cldControl Is ComboBox
'*** ComboBox ***
End Select
' ここのNextは削除
No.2
- 回答日時:
Private Sub フォーム_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Call LookControl(Me.Controls("TextBox1"), True) '←コントロール名の渡し方
End Sub
>文字列からControlインスタンスを得る方法
こっちを採用したんだけどこれじゃダメ?
#Windowsアプリケーションとして作らない場合は
#デフォルトが空文字列だったorz
この回答への補足
コントロール名の取得わかりました。
ですが、次のステップでまたつまづいてしまいました。
下記のところで抜けてしまい、テキストボックスの場合にreadonlyする処理が通りません。どうしてでしょうか?
Public Sub LookControl(ByVal pControl As Control, ByVal pReadFlg As Boolean)
Dim Textbox As TextBoxBase
Dim ComboBox As ComboBox
'*****
Try
For Each cldControl As Control In pControl.Controls ←ここで処理が抜けてしまう
If pControl.HasChildren = True Then
LookControl(cldControl, pReadFlg)
End If
'
Select Case True
Case TypeOf cldControl Is TextBoxBase
'*** TextBox ***
Textbox = DirectCast(cldControl, TextBoxBase)
Textbox.ReadOnly = pReadFlg
Case TypeOf cldControl Is ComboBox
'*** ComboBox ***
End Select
Next
Catch oExcept As Exception
'例外が発生した時の処理
MessageBox.Show(oExcept.ToString, "例外発生")
End Try
End Sub
No.1
- 回答日時:
良く判らなかったんだけど
それはコントロール名を「文字列」で渡したいってことかな?(Or 文字列からControlインスタンスを得る方法)
もしそれで正しいのなら
一応
System.Windows.Forms.Form.Controlsを含むControl.Controls
は
Control.ControlCollectionで
http://msdn.microsoft.com/en-us/library/system.w …
例えばMeをSystem.Windows.Forms.Formインスタンスとして
Me.Controls("PictureBox1")とかでControlインスタンスそのものが得られると思う。
====================
>Select Case True
>Case TypeOf cldControl Is TextBoxBase
>TextBox = DirectCast(cldControl, TextBoxBase)
>TextBox.ReadOnly = pReadFlg
>Case TypeOf cldControl Is ComboBox
>Case TypeOf cldControl Is Button
>End Select
やりたいことは分からんでもないのだけれど
Control.Enabledじゃだめなの?
http://msdn.microsoft.com/en-us/library/system.w …
この回答への補足
早々の回答ありがとうございます。
>それはコントロール名を「文字列」で渡したいってことかな?
はい。
Private Sub フォーム_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Call LookControl("テキスト名", True)
End Sub
でしたいと思っています。
>System.Windows.Forms.Form.Controlsを含むControl.Controlsは
>Control.ControlCollectionで
>例えばMeをSystem.Windows.Forms.Formインスタンスとして
>Me.Controls("PictureBox1")とかでControlインスタンスそのものが>得られると思う。
すみません。まだVB.NETを始めたばかりの初心者なのでもう少し詳しく教えてもらえないでしょうか?
Public Sub LookControl(ByVal pControl As Control, ByVal pReadFlg As Boolean)
<共通モジュール>
End Sub
とした時の引数をどうしたらいいかわかりません。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELでactivexコントロールを...
-
エクセルVBAでオプションボタン...
-
コントロールを移動できない
-
ExcelVBAでListViewが使用できない
-
ExcelVBAのコントロールの種類...
-
C#で角が丸いテキストボックス
-
'ckbl' コントロールは作成され...
-
エクセル・VBA CheckBoxのオブ...
-
OCXって何ですか?
-
VBA ユーザーフォームの Keypre...
-
チェックボックスをオンにした...
-
Excel VBA で Richtextboxを使...
-
Excel VBA ファイル名をドラ...
-
ActiveXコントロールはどこへい...
-
VBAでドラッグ・アンド・ドロップ
-
C# Form上に配置されたコントロ...
-
vb.netで画面のコントロールId...
-
BEGIN_EVENTSINK_MAPをお教えく...
-
C# 子のコントロールからイベン...
-
Shapeコントロールの.NET移行方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBAでオプションボタン...
-
エクセル・VBA CheckBoxのオブ...
-
カメラスクロールするのを動画...
-
EXCELでactivexコントロールを...
-
VBA ユーザーフォームの Keypre...
-
'ckbl' コントロールは作成され...
-
ExcelVBAでListViewが使用できない
-
チェックボックスをオンにした...
-
ユーザーフォームで動的(Me.Con...
-
chr関数の呼び出しで「プロ...
-
全てのオブジェクトのプロパテ...
-
vb.netで画面のコントロールId...
-
間違えて配置してしまったコン...
-
Excel VBA で Richtextboxを使...
-
VBAのフォームでTextBoxがいっ...
-
OCXって何ですか?
-
C# Form上に配置されたコントロ...
-
エクセル コントロールツール...
-
変数をコントロール型で使用す...
-
Groupboxの配下のコントロール...
おすすめ情報