System.Windows.Forms.Formについて

解決


昨日から初心者  2006-04-28 00:18:11  No: 131162

はじめまして
初めて質問させていただきます。
VB6.0のシステムをVB2005に移行するときにFORM型が
「System.Windows.Forms.Form」と変換されますが、
これだと「ByRef foNowForm As System.Windows.Forms.Form」とした場合、
これまで使用可能だった「foNowForm.textbox.text」といったような使用方法ができません。
どうすれば今までのように使用できるのでしょうか?
どなたか教えてください。
昨日からの.NET超初心者です。


VB梅  2006-04-28 01:19:11  No: 131163

昨日から初心者さん、こんにちわ
質問の内容がまったくわかりません

「使用方法」と言う言葉から推測すると次の質問なのでしょうか?
VB6のときはフォーム(Form1)上にあるテキストボックス(TextBox1)

Form1.  

ここまで入力するとTextBox1を選べるようになるが

VB.Netは

Form1.

ではTextBox1が出てこない。

だとすると、Vb.Netでは

Me.

を使用します。


昨日から初心者  2006-04-28 02:09:24  No: 131164

質問がわかりづらく申し訳ありません。
VB梅様が言っていることは大体あっていると思うのですが、
もっと詳しく書かせていただきます。

元はVB6.0上で「Public Function PFncChkPKey(ByRef foNowForm As Form) As Boolean」
というプロシージャがありました。
そして、「PFncChkPKey」に対して、フォーム自体をパラメータで渡して、フォーム上にあるテキストボックスなどを使用して「foNowForm.txt_PKey1.text〜」(txt_PKey1は渡したどのフォーム上にも存在する)というような使用をしていました。

そのコードをVB2005にて変換しました。
すると、最初に記述したプロシージャが
「Public Function PFncChkPKey(ByRef foNowForm As System.Windows.Forms.Form) As Boolean」
となり、「foNowForm.txt_PKey1.text〜」という使用をしている箇所がすべて「'txt_PKey1' は 'System.Windows.Forms.Form' のメンバではありません。」というエラーが表示されて、VB6.0のような使用方法ができなくなっていました。
そこで、どうすればフォームオブジェクトとして使用できるのかを知りたかったのです。
どうか後教授お願いいたします!!


VB梅  2006-04-28 02:36:08  No: 131165

昨日から初心者さんへ

了解、意味がわかりました。
>どうすればフォームオブジェクトとして使用できるのかを知りたかったのです
結論から言うと、あいまいな変数の設定はVB.Netで受け付けません

目的を持った変数を正確に設定する必要があります。
テキストボックスであれば
Public Function PFncChkPKey(ByRef FormTextBox As TextBox) As Boolean
と言う様にします。

Any もあいまいな変数でしたよね、VB.Netから使用できなくなりました。

ですから、
>txt_PKey1は渡したどのフォーム上にも存在する
としても、VB.Netでは受け付けてくれません。


VB梅  2006-04-28 02:41:06  No: 131166

あちゃ〜

書き忘れました

他の方法として
   Public Function Pf(ByVal Forms As Form) As Boolean
        MsgBox(Forms.Controls.Item(1).Text)
    End Function
と言う方法もあります。

以上  がんばってください


VB梅  2006-04-28 02:41:12  No: 131167

あちゃ〜

書き忘れました

他の方法として
   Public Function Pf(ByVal Forms As Form) As Boolean
        MsgBox(Forms.Controls.Item(1).Text)
    End Function
と言う方法もあります。

以上  がんばってください


昨日から初心者  2006-04-28 02:53:59  No: 131168

VB2005では、フォームをパラメータ渡しするということはできないということですねわかりました。
データで渡す方向で変更を考えてみます。
ありがとうございました。


特攻隊長まるるう  2006-04-28 03:17:56  No: 131169

# 同じような説明を過去、魔界の仮面弁士さんがしてた気がするが…。

[VB.NET2003]の知識で回答してます。

>>どうすればフォームオブジェクトとして使用できるのかを知りたかったのです
>結論から言うと、あいまいな変数の設定はVB.Netで受け付けません
補足すれば Form1 はSystem.Windows.Forms.Form クラスを『継承』した
別のクラスで、Form1 という型だと言ってもいいかな?実際に txt_PKey1 が
存在するのは Form1 のクラスの内部だから System.Windows.Forms.Form
には txt_PKey1 は存在しない。…当前の事ですけどね。

  Public Function PFncChkPKey(ByRef foNowForm As Form1) As Boolean
だったら見れるはずです(ただし、デフォルトは Friend 宣言なので他プロジェクト
からは見れないです)
ただし、これもまた Form1 しか受け取れないから汎用性は無い。

System.Windows.Forms.Form を継承した Form0 を作って Form1 と Form2
が Form0 を継承すれば
  Public Function PFncChkPKey(ByRef foNowForm As Form0) As Boolean
という関数に Form1 と Form2 を渡すことはできます。

…ただ、こんな作りにする必要があるのか?ってのは疑問の残るところ。
>Public Function PFncChkPKey(ByRef foNowForm As System.Windows.Forms.Form) As Boolean
というような関数を作って内部でテキストボックスを操作するという設計を
見直したほうがいいのかもしれないのです。


魔界の仮面弁士  2006-04-28 06:41:59  No: 131170

> System.Windows.Forms.Form を継承した Form0 を作って Form1 と Form2
が Form0 を継承すれば
このような場合には、フォームを継承させるのではなく、「Implements ステートメント」を
使って、インターフェイスを実装させるようにするのが、個人的にはお奨めです。
(Implements 自体は、VB6にもあった機能ですね)


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

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






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