tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトル検索ダイアログ
記事No9024
投稿日: 2009/05/26(Tue) 20:16
投稿者bin
VB2008 Express Edition を使用しある本に従ってエディタに検索機能をつけよ
うとしています。
質問はコーディングの下のほうにある CType(Me.Owner, Form1) のところで
「Form1 が定義されていません」という警告が出されてしまい、どのように定
義したらよいのかわかりません。
出版元に質問すると「そのようなことはない。VB を再インストールしたらどう
か」という答えがかえってきました。
Form1 をどのように定義すればよいのかお教えください。

メインのフォーム Form1
検索のフォーム  FindDialog
下記はFindDialog.vbのコーディングの一部
-----------------------------------------------------------------------
Public Class FindDialog
    Public StrFind As String

    Private Sub FindDialog_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        TextBox1.Text = StrFind
    End Sub

    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
        StrFind = TextBox1.Text
    End Sub

    Private Sub btnNext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNext.Click
        If StrFind.Length > 0 Then
            CType(Me.Owner, Form1).StrFind = Me.StrFind
            CType(Me.Owner, Form1).EditFindNext()
        End If
    End Sub

   以下 略


------------------------------------------------------------------------

[ツリー表示へ]
タイトルRe: 検索ダイアログ
記事No9027
投稿日: 2009/05/27(Wed) 11:06
投稿者るしぇ
>メインのフォーム Form1
これが定義になります。新たに定義する必要はありません。
(定義してはいけません)
実際のコードでは
Public Class Form1
という風にクラスとして定義されていると言えます。

>Form1 が定義されていません
FindDialog クラス内で Form1 を探そうとしたけど無かった
 ↓
FindDialog クラスから Form1 クラスが見えていない
ということではないでしょうか。
これには Public Friend Private といったスコープが
関係してきます。

ただし、同じプロジェクト内でデフォルト設定のまま
フォームを追加した場合、Friend(Public) で見える状態で
追加されるはずなのです。

コードを理解しないまま手で打ち込んで間違ってるとか、
名前空間とか色々設定すると見えなくなったりもする
でしょうが、そんな特別な設定をこちらで想像するのは
無理なので、まずは新規プロジェクトで確認してください。

Windowsフォームアプリケーションで作成してください。
デフォルトで Form1 は作成されると思うので、そこは
一切変更せず、プロジェクトのメニューからフォームの
追加をしてください。FindDialog で追加してください。

2つのフォームを自動で作らせた時、クラスの定義が
Public もしくは Friend であることを確かめて
ください。

FindDialog 側で
Private frm As Form1
と書いて同じエラーメッセージが出るようなら、
VB を再インストールも考慮に入れ、マイクロソフトの
サポートを受けたほうが良いかもしれません。
# そんなことは稀だと思うのですが。。。

[ツリー表示へ]
タイトルRe^2: 検索ダイアログ
記事No9030
投稿日: 2009/05/27(Wed) 13:47
投稿者bin
> >メインのフォーム Form1
> これが定義になります。新たに定義する必要はありません。
> (定義してはいけません)
> 実際のコードでは
> Public Class Form1
> という風にクラスとして定義されていると言えます。
>
> >Form1 が定義されていません
> FindDialog クラス内で Form1 を探そうとしたけど無かった
>  ↓
> FindDialog クラスから Form1 クラスが見えていない
> ということではないでしょうか。
> これには Public Friend Private といったスコープが
> 関係してきます。
>

るしぇ 様  

 出来ました!!!!!!!

メインのフォームの Name プロパティが Memo となっていたため実
際のコードでは Public Class Memo となっており、FindDialog か
らは Form1 は存在しなかったのでした。
 Name プロパティを Form1 に変更するとエラーは出なくなりデバ
ックはできるようになり、無事解決しました。
 貴重なご意見どうも有難うございました。

[ツリー表示へ]