• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:コントロールをロックしたい)

コントロールをロックする方法

このQ&Aのポイント
  • VB.NETのWINDOWSアプリケーションで開発している際に、テキストボックスやボタンをロックする共通関数を作成する方法を教えてください。
  • フォームのLoadイベントで、指定したテキストボックスやボタンをロックする共通関数を呼び出す方法について教えてください。
  • 共通関数LookControlについて、どのコントロールが引数で渡されてもロックする機能を実装する方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

'よく考えたらIf文いらない気がする。 For Each cldControl As Control In pControl.Controls LookControl(cldControl, pReadFlg) Next '後は俺がさっき言ったとおり cldControl.Enabled = False 'ReadOnlyプロパティでなければならない理由があれば別だけど。 'TextBoxだろうが,ButtonだろうがControlを継承しているから '全てがEnabledを持つはずで,分岐が不要なんでは?というのが#1の後半のお話

noname#208236
質問者

補足

できました。 迅速なお返事のおかげで、解決も早く本当に助かりました。 ありがとうございました。

その他の回答 (3)

回答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

noname#208236
質問者

補足

コントロール名の取得わかりました。 ですが、次のステップでまたつまづいてしまいました。 下記のところで抜けてしまい、テキストボックスの場合に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.windows.forms.control.controlcollection.item.aspx 例えば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.windows.forms.control.enabled.aspx

noname#208236
質問者

補足

早々の回答ありがとうございます。 >それはコントロール名を「文字列」で渡したいってことかな? はい。 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

専門家に質問してみよう