現在、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も見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
スプレットシートのGetTextについて。
Visual Basic(VBA)
-
String"から型'Double'への変換は無効です。 とエラーが出ます。
Visual Basic(VBA)
-
VB.NET DataGridView 縦スクロールバーを常に表示
Visual Basic(VBA)
-
-
4
フォームの再読み込み
Visual Basic(VBA)
-
5
DataGridViewで指定したセルの値を取得
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
カメラスクロールするのを動画...
-
C#,vb.netで業務用アプリ開発と...
-
excel VBAでタイマコントロール...
-
LCD 1602ディスプレイの輝度調...
-
無償で利用できる暗号化ライブラリ
-
C#で角が丸いテキストボックス
-
VBでアニメーションGIFを表示す...
-
ユーザーフォームで動的(Me.Con...
-
excelのリストボックスで選択し...
-
VBAのエラーについて、”実行時...
-
Excel VBA で Richtextboxを使...
-
ExcelvbaでActiveコントロール...
-
winndws セキュリティ
-
ACCESSフォームにコント...
-
(VBA)スピンボタンの大量...
-
VBAでドラッグ・アンド・ドロップ
-
ExcelVBAでListViewが使用できない
-
EXCELでactivexコントロールを...
-
VB2005でZorderを実現させるには
-
フォーム上の現在アクティブな...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセル・VBA CheckBoxのオブ...
-
カメラスクロールするのを動画...
-
vb.netで画面のコントロールId...
-
C#,vb.netで業務用アプリ開発と...
-
EXCELでactivexコントロールを...
-
フォーム上の現在アクティブな...
-
ExcelVBAでListViewが使用できない
-
コンボボックスの文字によるif...
-
C#で角が丸いテキストボックス
-
エクセルVBAでオプションボタン...
-
ユーザーフォームで動的(Me.Con...
-
VBAのフォームでTextBoxがいっ...
-
アクセス特有の書き方?
-
エクセル コントロールツール...
-
間違えて配置してしまったコン...
-
変数をコントロール型で使用す...
-
(VBA)スピンボタンの大量...
-
Labelコントロールの(左右)余...
-
excelのリストボックスで選択し...
-
Excel VBA で Richtextboxを使...
おすすめ情報