現在、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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
カメラスクロールするのを動画...
-
エクセル・VBA CheckBoxのオブ...
-
(VBA)スピンボタンの大量...
-
変数をコントロール型で使用す...
-
With~EndWithの省略部分と引数...
-
VBAのエラーについて、”実行時...
-
コンボボックスの文字によるif...
-
ACCESS2010のVBAでフォーム内ク...
-
vb.netで画面のコントロールId...
-
VB6でシリアルポートの制御
-
シート上のコントロール(TextB...
-
[MFC]コントロールに合わせてフ...
-
行方不明のボタンを消したい
-
ユーザーフォームで動的(Me.Con...
-
'ckbl' コントロールは作成され...
-
ElementHostタスクにWPFが表示...
-
VB.NET 動的コントロールの存在...
-
WIN32でOCXを利用する方法を教...
-
Groupboxの配下のコントロール...
-
ListViewのチェックボックスに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カメラスクロールするのを動画...
-
エクセル・VBA CheckBoxのオブ...
-
vb.netで画面のコントロールId...
-
エクセルVBAでオプションボタン...
-
EXCELでactivexコントロールを...
-
ExcelVBAでListViewが使用できない
-
excelのリストボックスで選択し...
-
ユーザーフォームで動的(Me.Con...
-
フォーム上の現在アクティブな...
-
C#で自分のウインド・ハンド...
-
変数をコントロール型で使用す...
-
VBAのフォームでTextBoxがいっ...
-
コントロールを移動できない
-
Groupboxの配下のコントロール...
-
C#で角が丸いテキストボックス
-
(VBA)スピンボタンの大量...
-
間違えて配置してしまったコン...
-
エクセル コントロールツール...
-
'ckbl' コントロールは作成され...
-
OCXって何ですか?
おすすめ情報