ちょっと便利な小技集(その1) |
********** 目 次 ********** 1.タイトルバーの消し方 2.ラベル等に(&)を表示するには 3.テキストボックスに改行しながら連続してデータを表示するには 4.ピクチャーボックスの Picture プロパティの内容を消去するには 5.Moveメソッドを活用する 6.プログラム通りの順序で実行させる 7.フォーム上のすべてのコントロールへのアクセス 8.フォーカスをもつ(アクティブ)コントロールを調べるには 9.ちょっと便利な小技集(その2)へ移動 |
1.タイトルバーの消し方 | |
オープニングのタイトル画面のフォーム等には普通タイトルバーは表示されません。 BorderStyle を vbBSNone − 0 にすれば同様にタイトルバーは表示されませんがこの場合3Dでは表示されません。(モアベター) フォームの Controlbox プロパティを False にし、Caption を ”” (なにも入力しない)に設定するだけでできます。 別途、タスクバーにアイコンとキャプションを残したままタイトルバーを 外す方法は、こちら |
|
2.ラベル等に(&)を表示するには | |
この場合&&のように2個つづけて書くと1個表示されます。 ””の場合も "花ちゃんの "" ホームページ "" "のように同様にします。 |
|
3.テキストボックスに改行しながら連続してデータを表示するには (062) | |
すでに表示しているデータを足しながら表示する、その時に改行コードも追加する。 その時、テキストボックスの MultiLine プロパティを True にし、 ScrollBars=vbVertical − (2) に設定するのも忘れずに。 ' ファイルの終端までループを繰り返します。 Do While Not EOF(intFileNo) '1 行づつ変数に読み込みます。 Line Input #intFileNo, strTextLine ' テキストボックスに表示します。 strTxtDat = strTxtDat & strTextLine & vbCrLf Loop '一旦変数にすべて読み込みその後テキストボックスに '表示した方が高速に処理できる |
|
4.ピクチャーボックスの Picture プロパティの内容を消去するには | |
Set Picture1.Picture = LoadPicture() これで ヌルファイルがロードされPictureがクリアされます。 |
|
5.Moveメソッドを活用する | |
普通フォーム等にサイズや表示位置の設定・変更は下記のように書きますが Private Sub Form_Load() Form1.Left = 0 Form1.Top = 0 Form1.Width = 8630 Form1.Height = 4500 End Sub Moveメソッドを使用すると1行で済みますし、高速化につながります。 Private Sub Form_Load() Form1.Move 0, 0, 8630, 4500 End Sub フォームを画面いっぱいに表示し、テキストボックスもフォームいっぱいに表示する Private Sub Form_Load() WindowState = vbMaximized (設定値=2) Form1.Show Text1.Move 0, 0, ScaleWidth, ScaleHeight End Sub フォームのサイズが変わってもテキストボックスをフォームいっぱいに表示する Private Sub Form_Resize() Text1.Move 0, 0, ScaleWidth, ScaleHeight End Sub イメージを指定した位置に表示 Image1.Move 200, 200 このように、ついつい最初に覚えたやり方で実現できる事は、他の便利なやり方があっても知らない事が多いのでは!。 |
|
6.プログラム通りの順序で実行させる | |
DoEvents 関数を使用します。 ヘルプには 発生したイベントがオペレーティングシステムによって処理されるようにプログラムで占有していた制御をオペレーティング システムに渡すフロー制御関数です。 次のコードを実行すると 1.Label1.Caption に "10秒後に終了します。" と表示して 2.10秒待ってから 3.Beep となるはずですが、実際はすぐには、Label1に表示されず終了時に表示します。 Command1 と Command2 の違いを比べて見て下さい。 Private Sub Command1_Click() Dim st As Long Label1.Caption = "10秒後に終了します。" st = Timer Do While Timer - st < 10 Loop 'Label1.Caption = "" Beep End Sub Private Sub Command2_Click() Dim st As Long Label2.Caption = "10秒後に終了します。" DoEvents '追加する(本当は、Label2.Refresh のように書く) st = Timer Do While Timer - st < 10 DoEvents '追加する Loop 'Label2.Caption = "" 'DoEvents '本当は、Label2.Refresh のように書く Beep End Sub このような事が起こっていると感じた場合はこの1行を入れて確認して見て下さい。 但し、上記のような事例は、Label2.Refresh で強制的に再描画を行う方が正しいコードです。 詳しくは、ヘルプで、Refresh メソッドの項をご覧下さい。 |
|
7.フォーム上のすべてのコントロールへのアクセス (072) | |
Controls コレクションを使うと、フォーム上のすべてのコントロール (コントロール配列の要素を含む)
のプロパティを設定することができます。 下記はフォーム上のすべてのコントロールのBackColorを赤に設定しています。 いちいち、書かなくてもよいので便利ですね! Private Sub Command1_Click() 'すべてのコントロールのBackColorを変更します。 Dim i As Long '中には無いプロパティもあるのでエラーチェックを On Error Resume Next For i = 0 To Controls.Count - 1 Controls(i).BackColor = QBColor(12) '非表示にする場合 'Controls(i).Visible = False Next i End Sub 上記にTypeName()関数を組合せる事でフォーム上の特定のコントロールを取得できます。 下記では "TextBox" だけ BackColor = QBColor(14) に変更しています。 Private Sub Command2_Click() 'テキストボックスだけBackColorを変更します。 Dim i As Long Dim Mytype As String For i = 0 To Controls.Count - 1 Mytype = TypeName(Controls(i)) 'Debug.Print Mytype If TypeName(Controls(i)) = "TextBox" Then Controls(i).BackColor = QBColor(14) End If Next i End Sub |
|
8.フォーカスをもつ(アクティブ)コントロールを調べるには (003) | |
フォーカスをもつコントロールを調べるには Screen.ActiveControl でできます。 フォームに色々のコントロールを貼付け試して下さい。 Option Explicit 'SampleNo=003 WindowsXP VB6.0(SP5) 2002.04.16 Private Sub Form_Click() Dim strComment As String strComment = " コントロールがアクティブです" Select Case TypeOf Screen.ActiveControl Is Object 'テキストボックスがアクティブ Case TypeOf Screen.ActiveControl Is TextBox Label1.Caption = Screen.ActiveControl.Text & strComment 'リストボックスがアクティブ Case TypeOf Screen.ActiveControl Is ListBox Label1.Caption = Screen.ActiveControl.Name & strComment 'コマンドボタンがアクティブ Case TypeOf Screen.ActiveControl Is CommandButton Label1.Caption = Screen.ActiveControl.Caption & strComment 'その他のコントロールがアクティブ Case Else Label1.Caption = "その他のコントロールがアクティブです" End Select End Sub |
2002/05/16