標準モジュールでコントロールを操作するには

解決


うい  2006-09-05 22:32:30  No: 133096

環境はVisual  Basic6  SP4、  Windows XPです。

標準モジュール(共通関数)内でテキストボックスなどのコントロールを操作できないのでしょうか。
Text1をはりつけて、
'フォームロード時,フォーム側
Private Sub Form_Load()
TxtCaption(Text1)
End Sub()

'モジュール側
Sub TextCap(txt as TextBox)
txt.Text = "aiueo"
End Sub

これでフォームに張ってあるテキストボックスにaiueoが入りません。
共通の関数を作ってそこにテキストボックスを放り込めば文字やバックの色などが勝手に設定されるものを作るつもりでやっています。


ガッ  2006-09-05 22:54:15  No: 133097

> TxtCaption(Text1)
定義しているのは "TexTCap"ですよね?
別の関数を読んでいるのでは?
またVB6での関数の呼び出しについて調べてみてください。
この場合は Call TextCap(Text1) が適切に思います。

> End Sub()
こういう表記は出来ないはずですが…??


うい  2006-09-05 23:06:03  No: 133098

すいません。
手で打つと間違いが多いのでコピーして載せます。
Text1がテキストボックスです。
'フォーム側
Private Sub Form_Load()
TextCap (Text1)
End Sub

'標準モジュール側です
Sub TextCap(ByVal txt As TextBox)
txt.Text = "aiueo"
End Sub

型が一致しませんというエラーがフォーム側で出ます。

初心者の質問ですがよろしくお願いします。


ガッ  2006-09-05 23:18:55  No: 133099

っっ
> またVB6での関数の呼び出しについて調べてみてください。
> この場合は Call TextCap(Text1) が適切に思います。

というわけで私側では次のようになりました

'Form1
Private Sub Form_Load()
    Call TextCap(Me.Text1)
End Sub

'Module1
Public Sub TextCap(ByVal txt As TextBox)
    'txtのTextを変化させる
    Const s         As String = "abcde"
    txt.Text = s
End Sub

※ただこのような「モノと機能を分離」するような作り方は余り良いものではないかもしれません。
  ただVB6は継承できないので…仕方ない部分もありますが;


うい  2006-09-05 23:35:23  No: 133100

レスありがとうございました。
無事解決することができました。

モノと機能を分離がまずい・・というのを自分なりに考えてみました。
Text1.Text =Kansu1()  や  Text1.BackColor =Kansu2()  で戻り値を
入れるほうがいいということでしょうか。


うい  2006-09-05 23:35:24  No: 133101

レスありがとうございました。
無事解決することができました。

モノと機能を分離がまずい・・というのを自分なりに考えてみました。
Text1.Text =Kansu1()  や  Text1.BackColor =Kansu2()  で戻り値を
入れるほうがいいということでしょうか。


ガッ  2006-09-06 01:38:01  No: 133102

※私が考えているだけの話ですw;
元の話題に戻って、
> 共通の関数を作ってそこにテキストボックスを放り込めば
> 文字やバックの色などが勝手に設定されるものを作るつもりでやっています。
この場合対象はテキストボックスなので、
テキストボックスの機能として「文字やバックの色などが勝手に設定される」を付けるのが纏まってるかなぁと思うのです。
となるとテキストボックスのほとんどの機能を備えたまま新たな機能を付加する形になるので、
この場合はテキストボックスを継承するのが妥当だと思われます。
しかしVB6には継承という機能が無いので(UserControlを用いて)ゴリゴリ実装するか、
(ういさんの様に)オブジェクトから機能を分離して「関数」として実装するかになります。

結局のところどういった方針に基づいてTextCap()を作ったのかという観念論になってしまうのですが(orz
※私の例での、Module1を静的なクラスとしてみたとき、
  "TextCap"は「渡されたテキストボックスの表示を変える」メソッドとしても"見れる"ので、
  この点ではまぁそういうことなら…とも思ったりします。

…要は設計…?

失礼しました//
(ボロがでる気がするので退散ww;


うい  2006-09-06 22:51:50  No: 133103

今のところテキストボックスに持たせたい機能は3種類です。
フォントの色を黒いがいにする(かもしれない)
BackColorを緑にする(かもしれない)
同じ種類の入力チェックをする(確定)

ガッさんのUserControlを作るのはぜんぜん考えなかったのでとても勉強になりました。
あちこちの画面にあるテキストを一個一個設定していくのは
骨が折れると思ったので、設計や仕様が決まった段階であらかじめ色のついたテキストを張っていくのならすぐにできそうです。

とてもいいアイデアまでいただいて無事解決です。
ありがとうございました。


※作成する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。







   このエントリーをはてなブックマークに追加